今天项目中遇到一个小问题,类似的代码如下:
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
/**
*
* @author liyebing
* @version $Id: TestError.java, v 0.1 2011-7-20 下午10:59:59 liyebing Exp $
*/
public class TestError {
public static void main(String[] args) {
Map<String,String> map1=new HashMap<String,String>();
map1.put("key1", "value1");
map1.put("key2", "value2");
List<String> list1=new ArrayList<String>();
list1.add("list1");
Set<String> set1= map1.keySet();
set1.addAll(list1);
}
}
初看,貌似没啥问题,一运行,在最后一行set1.addAll(list1);会抛出下面的异常:
Exception in thread "main" java.lang.UnsupportedOperationException
at java.util.AbstractCollection.add(Unknown Source)
at java.util.AbstractCollection.addAll(Unknown Source)
at demo.lucene.chart1.TestError.main(TestError.java:29)
其实只要是向set1中添加值,都会出现这个异常。具体原因我没去分析,估计是添加值会影响到map1中的key的集合。
记录一下,下次编码避免这个陷阱。
分享到:
相关推荐
1、遍历Map.entrySet():它的每一个元素都是Map.Entry对象,这个对象中, 放着的就是Map中的某一对key-value; 2、遍历Map.keySet():它是Map中key值的集合,我们可以通过遍历这个集合来 读取Map中的元素; 3、...
- **方法一:通过`Map.keySet()`遍历** 这是最基础的遍历方式,通过获取`Map`的`keySet`,然后用增强型for循环遍历`keySet`,再通过`get()`方法获取对应的`value`。 ```java for (Integer in : map.keySet()) { ...
`Map.keySet()`方法可以返回一个包含所有键的`Set`视图。我们可以通过这个`Set`来获取每一个键,进而使用`Map.get(key)`方法获取与该键对应的值。 **代码示例:** ```java for (Integer key : map.keySet()) { ...
ArrayList是List接口的一个具体实现,它基于动态数组。ArrayList的特点是可以快速访问任意位置的元素,但插入和删除元素的效率相对较低,因为需要移动后续元素。常用操作有: 1. 创建ArrayList:`List<String> list...
Map.entrySet()是一个方法,返回一个Set<Map.Entry,V>>,其中包含了Map中的所有映射项。 遍历Map的方式 ------------- 有多种遍历Map的方式,我们来讨论使用Map.Entry和Map.entrySet()的方式。 ### 方法一:使用...
- **keySet()**: 返回一个Set视图,包含Map中的所有键。可以遍历这个Set来获取键值对的键: ```java for (String key : map.keySet()) { Integer value = map.get(key); System.out.println(key + "=" + value)...
这种方法首先获取`Map`的所有键集合(`keySet`),然后通过迭代器或者增强型for循环(也称为foreach循环)遍历这些键,并使用`get()`方法获取与每个键相对应的值。 **示例代码:** ```java public static void main...
在Java编程中,遍历大容量的Map是一个常见的操作,特别是在处理大数据或内存优化的场景下,选择正确的遍历方式至关重要。以下是对标题和描述中提及的四种遍历Map方法的详细说明: 1. **通过Map.keySet遍历key和...
可以通过2种方法遍历HashMap <br>Map map... <br>for (Iterator iter = map.keySet().iterator(); iter.hasNext();) { <br> Object key = iter.next(); <br> Object val = map.get(key); <br>} <br>
首先,`keySet()`返回的是Map中所有键的`Set`集合,然后我们可以通过迭代这个键集,每次迭代获取一个键,再通过`Map.get(key)`获取对应的值。以下是示例代码: ```java Map, String> map = new HashMap(); // 填充...
`Map`集合的主要特点是每个元素都包含一个唯一的键(Key)以及与之对应的值(Value)。Java中的`Map`接口主要有三种实现类:`HashMap`、`Hashtable`、`TreeMap`等,这些实现类在实际应用中各有特点。本篇文章将详细...
1. **遍历键集合**:Map集合提供了keySet()方法,返回一个包含所有键的Set视图。可以通过迭代器或增强for循环遍历这个键集合,然后使用get()方法获取对应的值。例如: ```java Set<Object> keys = map.keySet(); for...
- `putAll(Map t)`:将一个Map的所有键值对复制到当前Map。 6. **Map的视图和迭代**: - `entrySet()`:返回Map中所有键值对的Set视图,可遍历键值对。 - `keySet()`:返回Map中所有键的Set视图,可遍历键。 - ...
此外,可以使用`putAll(map2)`方法将一个Map的所有键值对复制到另一个Map中,如`explicitMap = new TreeMap(); explicitMap.putAll(map)`。 比较Map是否相等,可以使用`==`运算符,它会检查两个Map的键值对是否完全...
Map 遍历是集合操作中的一种重要操作,一般来说,有三种方式来遍历 Map 集合:使用 values() 方法遍历、使用 keySet() 方法遍历和使用 entrySet() 方法遍历。 第一种方法:使用 values() 方法遍历 这个方法是最...
本文主要讲解了在Java中如何遍历Map集合,这是在日常编程中经常遇到的一个操作,特别是在需要处理键值对数据时。以下将详细介绍Map集合的遍历方法以及一些相关的知识点。 首先,Map是Java集合框架中的一个接口,它...
7. `keySet()`:返回一个Set集合,包含Map中的所有键。 8. `values()`:返回一个Collection集合,包含Map中的所有值。 9. `entrySet()`:返回一个Set集合,包含Map中的所有键值对。这是遍历Map最常用的方式,因为...
Map集合中的keySet方法是Java语言中一个非常重要的方法,它可以将Map集合中的所有key值存入到Set集合中,然后我们可以通过Set集合的迭代器方法获取到每一个key值,再通过key值获得相应的value值。 下面是一个使用...
for (Integer key : map.keySet()) { System.out.println("Key = " + key); } // 遍历 values for (Integer value : map.values()) { System.out.println("Value = " + value); } ``` 3. **使用 Iterator ...