一、集合类简介
集合类的由来:
对象用于封装特有数据,对象多了需要存储,如果对象的个数不确定。
就使用集合容器进行存储
集合特点:
1.用于存储对象的容器
2.集合的长度可变
3.集合中不可以存储基本数据类型
集合与数组的区别:
集合是可变长度的,而数组时不可变的
二、Java提供的集合类的基本架构
常用的就这两个接口,当然类可不止这些。
|--Collection接口(单列集合)
|--List接口
|--ArrayList
|--LinkedList
|--Set接口
|--HashSet
|--LinkedHashSet
|--TreeSet
|--Map接口(双列集合)
|--HashMap
|--LinkedHashMap
|--TreeMap
|--Hashtable
|--Properties
三、Collection接口
集合层次结构 中的根接口。Collection 表示一组对象,这些对象也称为 collection 的元素。一些
collection 允许有重复的元素,而另一些则不允许。一些 collection 是有序的,而另一些则是无序的。
JDK 不提供此接口的任何直接 实现:它提供更具体的子接口(如 Set 和 List)实现。此接口通常用来传递
collection,并在需要最大普遍性的地方操作这些 collection。
Collection接口的常用方法:
1.添加。
boolean add(Object obj);
boolean addAll(Collection coll);
2.删除。
boolean remove(Object obj);
boolean removeAll(Collection coll);
void clear();
3.判断:
boolean contains(Object obj);
boolean containsAll(Collection coll);
boolean isEmpty();判断集合中是否有元素。底层是size()。
4.获取:
int size();
Iterator iterator();取出元素的方式:迭代器
5.其它:
boolean retainAll(Collection coll);取交集。
Object[] toArray()将集合转成数组。
四、List接口
他是Collection接口的子接口,它的最大特点是具有角标,因此该集合数据的插入是有序的,
并且可以根据角标精确控制数据的位置。下面是它的实现类的比较:
|--Vector:内部是数组数据结构,是同步的,几乎不用了。 jdk1.0出现的 两倍延长(增删查询都很慢)
|--ArrayList:内部是数组数据结构,是不同步的。替代了Vector。 1.5倍延长(增删速度比较慢,查
找速度很快)
|--LinkedList:内部是链表数据结构,是不同步的。(增删快,查找慢)LinkedList也是有角标的,因为
他是List接口的子类,List最大的特点就是有角标
五、set接口
也是Collection集合的子接口,它不具有角标,数据也是无序的,并且元素不允许重复。下面是他的实现
类:
|--HashSet:内部数据结构是哈希表,是不同步的。
确定元素是否相同:
(1):判断两个元素的哈希值是否相同。如果相同,再判断两个对象的内容是否相同
注:判断哈希值相同,其实判断的是对象的hashcode()的方法。判断内容相同,用的是equals方法
注意:如果哈希值不同,是不需要判断equals的
哈希冲突:哈希值相同,内容不同。哈希会进行顺延存储或者重新算一个位置进行存储
|--TreeSet:
它的底层是二叉树,使用元素的自然顺序进行排序,是不同步的
存自定义对象时必须实现Comparable接口
判断元素的唯一性方式:就是根据返回值来判断,如果返回为0就视为元素相同
TreeSet对元素进行排序的方式一:
让元素自身具备比较功能,就需要实现Comparable接口。覆盖comparaTo方法
TreeSet集合的排序方式二:
让集合自身具备比较功能,使用比较器,定义一个类实现Comparator接口,覆盖compare方法,将该类对象作为参数
传递给TreeSet集合的构造函数
|--LinkedHashSet:有序且不重复。是HashSet的扩展
六、Map接口
一次添加一对元素。Collection一次添加一个元素,Map也称为双列集合。Collection也称为单列集合
其实Map集合中存储的就是键值对,Map集合中必须保证键的唯一性。下面是他的实现类:
|--Hashtable:内部结构是哈希表,是同步的。不允许null作为键作为值
|--Properties:一般用于存储配置文件的键和值。十分常用
|--HashMap:内部结构是哈希表,不是同步的。允许null作为键作为值
|--LinkedHashMap:内部结构为链表加哈希表,有序,怎么存进去怎么取出来
|--TreeMap:内部结构是二叉树,不是同步的。可以对Map集合中的键进行排序