ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
使用并发集视图的可能考虑是:你可能不想要一个大的线程安全的映射,而是想用一个集。 <br/> 可以调用下面的几个方法创建不同特性的集。 <br/> **1. newKeySet** 对 Set 的任何更改,均不影响 ConcurrentHashMap。 ```java @Test public void newKeySetTest() { Set<String> words = ConcurrentHashMap.<String>newKeySet(); words.add("张三"); words.add("李四"); for (String word : words) { System.out.println(word); } } ``` **2.`keySet()`** keySet(),其实就是 ConcurrentHashMap 中 key 集合。 由该方法得到的Set只能删除元素,不能添加元素。在Set中删除了键,则ConcurrentHashMap 中的键/值一同被删除。 ```java @Test public void keySetTest1() { ConcurrentHashMap<String, String> map = new ConcurrentHashMap<>(1); map.put("1", "张三"); map.put("2", "李四"); map.forEach((k, v) -> System.out.println("k: " + k + ", v: " + v)); //k: 1, v: 张三 //k: 2, v: 李四 Set<String> set = map.keySet(); //set.add("王五"); 不支持添加,否则运行时抛出异常。 set.remove("1"); set.forEach(k -> System.out.println(k)); //2 map.forEach((k, v) -> System.out.println("k: " + k + ", v: " + v)); //k: 2, v: 李四 } ``` **3. `keySet(V mappedValue)`** 该方法可以添加,删除元素,在Set中添加 ,或删除了键,则 ConcurrentHashMap 中的键/值一同被增加,或删除。 ```java @Test public void keySetTest2() { ConcurrentHashMap<String, String> map = new ConcurrentHashMap<>(1); map.put("1", "张三"); map.put("2", "李四"); map.forEach((k, v) -> System.out.println("k: " + k + ", v: " + v)); //k: 1, v: 张三 //k: 2, v: 李四 Set<String> set = map.keySet("王五"); set.add("3"); set.forEach(k -> System.out.println(k)); //1 //2 //3 map.forEach((k, v) -> System.out.println("k: " + k + ", v: " + v)); //k: 1, v: 张三 //k: 2, v: 李四 //k: 3, v: 王五 set.remove("1"); set.forEach(k -> System.out.println(k)); //2 //3 map.forEach((k, v) -> System.out.println("k: " + k + ", v: " + v)); //k: 2, v: 李四 //k: 3, v: 王五 } ```