集合
1.Set:无序、不可重复的集合
2.List:有序、重复的集合
3.Map:具有映射关系的集合
(对象的引用)“丢进”容器中
JDK1.5后,增加了泛型,可以记住容器中对 象的数据类型
数组和集合
使用数组可以将一组元素作为一个整体来处理
长度固定,无法动态扩展
有序线性结构,数据结构单一
集合的优势:
提供丰富的API,开发效率高
Collection接口是Set、List和Queue接口的父接口,所有该接口里定义的方法是Set、List和Queue集合共用的方法
Iterator特性
ØList接口还额外提供了一个listIterator()方法,该方法返回一个ListIterator对象,ListIterator接口继承了Iterator接口,提供了专门操作List的方法。
1.ListIterator增加了向前迭代的功能(Iterator只能向后迭代)
2.ListIterator还可通过add方向List集合中添加元素(Iterator只能删除元素)
Arraylist
底层用数组实现
查询效率高,增删效率低,线程不安全
LinkedList
底层用双向循环链表实现
查询效率低,增删效率高
LinkedList的常用特有方法:
addFirst() addLast()
getFirst() getLast()
removeFirst() removeLast()
如果集合中没有元素,这些方法
在调用时会抛出运行时异常
NoSuchElementException
JDK1.6中给出了代替方案:
peekFirst、peekLast获取元素,不删除元素
pollFirst、pollLast获取元素,删除元素
没有元素时返回null
Vector
底层用数组实现List接口的另一个类
特点:重量级,占据更多的系统开销,线程安全
ArrayList、LinkedList、Vector之间的区别?
Arraylist
底层用数组实现
查询效率高,增删效率低,线程不安全
LinkedList
底层用双向循环链表实现
查询效率低,增删效率高
Vector
底层用数组实现List接口的另一个类
特点:重量级,占据更多的系统开销,线程安全
HashSet 是最常用的Set 实现类
每次存储对象的时候, 调用对象的hashCode()方法, 计算一个哈希值.在集合中查找是否包含哈希值相同的元素.如果没有哈希值相同元素, 直接存入.如果有哈希值相同的元素, 逐个使用equals()方法比较比较结果全为false就存入.如果比较结果有true则不存.TreeSet集合中的元素除了没有顺序和不能重复外,还会自然排序,这便是该集合的特点
TreeSet存储对象的时候, 可以排序,但是需要实现Comparable接口。
所以,Integer能排序,String能排序。
如果想把自定义类的对象存入TreeSet进行排序, 那么必须实现Comparable接口,重写compareTo()方法。
在方法内定义比较算法, 根据大小关系, 返回正数/负数/零,
在使用TreeSet存储对象的时候,add()方法内部就会自动调用compareTo()方法进行比较, 根据比较结果使用二叉树形式进行存储。
Comparable
此接口强行对实现它的每个类的对象进行整体排序,这种排序被称为类的自然排序,类的compareTo 方法被称为它的自然比较方法
int compareTo(T o)
比较此对象与指定对象的顺序。如果该对象小于、等于或大于指定对象,则分别返回负整数、零或正整数