本文目录一览:
java中的集合map问题
iter.next()
当遍历到最后一个的时候
正好被iter.next()
打印出来了
然后又要打印下一个,这时已经没有下一个了
所以会报错
解决方法有两个:
hashtable
添加一对key和value- 或者用推荐答案的方法
感觉你想表达的也是先打印key,然后打印对应的value
就用
object
方法就行
for(Iterator iter = map.keySet().iterator(); iter.hasNext();) {
Object obj = iter.next();
System.out.println(obj);
System.out.println(map.get(obj));
}
java集合定义map
Map
接口映射唯一键的值。一个关键是,要使用在日后检索值对象。
给定一个键和一个值,可以在一个Map
对象存储的值。之后的值被存储时,可以使用它的键检索。
抛出一个NoSuchElementException
异常,是因为调用映射不存在的项目。
当一个对象是在映射上的元素不兼容抛出一个ClassCastException
异常。
NullPointerException
异常被抛出,如果试图使用一个空对象。
当试图改变一个不可修改的Map
,则抛出一个UnsupportedOperationException
异常。
方法与描述
void clear()
: 移除调用映射的所有键/值对。boolean containsKey(Object k)
: 返回true
如果调用映射包含k
作为重点。否则,返回false
。boolean containsValue(Object v)
: 返回true
如果映射包含v
作为一个值。否则,返回false
。Set entrySet()
: 返回一组包含在地图中的条目。该集合包含类型Map.Entry
对象。这种方法提供了一组视图调用地图。boolean equals(Object obj)
: 如果obj
是一个Map
返回true
,并且包含相同的条目。否则,返回false
。Object get(Object k)
: 返回与k
关联的值。int hashCode()
: 返回调用映射的哈希代码。boolean isEmpty()
: 如果调用映射为空返回true
。否则,返回false
。Set keySet()
: 返回一个集,其中包含调用映射的键。这种方法提供了一组视图中调用映射的键。Object put(Object k, Object v)
: 放入调用映射中的条目,覆盖与键相关联的任何一个值。键和值分别为k
和v
。如果键已经不存在返回null
。否则,将返回关联键的前一个值。void putAll(Map m)
: 把从m
所有条目放进入此映射。Object remove(Object k)
: 删除其关键字等于k
中的条目。int size()
: 返回在映射上的键/值对的数目。Collection values()
: 返回包含在映射中的值的集合。这种方法提供了一个集合视图在映射中的值。
例子:
映射有其不同的类实现,比如HashMap
。下面是例子来说明映射功能:
Map Elements
{Mahnaz=31, Ayan=12, Daisy=14, Zara=8}
关于Java集合---MAP问题
//我在你的相关语句上进行了注释
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
class Stu {
String name;
int age;
public void setName(String str) {
name = str;
}
public void setAge(int i) {
age = i;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
}
public class Test {
private Map<String, Integer> maps = new HashMap<String, Integer>();
private Stu su = new Stu();
public void tte() {
su.setName("小明");
su.setAge(22);
// su.setName("小张");
// su.setAge(21);
System.out.println("添加前没有数据是吗?:-----" + maps.isEmpty()); // 一上来当然没有数据啦
if (maps.isEmpty() == false) {
System.out.println("已有数据,不需添加了"); // 现在你并没添加数据,当然不会输出
} else if (maps.isEmpty() == true) { // 既然没添加数据,条件成立,执行语句
maps.put(su.getName(), su.getAge());
System.out.println("已添加");
System.out.println("添加后没有数据是吗?:" + maps.isEmpty());
}
}
public static void main(String[] args) {
Test t = new Test();
t.tte();
}
}
//最后说一点,你的
if (maps.isEmpty() == false) {
System.out.println("已有数据,不需添加了");
}
这个语句在程序的开始,当然不可能输出。并且,就算是添加了,也只是在程序运行时加进了内存。程序第二次运行时,系统分配了新的内存。不知你是不是在这点上理解有误。