- 数组存储的数据是有序的、可以重复的。 存储数据的特点单一;
当然,上述有些特点也可以被当作优点,然而在实际操作中,由于数组的不够灵活,所以我们需要其它的方式来存储数据,Java 集合类就这样应运而生了。
Java 集合类中有可以用于存储数量不确定的多个对象的集合(Collection 接口),还有可用于保存具有映射关系的关联数组的集合(Map 接口)。
-
Collection 接口:单列数据,用于存储数量不确定的多个对象 ;
-
List接口:元素有序、可重复的集合(对应“动态”数组),即集合中的每个元素都有其对应的顺序索引,可以根据序号存取容器中的元素。
-
ArrayList 实现类:作为 List 接口的主要实现类,它是线程不安全的,但效率高;适⽤于频繁的查找⼯作。
-
LinkedList 实现类:使用 LinkedList 实现类对于频繁的插入、删除操作的效率比 ArrayList 高;
-
Vector 实现类:作为 List 接口的古老实现类,它是线程安全的,但效率低;
-
Set 接口:元素无序、不可重复的集合(对应高中讲的“集合”)
-
HashSet 实现类:作为 Set 接口的主要实现类,是线程不安全的;可以存储 null 值。
-
LinkedHashSet 实现类:是 HashSet 的子类。遍历其内部数据时,可以按照添加的顺序遍历,使其看起来是有序的。
-
TreeSet 实现类:底层使⽤红⿊树,TreeSet可以确保集合元素处于排序状态;排序方法分为自然排序和定制排序,自然排序指的是根据自然规律排序,比如数字的话就按照从小到大排序,定制排序指的是根据自己既定的规则进行排序。
-
Map 接口:双列数据,保存具有映射关系 “key-value对” 的集合
-
HashMap 实现类:作为Map的主要实现类,它是线程不安全的,但效率高。可以存储 null 值的 key 和 value。
-
LinkedHashMap 实现类:保证在遍历 map 元素时,可以按照添加的顺序实现遍历。
-
ConcurrentHashMap 实现类:线程安全的 Map;
-
TreeMap 实现类:底层使用红黑树,保证按照添加的 key-value 对进行排序,实现排序遍历。
-
Hashtable 实现类:古老的实现类,它是线程安全的,但效率低;不能存储 null 的 key 和 value。
-
Properties 实现类:常用来处理配置文件,key 和 value 都是 String 类型。
Java中的 List、Set、Map 之类的集合容器中只能存放引用类型,而不能存放类似于 int、double 之类的基本类型。
参考文献:【传送门】
===========================================================================
如果我们需要根据键值获取元素值就选用 Map 接口下的集合,当需要排序时就选择 TreeMap,不需要排序时就选择 HashMap,需要保证线程安全就选用 ConcurrentHashMap;
如果我们只需要存放元素时,就选择实现 Collection 接口的集合,此时如果需要保证元素唯一就选择实现 Set 接口的集合,如 TreeSet 或者 Has