集合类的跟是接口Collection,然后集合分为三种:Set,List,Map
下面对这三种集合的特性以及常用的类进行说明:
1、首先介绍Set,作为Set首先最主要的区别与List的特性是它只允许每个值的一个实例,如果Set中存在一个值的实例时,再次添加的时候必然失败。也正是由于Set的这个特性Set集合中的元素的类必须定义equals方法。(有的同学可能会人为equals方法在Object中有定义,所以不用再定义,可是要注意的是Object中equals比较的只是地址。)
Set主要用到的一般有HashSet,ArraySet,TreeSet
HashSet中的元素的类必须定义HashCode方法,因为它是利用HashCode进行存储顺序的维持。
ArraySet中的元素是按顺序存储的,是针对比较小的集合使用的,随着集合的增大,性能会显著降低。(对于小型集合速度优于HashSet)
TreeSet中的元素也是有序的,非线程安全,若要使用线程安全一般使用Collections.synchronizedSortedSet
,进行包装。特性就是根据CompareTo进行的排序。
2、下面介绍Map,Map的key和Set一样必须定义equals方法,至于原因,我想只要是脑袋正常的人应该都可以想到。
HashMap是最常用的Map因为它是继承自Map,是一种轻量级的实现,所以在速度上是比较快的。
HashTable实现的是dictionary是一种重量级的实现,所以在速度上明显会比较慢。
ArrayMap跟ArraySet的特性很相似,这里就不再赘述。
TreeMap其实跟TreeSet的特性也很相似,但是要赘述一点是,这里有一个比较特殊的方法,只在这里存在,subMap,可以按照key的开始和终了值截取一部分视图。
LinkedHashMap 也是一种有序的HashMap和HashMap的最大区别就是HahMap中加入的元素是无序的。
3,下面介绍List,是一种最常用的顺序结构。
ArrayList:可以快速访问,如果不常改变,速度是最快的。
LinkedList:和上面那个的区别,只要学过数据结构的人应该都很容易能理解,不再赘述。
Vector:是一种大小可变化的数组而已。
下面介绍一下这些集合的访问:
无疑使用下标访问是最快的,其实在一般程序中,最常用的是iterator进行访问。在List中存在一种listIterator,可以向前也可以向后遍历。
总结:
其实在这些集合中因为进行了这样或者那样的封装,所以相比较数组来说,就比较慢了,可是数组比较固定,因为数组一旦申请下来空间之后就是不可变的。所以一般除非对性能有特殊的要求所以很少使用。