首先,数组和集合的区别:
- 数组是大小固定的
- 集合可以存储和操作数目不固定的一组数据,集合只能存放引用类型的的数据,不能存放基本数据类型
特性
List
- 允许重复
- 有序
- 继承自
Connection
Set
- 不允许重复
- 无序
- 继承自
Connection
Map
- 键值对
- 区别与
List
和Set
,既没有继承也没有实现Connection
场景
三者各自适用什么样的场景?
List
- 使用索引对元素进行访问
ArrayList
适合快速查找,LinkedList
适合增删元素 - 对有序有需求
Set
- 确保元素的唯一性
常用的Set
有:HashSet
、LinkedHashSet
和TreeSet
。其中,TreeSet
中的元素可以使用Comparator
或者Comparable
进行排序;LinkedHashSet
也按照元素的插入顺序对它们进行存储
Map
- 希望以键值对的形式存在
常用的Map
有:HashMap
、LinkedHashSet
和TreeMap
。其中HashMap
是无序的,LinkedHashSet
有序,TreeMap
可通过Comparator
或者Comparable
进行排序
另外HashTable
也可以实现键值对,并且相对于HashMap
是线程安全的,但是由于JAVA5以上ConcurrentHashMap
是线程安全的,但现在已经基本被HashMap
取代
怎么让HashMap同步?
- synchronizeMap
Map m = Collections.synchronizeMap(hashMap);
- JAVA5以上
ConcurrentHashMap
是HashTable
的替代 (即线程安全的)
网友评论