集合框架被设计成要满足以下几个目标。
-
该框架必须是高性能的。基本集合(动态数组,链表,树,哈希表)的实现也必须是高效的。
-
该框架允许不同类型的集合,以类似的方式工作,具有高度的互操作性。
-
对一个集合的扩展和适应必须是简单的。
1 Collection
【1】Collection是java集合框架(collection-frame)中的顶层接口。
【2】Collection接口表示一个容器,容器中只能存储引用数据类型,建议存同一类型的引用类型,方便后续遍历等操作。
【3】List接口中容器中的元素可以是有序的、可重复的,称为。
Set接口中也可能是无序的、唯一的。
特点:
1 集合常用方法
增(add addAll) 删(clear remove removeAll retainAll) 改:() 查:(contains containsAll isEmpty size)
2 集合的遍历
Iterable 可遍历的接口,集合接口继承于它,集合支持快速遍历
Collection继承Iterable接口,表示集合支持快速遍历
// 快速遍历 // for-each // Object 表示元素类型 // item表示迭代变量 // c1表示集合 for (Object item : c1) { System.out.println(item.toString());
Iterator接口类型,iterator()内部返回一个实现类实现类Iterator接口。这个实现类一定具有hasNext和next方法用于判断是否有下一个元素和获取下一个元素。快速遍历就是基于迭代器工作的。
// 迭代器遍历(国内) Iterator it = c1.iterator(); while(it.hasNext()) { Object item = it.next(); System.out.println(item.toString()); } // 国外 for(Iterator it2=c1.iterator();it2.hasNext();) { Object item = it2.next(); System.out.println(item.toString()); }
3 List接口
特点:List 接口中的元素时有序的、可重复的。
List基本常用方法
增: add() addAll() add(index,el) addAll(index,collection)
删: clear() remove() removeAll() remove(index)
改: set(index,el)
查 get(index) indexOf() lastIndexOf()
List接口遍历
ListIterator 继承于Iterator,在Iterator的基础上提供了以正向遍历集合,也可以以逆序遍历集合。
hasNext() next ()以正向遍历
hasPrevious() previous ()以逆序遍历
// 正向遍历 ListIterator it2 = list1.listIterator(); while(it2.hasNext()) { System.out.println(it2.next()); } // 逆序遍历 while(it2.hasPrevious()) { System.out.println(it2.previous());
List接口实现类
ArrayList
【1】是List接口的实现类,底层数据结构是数组,实现大小可变的数组
【2】线程不安全,jdk1.2
【3】默认数组大小是10。自动拓容,拓容原则:newCapacity = oldCapacity + oldCapacity / 2
【4】如果确定序列的元素不在增加,通过调用trimToSize()调制容量至合适的空间
Vector
【1】是List接口的实现类,底层数据结构也是数组,也是大小可变的数组。
【2】是线程安全的,jdk1.0
【3】默认数组大小是10。自动拓容,拓容原则:newCapacity = oldCapacity +capacityIncrement(增长因子)
【4】通过调用trimToSize()调制容量至合适的空间
注意:Vector 在实现List接口的同时,同添加了自身特有的方法xxxElement,未来使用时为了程序的可拓展性
LinkedList
【1】是List接口的实现类,底层数据结构是链表。
【2】线程不安全。
【3】push入栈操作 / pop出栈操作
【4】队列(Queue)接口add 入栈操作 remove出栈操作 element() 获取表头元素 可能会出现NoSuchElementException异常
【5】队列(Queue)接口offer入栈操作poll出栈操作peek()获取表头元素 可能会返回特殊值(null)
【6】双向队列(Deque)接口