java 集合框架

0 概述

接口 Collection List Set  Map

List接口 实现类 ArrayList LinkedList

Set接口 实现类 HashSet LinkedHashSet SortedSet TreeSet

Map接口 实现类 HashMap LinkedHashMap SortedMap TreeMap Hashtable Properties

对象排序接口 Comparable Comparator

容器工具类 Collections

1. Set接口及实现类

往Set集合中存放对象时,它会自动调用对象的equals方法来比较是否与Set集合中的已有元素重复。Set 代表的是不包含重复元素的集合。
1.1 HashSet(散列集)
它的内部使用散列表(也叫哈希表)来保存元素,在存放对象时,首先会根据每个对象的哈希码值用固定的算法算法它的存储索引,然后把该对象存放到散列表的相应位置(表元)中。如果该散列表的相应位置还没有其他元素,就直接存入,如果该位置有元素了,就会将新对象跟该位置上原有的所有对象一一进行equals比较,以查看散列表该位置是否已经存放这个对象,还不存在就存放到当前位置其他元素的后面,如果已经存放,就无须再存放了,所以HashSet中不会包含重复的元素。

在使用HashSet类时,如果对象是自定义的,则需要重写equals()和hashCode()方法,才能确保,集合中的元素不同。

在使用时,输入与输出会不一致。

1.2 LinkedHashSet(链式散列集)
它的内部使用哈希表来保存元素,同时用链表记录元素的加入顺序,输入输出一致。

2 List 接口及实现类

 List接口,是一个有序的集合,会保存元素存入的顺序,允许有重复元素,在Collection提供的方法基础上添加了面向位置的元素操作方法。

2.1 ArrayList(数组列表)

采用可随需要而增长或减少的动态数组结构,使用索引来取出元素的效率是最高的,但是删除或插入的速度很慢。

2.2 LinkedList

采用双向链表结构来保存元素,每个节点,存放元素信息、下一个节点的引用和上一个节点的引用。针对频繁的插入或删除的操作效率很高,但不适合快速地随机访问某个位置的元素。

3 Map接口及实现类

Map(映射)用来存放 键/值 对,它根据关键字来找到与它对应的一个值,关键字不重复,关键字唯一标识存储的映射对。 

Map内部使用Set来存放映射对的 “键” , 所以存入Map中的 “键” 对应的类 必须重写 equals和hashCode方法。

3.1 HashMap

HashMap 是基于散列表, 内部的“键”采用Set进行散列存放,不保证映射对的存放顺序。

3.2 LinkedHashMap

LinkedHashMap 是HashMap的子类,它使用散列表存放 键/值对,同时又使用双向链表根据键来保存映射对的加入顺序。

4 遗留的集合类

Vector 

Stack push pop peek empty

Hashtable Properties(属性集,常用来读取程序的一些初始化配置参数信息) 。

5 排序集合

5.1 Comparable 接口
java.lang.Comparable 接口会强行对实现它的每个类的对象进行整体排序。 这个接口中申明了一个自然比较方法 , int compareTo(T o) ,该方法比较此对象与指定对象的顺序,如果该对象大于指定对象,就返回正整数,如果该对象小于指定对象,就返回负整数,如果该对象等于指定对象,就返回0。
要让自定义的类支持排序功能,就需要实现该接口,并在compareTo()方法中定义排序规则。
Java SE API 中的 8个基本数据类型包装类、String类、Data类、Calendar类都实现了Comparable接口。
5.2 TreeSet类(树集)
TreeSet是Set系列中用来支持元素自然排序的一个集合,不允许有重复,它的内部采用“红黑树”来存储排序后的元素,每当把一个元素加入树集时,该元素将被纳入树状结构相应的排序位置,当所有元素添加完毕时,所有元素也就按自然排序存放好了。
5.3 Comparator 接口
因为使用Comparable 接口,一个类只能定义一种自然排序规则,为了解决,需要在一个集合中按照学生得分升序排序,另一个集合按学生姓名自然排序,就需要采用Comparator接口。
具体的做法是,把一个实现了Compartor接口的类(这个类也叫排序器)的对象作为参数传递给该排序集合的构造方法,这个排序集合就会按照排序器指定的排序规则对元素进行排序存放。
java.lang.Comparator接口只有一个方法, int compare(T o1 , T o2) ,此方法用来比较排序的两个参数,根据第一个参数小于、等于、大于第二个参数,分别返回负整数、零或正整数。
5.4 TreeMap
TreeMaP具有排序功能的映射类。

6 集合工具类 Collections

提供一些针对集合的常用算法操作,包括求极值、排序、混排、查找等。

7 如何选择合适的集合类

7.1 从存放数据的要求方面考虑
如果数据存放对顺序没有要求,首先是HashSet;
如果数据存放对顺序有要求,首先  ArrayList ;
如果数据存放需要保存顺序,且需要频繁增删元素,选LinkedList ;
如果数据需要以“键-值”对存放,用HashMap;
如果数据需要按指定的自然顺序排序  , 用 TreeSet或 TreeMap 。
7.2 从数据的读写效率方面考虑
以Hash开头的集合类,元素的读取和修改的效率都最高。
以Array开头的集合类,元素的读取快但修改慢。
以Linked开头的集合类,元素的读取慢但修改快。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值