集合之间的关系如下图:
1、整个Set没有提供获取元素的方法,也没有提供修改集合元素的功能,想要获取集合中的元素,可以先把集合转换成表/数组。(注:与列表一样,不能在遍历时删除集合元素,但可以使用迭代器删
2、HashMap的底层是数据结构,即哈希表的Map接口,以键值的形式存在。
以HashSet为例,用增强for循环和Iterator遍历。
Set<String> set = new HashSet<>(); set.add("zhangsan"); set.add("lisi"); set.add("wangwu"); System.out.println("Set集合:"+set); for(String s:set){ System.out.println("增强for循环:"+s); } java.util.Iterator<String> iterator = set.iterator(); while (iterator.hasNext()){ String str = iterator.next(); System.out.println("Iterator遍历:"+str); }
3、HashTable基于哈希表的Map接口实现,底层使用数组实现,数组中的每一项均是一个单链表,即数组和链表的结合体。(注:不允许使用Null值和Null键)
4、CurrentHashMap
①能够多个修改操作并发进行,关键在于使用锁分离技术。
②使用多个锁控制hash表不同段进行修改,每个小段就是一个小的hashtable,均有自己的锁。只要发生在不同的段上就可以并发进行。
③底层将key-value作为一个整体处理。
④HashMap与ConcurrentHashMap不同的是ConcurrentHashMap使用多个子Hash表,也就是段(Segment)。
⑤ConcurrentHashMap完全允许多个读操作并发进行,读操作并不需要加锁。如果使用传统的技术,如HashMap中的实现,如果允许可以在hash链的中间添加或删除元素,读操作不加锁将得到不一致的数据。