Java容器:
Collection
├List 接口
│├LinkedList 链表
│├ArrayList 顺序结构动态数组类
│└Vector 向量
│ └Stack 栈
└Set
Map
├Hashtable
├HashMap
└WeakHashMap
首先介绍Collection接口:
Collection是最基本的集合接口,一个Collection代表一组Object,即Collection的元素(Elements)。
Java SDK不提供直接继承自Collection的类,Java SDK提供的类都是继承自Collection的“子接口”如List和Set。
所有实现Collection接口的类都必须提供两个标准的构造函数:无参数的构造函数用于创建一个空的Collection,有一个Collection参数的构造函数用于创建一个新的Collection,这个新的Collection与传入的Collection有相同的元素。后一个构造函数允许用户复制一个Collection。
List是有序的Collection,使用此接口能够精确的控制每个元素插入的位置。用户能够使用索引(元素在List中的位置,类似于数组下标)来访问List中的元素,这类似于Java的数组。
对应list的用法分为:
对数据进行操作(增,删,改,查);对数据存储后遍历,显示,这两大类应用。
数据定位:
1.List接口提供了两种搜索指定对象的方法。从性能的观点来看,应该小心使用这些方法。
2.为了提高效率,通常我们对list中元素排好序,进行折半查找,通过获取子列表缩小查找范围,,子列表的获取。实现时注意列表中存在重复元素,对获取边界值的影响。
对于元素对象需要重写equals(Object o)和hashCode()方法 实现自定义的对象相等,在比较元素相等时,我们应先判断元素的hashCode值是否相等。对于判断列表是否相等(元素的值和元素的顺序),也可以使用列表的hashCode方法来提高判读的效率。
利用Collections也可以实现对list元素进行排序及其查找,列表中的所有元素都必须实现Comparable接口 。
3.对于支持范型的jdk版本来说:
toArray(T[] a)
返回按适当顺序(从第一个元素到最后一个元素)包含列表中所有元素的数组;返回数组的运行时类型是指定数组的运行时类型。
indexOf(Object o)
返回此列表中第一次出现的指定元素的索引;如果此列表不包含该元素,则返回 -1。
lastIndexOf(Object o)
返回此列表中最后出现的指定元素的索引;如果列表不包含此元素,则返回 -1。
get(int index)
返回列表中指定位置的元素。
List
subList(int fromIndex, int toIndex)
返回列表中指定的 fromIndex(包括 )和 toIndex(不包括)之间的部分视图。
inthashCode()
返回列表的哈希码值。列表的哈希码定义为以下计算的结果:
int hashCode = 1;
Iterator
while (i.hasNext()) {
E obj = i.next();
hashCode = 31*hashCode + (obj==null 0 : obj.hashCode());
}
这确保了 list1.equals(list2)意味着对于任何两个列表 list1 和 list2 而言,可实现 list1.hashCode()==list2.hashCode(),正如 Object.hashCode() 的常规协定所要求的。
增:
boolean
add(E e)
向列表的尾部添加指定的元素(可选操作)。
void
add(int index,E element)
在列表的指定位置插入指定元素(可选操作)。
删:删除单个,一组,全部元素。
E
remove(int index)
移除列表中指定位置的元素(可选操作)。
boolean
remove(Object o)
从此列表中移除第一次出现的指定元素(如果存在)(可选操作)。
boolean
removeAll(Collection< > c)
从列表中移除指定 collection中包含的其所有元素(可选操作)。
boolean
retainAll(Collection< > c)
仅在列表中保留指定 collection中所包含的元素(可选操作)。
void
clear()
从列表中移除所有元素(可选操作)。
改:
E
set(int index,E element)
用指定元素替换列表中指定位置的元素(可选操作)。
遍历:
iterator()和ListIterator的差别?
Iterator
iterator()
返回按适当顺序在列表的元素上进行迭代的迭代器。
ListIterator
listIterator()
返回此列表元素的列表迭代器(按适当顺序)。
ListIterator
listIterator(int index)
返回列表中元素的列表迭代器(按适当顺序),从列表的指定位置开始。
Object[]
toArray()
返回按适当顺序包含列表中的所有元素的数组(从第一个元素到最后一个元素)。
toArray(T[] a)
返回按适当顺序(从第一个元素到最后一个元素)包含列表中所有元素的数组;返回数组的运行时类型是指定数组的运行时类型。
针对list接口的实现类:LinkedList ,ArrayList,Vector,Stack各自都增加了那些方法,实际使用时如何选择?
首先来看List接口的链接列表实现LinkedList:
所有已实现的接口:
Serializable,Cloneable, Iterable
实现所有可选的列表操作,并且允许所有元素(包括null)。除了实现 List接口外,LinkedList 类还为在列表的开头及结尾 get、remove和 insert 元素提供了统一的命名方法。这些操作允许将链接列表用作堆栈、队列或双端队列。
此类实现 Deque接口,为 add、poll提供先进先出队列操作,以及其他堆栈和双端队列操作。
再来看List接口的数组列表实现 ArrayList:
所有已实现的接口:
Serializable,Cloneable, Iterable
List接口的大小可变数组的实现。实现了所有可选列表操作,并允许包括 null在内的所有元素。除了实现 List 接口外,此类还提供一