前几天项目用到Map,接着调用Map.entrySet(),结果产生了一些意外的后果.
就是,持久化数据数据的时候出现setter of com.hiber.Hibernate.Test.id 异常.
此异常是提醒,pojo里面未有属性的getter.
因为我在其他方法里面保存过,未曾出现异常,觉得甚是奇怪.后来发现,原来是Map.entrySet()搞的鬼,根据java api.
返回此映射中包含的映射关系的 set 视图。返回的 set 中的每个元素都是一个 Map.Entry。该 set 受映射支持,所以对映射的改变可在此 set 中反映出来,反之亦然。如果修改映射的同时正在对该 set 进行迭代(除了通过迭代器自己的 remove 操作,或者通过在迭代器返回的映射项上执行 setValue 操作外),则迭代结果是不明确的。set 支持通过 Iterator.remove、Set.remove、removeAll、retainAll 和 clear 操作实现元素移除,即从映射中移除相应的映射关系。它不支持 add 或 addAll 操作。
为此,我写了一个测试代码.
public class TestMap {
/**
* @param args
*/
public static void main(String[] args) {
Map test = new HashMap();
//测试,put进TestObject
for(int i=0; i<5; i++){
TestObject to = new TestObject();
test.put(new Integer(i), to);
}
//输出,这里进行类型强制转换,出现java.lang.ClassCastException.
for(Iterator it = test.entrySet().iterator(); it.hasNext();){
TestObjectt = (TestObject)it.next();
t.toString();
//System.out.println(t.);
}
//输出,这里直接转换成Object,并且输出的是自己定义的toString()
//且可以正常输出,为此,我不理解.为什么转换的时候保存.
//估计是里面做了些什么手脚.
for(Iterator it = test.entrySet().iterator(); it.hasNext();){
TestObjectt = (TestObject)it.next();
t.toString();
//System.out.println(t.);
}
}
}
class TestObject{
public String toString(){
System.out.println("TestObject");
return null;
}
}
分享到:
相关推荐
今天,我们来讨论一种遍历Map的方式,即使用Map.Entry和Map.entrySet()。 Map.Entry是什么? ---------------- Map.Entry是一个接口,表示一个映射项,里面有Key和Value。它有两个方法:getKey()和getValue(),...
Iterator<Map.Entry, String>> it = map.entrySet().iterator(); while (it.hasNext()) { Map.Entry, String> entry = it.next(); System.out.println("key= " + entry.getKey() + " and value= " + entry....
Iterator<Map.Entry, String>> iterator = map.entrySet().iterator(); while (iterator.hasNext()) { Map.Entry, String> entry = iterator.next(); System.out.println("key=" + entry.getKey() + " and value=...
Map a = new HashMap(); //方法一 Iterator it = a.entrySet().iterator(); while (it.hasNext()) { ...for(Map.Entry entry:a.entrySet()){ System.out.println(entry.getKey()+"="+entry.getValue()); }
总结,Java中遍历`Map`主要有四种方式,其中通过`Map.entrySet()`进行遍历通常被认为效率较高,尤其在`Map`容量较大的情况下。而在Java 8之后,我们可以利用Lambda表达式简化遍历操作。获取`Map`的长度直接调用`size...
Iterator<Map.Entry, String>> it = map.entrySet().iterator(); while (it.hasNext()) { Map.Entry, String> entry = it.next(); System.out.println("key=" + entry.getKey() + " and value=" + entry....
1、遍历Map.entrySet():它的每一个元素都是Map.Entry对象,这个对象中, 放着的就是Map中的某一对key-value; 2、遍历Map.keySet():它是Map中key值的集合,我们可以通过遍历这个集合来 读取Map中的元素; 3、...
`, `Set<Map.Entry, Integer>> entries = map.entrySet();` ArrayList是List接口的一个具体实现,它基于动态数组。ArrayList的特点是可以快速访问任意位置的元素,但插入和删除元素的效率相对较低,因为需要移动...
for (Map.Entry, Integer> entry : map.entrySet()) { System.out.println("Key: " + entry.getKey() + ", Value: " + entry.getValue()); } ``` 这种方法能够保证遍历顺序与插入顺序一致,但不适用于...
Java中提供了多种Map遍历方式,包括通过获取所有的key、通过Map.entrySet使用iterator遍历、通过Map.entrySet遍历等。 1. 通过获取所有的key遍历 ``` Set<Integer> set = map.keySet(); for (Integer in : map....
import java.util.Map; import java.util.TreeMap; public class MapAppTest { public static void main(String[] args) { noOrder(); hasOrder(); likedHashMap(); } public static void noOrder() { ...
for(Map.Entry,Object> entry:data.entrySet()){ View v = (View) entry.getKey(); v.setOnClickListener(null); } } private void registerLisntener(){ for(Map.Entry,Object> entry:data.entrySet...
以上就是关于Java中Map的使用,特别是HashMap和TreeMap的基本操作。理解这些概念和方法对于处理键值对的数据结构至关重要。通过实践这些示例,你可以更熟练地在Java项目中运用Map接口及其实现类。
for(Entry, Object> entry : map.entrySet()){ System.out.println(entry.getKey()+"::::"+entry.getValue()); } } ``` 在上面的代码中,我们首先创建了一个HashMap对象,并将其初始化为一个空的Map集合。然后,...
通过调用`Map.entrySet()`方法,我们可以获取到Map中所有键值对的`Set`集合。然后,我们可以迭代这个集合,每次迭代得到一个`Map.Entry`对象,该对象代表了一个键值对。以下是如何使用这种方式遍历Map: ```java ...
List<Map.Entry, V>> list = new ArrayList(map.entrySet()); Collections.sort(list, new Comparator<Map.Entry, V>>() { @Override public int compare(Map.Entry, V> o1, Map.Entry, V> o2) { int compare =...
Iterator<Map.Entry, V>> iterator = map.entrySet().iterator(); ``` 2. **创建迭代器**: ```java while (iterator.hasNext()) { Map.Entry, V> entry = iterator.next(); // 处理键值对 } ``` 3. **...
我们可以使用map的entrySet()方法获取所有键值对,然后通过sorted()方法进行排序,最后用collect()方法将结果转换回Map: ```java Map, Integer> map = new HashMap(); // 添加元素... Map, Integer> sortedByValue...
在上述代码中,`map.entrySet()`返回一个包含Map所有键值对的迭代器,将其添加到ArrayList中即可得到一个包含Map.Entry对象的List。如果需要分别获取键和值,可以遍历Map并分别将键和值添加到两个独立的List中。 ...
for (Map.Entry, Integer> entry : map.entrySet()) { System.out.println("Key = " + entry.getKey() + ", Value = " + entry.getValue()); } ``` 当遍历空 Map 时,需注意避免 `NullPointerException`,所以...