JAVA容器
一、容器体系结构
java.util
二、迭代器Iterator
迭代器是一种设计模式,可以遍历并选择序列中的对象,而开发人员并不需要了解该序列的底层结构。迭代器通常被称为”轻量级”对象,因为创建它的代价小。
JAVA的Iterator功能比较简单,并且只能单向移动。
相对Iterator而言,for()循环遍历的速度较快点。而Iterator则比较通用,且序列的内部状态都由Iterator维护。
函数
功能
hasNext()
检查序列下一个元素是否存在。
next()
获取序列下一个元素。
remove()
将迭代器新返回的元素删除。
实例:
publicclassArrayToList {
staticvoidprintList(List list){
for(String e : list)
System.out.print(""+ e);
System.out.println();
}
publicstaticvoidmain(String[] args) {
String[] strs = {"xue","ma","xiong","feng", };
//方法一
List strList = Arrays.asList(strs);
ArrayToList.printList(strList);
//方法二
List strList1 =newArrayList(strs.length);
for(String e : strs)
strList1.add(e);
ArrayToList.printList(strList1);
//方法三
List strList2 =newArrayList();
Collections.addAll(strList2, strs);
ArrayToList.printList(strList2);
}
}
运行结果:
元素:xue
数组:[ma, xiong, feng]
元素:ma
数组:[xiong, feng]
元素:xiong
数组:[feng]
元素:feng
数组:[]
三、类集Collection
与C++STL类似。Collection所有容器类都必须实现的接口。
所有通用的Collection实现类都应该提供两个“标准”构造方法:一个是void(无参)构造方法,用于创建空的Collection;另一个是带有Collection类型单参数的构造方法,用于创建一个具有与参数相同元素的新的collection。
函数
参数
功能
add
(E e)
确保此collection包含指定的元素(末尾)。
addAll
(Collection extends E> c)
将指定collection中的所有元素都添加到此collection中(末尾)。
clear
移除此collection中的所有元素(可选操作)。
contains
(Object o)
如果此collection包含指定的元素,则返回true。
containsAll
(Collection> c)
如果此collection包含指定collection中的所有元素,则返回true。
equals
(Object o)
比较此collection与指定对象是否相等。
hashCode
返回此collection的哈希码值。
isEmpty
如果此collection不包含元素,则返回true。
iterator
返回在此collection的元素上进行迭代的迭代器。
remove
(Object o)
从此collection中移除指定元素的单个实例,如果存在的话(可选操作)。
removeAll
(Collection> c)
移除此collection中那些也包含在指定collection中的所有元素(可选操作)。
retainAll
(Collection> c)
仅保留此collection中那些也包含在指定collection的元素(可选操作)。
size
(Collection> c)
返回此collection中的元素数。
toArray
返回包含此collection中所有元素的数组。
toArray
(T[] a)
返回包含此collection中所有元素的数组;返回数组的运行时类型与指定数组的运行时类型相同。
应用实例:
publicclassTestCollection {
publicstaticvoidmain(String[] args) {
Collectioncollection =newArrayList();
Collectioncollection1 =newArrayList();
//向容器中加入对象
collection.add("Hello");
collection1.add("Hello");
collection.add(newInteger(1));
//collection1.add(new Integer(1));
Object obj =newObject();
collection.add(obj);
//collection1.add(obj);
//size返回collection中的元素数
System.out.println("容器的长度:"+collection.size());
System.out.println("容器:"+collection.toString());
System.out.println("容器1:"+collection1.toString());
//转换为数组
Object[] object= collection.toArray();
//未进行类型转换
System.out.println("第一个元素是:"+object[0]);
//移除容器中制定的对象
collection.remove(obj);
System.out.println("容器:"+collection.toString());
//清空容器中的对象
collection.clear();
System.out.println("容器的长度:"+collection.size());
System.out.println("容器:"+collection.toString());
}
}
运行结果:
容器的长度:3
容器:[Hello, 1, java.lang.Object@2de41d]
容器1:[Hello]
第一个元素是:Hello
容器:[Hello, 1]
容器的长度:0
容器:[]
注:在本例中也体系了泛型的好处。第一个容器没有使用泛型,可以向其添加不同类型的数据。第二个容器使用了泛型,只能向其添加String类型数据。
四、序列List
是有序的Collection。程序员可以对列表中每个元素的插入位置进行精确地控制,也可以根据元素的整数索引访问元素,并搜索列表中的元素。
列表允许存在重复的元素。List提供了4种对列表元素进行定位(索引)访问方法。List接口提供了特殊的迭代器,称为ListIterator,除了允许Iterator接口提供的正常操作外,该迭代器还允许元素插入和替换,以及双向访问。还提供了一个方法来获取从列表中指定位置开始的列表迭代器。
List除了继承Collection的方法外,扩展了如下方法:
函数
参数
功能
add
(int index, E element)
在列表的指定位置插入指定元素
addAll
(int index, Collection extends E> c)
将指定collection中的所有元素都插入到列表中的指定位置
get
(int index)
返回列表中指定位置的元素。
indexOf
(Object o)
返回此列表中第一次出现的指定元素的索引;如果此列表不包含该元素,则返回-1。
boolean isEmpty()
lastIndexOf
(Object o)
返回此列表中最后出现的指定元素的索引;如果列表不包含此元素,则返回-1。
listIterator
返回此列表元素的列表迭代器(按适当顺序)。
listIterator
(int index)
返回列表中元素的列表迭代器(按适当顺序),从列表的指定位置开始。
remove
(int index)
移除列表中指定位置的元素
set
(int index, E element)
用指定元素替换列表中指定位置的元素
subList
(int fromIndex, int toIndex)
返回列表中指定的fromIndex(包括)和toIndex(不包括)之间的部分视图
五、动态数组ArrayList
ArrayList是Array的复杂版本。提供:动态地增加和减少数组的元素;灵活设置数组的大小。
每个ArrayList实例都有一个容量。该容量是指用来存储列表元素的数组的大小。它总是至少等于列表的大小。随着向ArrayList中不断添加元素,其容量也自动增长。
在添加大量元素前,应用程序可以使用ensureCapacity操作来增加ArrayList实例的容量。这可以减少递增式再分配的数量。
ArrayList继承了List的方法外,其扩展了如下方法:
函数
参数
功能
ArrayList
构造一个初始容量为10的空列表。
ArrayList
(Collection extends E> c)
构造一个包含指定collection的元素的列表,这些元素是按照该collection的迭代器返回它们的顺序排列的。
ArrayList
(int initialCapacity
构造一个具有指定初始容量的空列表。
clone
返回此ArrayList实例的浅表副本。
ensureCapacity
(int minCapacity)
如有必要,增加此ArrayList实例的容量,以确保它至少能够容纳最小容量参数所指定的元素数。
removeRange
(int fromIndex,
int toIndex)
移除列表中索引在fromIndex(包括)和toIndex(不包括)之间的所有元素。
trimTosize
将此ArrayList实例的容量调整为列表的当前大小。
六、链表LinkedList
LinkedList是一种双向的链式结构。相对ArrayList而言,LinkedList的插入和删除元素相对方便,但速度较慢。
除了实现List接口外,LinkedList类还为在列表的开头及结尾get、remove和insert元素提供了统一的命名方法。这些操作允许将链接列表用作堆栈、队列或双端队列。
LinkedList继承了List的方法外,其扩展了如下方法:
函数
方法
功能
LinkedList
构造一个空列表。
LinkedList
(Collection extends E> c)
构造一个包含指定collection中的元素的列表,这些元素按其collection的迭代器返回的顺序排列。
addFirst
(E e)
将指定元素插入此列表的开头。
addLast
(E e)
将指定元素插入此列表的结尾。
clone
返回此LinkedList的浅表副本。
descendingIterator
返回以逆向顺序在此双端队列的元素上进行迭代的迭代器。
element
获取但不移除此列表的头(第一个元素)。
getFirst
返回此列表的第一个元素。
getLast
返回此列表的最后一个元素。
lastIndexOf
返回此列表中最后出现的指定元素的索引,如果此列表中不包含该元素,则返回-1。
listIterator
(int index)
返回此列表中的元素的列表迭代器(按适当顺序),从列表中指定位置开始。
offer
(E e)
将指定元素添加到此列表的末尾
offerFirst
(E e)
在此列表的开头插入指定的元素。
offerLast
(E e)
在此列表末尾插入指定的元素。
peek
获取但不移除此列表的头
peekFirst
获取但不移除此列表的第一个元素;如果此列表为空,则返回null。
peekLast
获取但不移除此列表的最后一个元素;如果此列表为空,则返回null。
poll
获取并移除此列表的头(第一个元素)
pollFirst
获取并移除此列表的第一个元素;如果此列表为空,则返回null。
pollLast
获取并移除此列表的最后一个元素;如果此列表为空,则返回null。
pop
将元素推入此列表所表示的堆栈。
push
(E e)
将元素推入此列表所表示的堆栈。
removeFirst
移除并返回此列表的第一个元素。
removeFirstOccurrence
(Object o)
从此列表中移除最后一次出现的指定元素(从头部到尾部遍历列表时)。
七、集合Set
Set和数学中的集合是同一个概念,就是没有重复元素的集合,是一个不包含重复元素的collection。更确切地讲,set不包含满足e1.equals(e2)的元素对e1和e2,并且最多包含一个null元素。
Set继承Collection的所有方法,没有扩展了其他方法。
八、映射Map
Map接口提供三种collection视图,允许以键集、值集或键-值映射关系集的形式查看某个映射的内容。
所有通用的映射实现类应该提供两个“标准的”构造方法:一个void(无参数)构造方法,用于创建空映射;一个是带有单个Map类型参数的构造方法,用于创建一个与其参数具有相同键-值映射关系的新映射。实际上,后一个构造方法允许用户复制任意映射,生成所需类的一个等价映射。
Map继承Collection的所有方法,并扩展了其他方法:
函数
参数
功能
containsKey
(Object key)
如果此映射包含指定键的映射关系,则返回true。
containsValue
(Object key)
如果此映射将一个或多个键映射到指定值,则返回true。
entrySet
返回此映射中包含的映射关系的Set视图。
keySet
返回此映射中包含的键的Set视图。
put
(K key, V value)
将指定的值与此映射中的指定键关联。
putAll
(Map extends K,? extends V> m)
从指定映射中将所有映射关系复制到此映射中.
values
返回此映射中包含的值的Collection视图。
九、队列Queue
Queue实现通常不允许插入null元素,尽管某些实现(如LinkedList)并不禁止插入null。即使在允许null的实现中,也不应该将null插入到Queue中,因为null也用作poll方法的一个特殊返回值,表明队列不包含元素。
Queue继承Collection的所有方法,并扩展了其他方法:
函数
参数
方法
element
获取,但是不移除此队列的头。
offer
(E e)
将指定的元素插入此队列(如果立即可行且不会违反容量限制),当使用有容量限制的队列时,此方法通常要优于add(E),后者可能无法插入元素,而只是抛出一个异常。
peek
获取但不移除此队列的头;如果此队列为空,则返回null。
poll
获取并移除此队列的头,如果此队列为空,则返回null。
remove
获取并移除此队列的头。