Java中的集合类

来源:互联网 发布:admaster 数据分析招聘 编辑:程序博客网 时间:2024/03/29 06:04

一:集合框架中的接口

(1)Collection:集合层次中的根接口,JDK没有提供这个接口实现的直接类;

(2)Set:不能包含重复的元素。SortedSet是一个按照升序排列元素的Set;

(3)List:是一个有序的集合,可以包含重复的元素。提供了按索引访问方式;

(4)Map:包含了key-value对,Map不能包含重复的key,SortedMap是一个按照升序排列的key的Map。

二:集合框架中的实现类:

(1)Set:  HashSet和LinkedHashSet

(2)List: ArrayList和LinkedList;

(3)SortedSet: TreeSet

三:ArrayList:

(1)ArrayList,我们可以将其看成是能够自动增长容量的数组。

(2)利用ArrayList的toArray()返回一个数组。

(3)Arrays.asList()返回一个列表(List类型变量)。

(4)迭代器(Iterator)给我们提供了一种通用的方法来访问集合中的元素。

四:Collections类

(1)排序:Collections.sort()————自然排序;实现比较器(Comparator)接口;

(2)取最大和最小元素:Collections.max()和Collections.min();

(3)在已排序的List中搜索指定的元素:Collections.binarySearch()

五:LinkedList

(1)LinkedList是采用双向循环链实现的;

(2)用LinkedList实现栈(Stack),队列(queue),双向队列(doublie-endedqueue)相当方便。

六:ArrayList和LinkedList的比较

(1)ArrayList底层采用数组完成,而LinkedList则是以一般的双向链表完成,其内每个对象除了数据本身外还有两个引用,分别指向前一个元素和后一个元素;

(2)如果我们经常在List的开始处增加元素,或者在List中进行插入和删除操作,我们应该使用LinkedList,否则的话使用ArrayList将更加快速。如主要是随机访问集合中的元素,则最好是采用ArrayList类来完成,因它提供了一种按索引访问元素的机制。

七:HashSet(不能有重复的元素)

(1)实现Set接口的hash table(哈希表),依靠HashMap来实现的;

(2)我们应该为要存放到散列表的各个对象定义hashCode()和equals();

八:散列表

(1)散列表又称哈希表,散列表算法的基本思想是:以结点的关键字为自变量,通过一定的函数关系(散列函数)计算出对应的函数值,以这个值作为该结点存储在散列表中的地址;

(2)当散列表中的元素存放到新的散列表中,原先的散列表将被删除。在JAVA语言中,通过负载因子(load factor)来决定何时对散列表进行再散列。例如:如果负载因子是0.75,当散列表中已经有75%的位置已经放满时,那么将进行再散列。

(3)负载因子越高(越接近1.0),内存使用效率越高,元素的寻找时间越长。负载因子越低(越接近0),元素的寻找时间越短,内存的浪费越多。

(4)HashSet的缺省负载因子是0.75,一般采用默认值;

(5)HashSet存储自定义类对象时,需要重写hashCode()和equals()方法;

九:TreeSet

(1)TreeSet是依靠TreeMap来实现的;

(2)TreeSet是一个有序的集合,TreeSet中的元素将按照升序排序,缺省的是按照自然顺序进行排列,意味着TreeSet中元素实现Comparable接口;

(3)我们可以构造TreeSet对象时,传递实现了Comparator接口的比较器对象。

十:HashSet和TreeSet的比较

HashSet是基于Hash算法实现的,其性能通常都优于TreeSet,我们通常都应该使用HashSet,在我们需要排序的功能的时候才使用TreeSet。

十一:HashMap

(1)HashMap对key进行散列;

(2)keySet(), values(),  entrySet();通过键(key)计算出存储位置,把值放到这个位置上。

十二:TreeMap:按照key进行排序。

十三:HashMap和TreeMap的比较:和Set类似,HashMap的速度通常比TreeMap快,只有在需要排序的功能的时候才使用TreeMap.

(有待进一步完美.........)

原创粉丝点击