Java集合学习总结
首先,区分最顶层接口的区别:Collection和Map的区别:前者是单个元素;后者存储的是一对元素。Collection有List和Set两个子接口,两个子接口下分别有Vector和ArrayList以及HashSet和TreeSet等实现类;Map有HashMap、TreeMap、HashTable三种实现类。现分别总结它们的区别。
List、Map、Set存储元素时的特点
首先,List和Set具有相似性,它们都是单列元素集合,所以都有一个公共的父接口(Collection),Set里面不允许有重复元素,重复与否用equals()方法判断;Set取元素时,没法说取第几个,只能以Iterator接口取得所有元素在进行遍历。
List表示有先后顺序的集合,当我们每次调用add()方法时要按先后顺序排序,当然也可以指定当前对象在集合中的存放位置(调用add(int index,Obj e));一个对象可以反复存储进List中。
Map与List和Set不同,它是双列集合,其中有put方法,每次存储时要存储一对key/value,不能存储重复的key,取则根据key获得相应的value。
ArrayList和Vector的区别
这两个类都实现了List接口,它们都是有序集合,即存储这两个集合中的元素位置都是有顺序的,相当于动态数组,可以按位置索引取出某个元素并且其中的数据是重复的。
区别主要包括两个方面:
a.同步性:Vector是线性安全的,也就是说它的方法之间是线程同步的,而ArrayList是线程不安全的。所以当只有一个线程会访问到集合时最好使用ArrayList,它不考虑线程安全效率会高些;反之亦然。
b.数据增长:ArrayList与Vector都是有一个初始的容量大小,当存储进它们里面的元素的个数超出容量时就需要加存储空间,Vector默认增长为原来的两倍,而ArrayList没有明确规定。
HashSet和TreeSet的区别
HashSet中元素是无序的,元素不可重复,可以有null值;TeeSet元素以一定的顺序排列,但是不能保证是和元素add进去的顺序一样,同时,TreeSet不可重复,不可有null值。
HashMap和HashTable以及TreeMap的区别
首先,三者均是实现Map接口的实现类,所以,在存储数据方面均是以一组数据的形式储存,每个数据包含Key和Value值。首先,要明确的是,在Map下面的实现类都是通过key值来映射对应的value值的,所以Key值都是唯一的。三者的主要区别主要表现在能否加null值,是否支持数据同步,值得储存是否有序。
在HashMap中,key和value都可以是null,value值允许重复,不支持数据同步,即允许多线程操作数据
在HashTable中,key和value均不能是null值,同时HashTable支持数据同步,线性安全。
TreeMap插入的元素是有序的,key值不允许为空,value允许为空值
原文地址:https://www.cnblogs.com/cs2024/p/10012643.html