JAVA容器
2013-08-26 16:37
141 查看
JAVA容器
一、容器体系结构java.util
二、迭代器Iterator<E>
迭代器是一种设计模式,可以遍历并选择序列中的对象,而开发人员并不需要了解该序列的底层结构。迭代器通常被称为”轻量级”对象,因为创建它的代价小。
JAVA的Iterator<E>功能比较简单,并且只能单向移动。
相对Iterator而言,for()循环遍历的速度较快点。而Iterator则比较通用,且序列的内部状态都由Iterator维护。
函数 | 功能 |
hasNext() | 检查序列下一个元素是否存在。 |
next() | 获取序列下一个元素。 |
remove() | 将迭代器新返回的元素删除。 |
public class ArrayToList {
static void printList(List<String> list){
for(String e : list)
System.out.print(" " + e);
System.out.println();
}
public static void main(String[] args) {
String[] strs = {"xue", "ma", "xiong", "feng", };
//方法一
List<String> strList = Arrays.asList(strs);
ArrayToList.printList(strList);
//方法二
List strList1 = new ArrayList<String>(strs.length);
for(String e : strs)
strList1.add(e);
ArrayToList.printList(strList1);
//方法三
List strList2 = new ArrayList();
Collections.addAll(strList2, strs);
ArrayToList.printList(strList2);
}
}
运行结果:
元素:xue
数组:[ma, xiong, feng]
元素:ma
数组:[xiong, feng]
元素:xiong
数组:[feng]
元素:feng
数组:[]
三、类集Collection<E>
与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 中所有元素的数组;返回数组的运行时类型与指定数组的运行时类型相同。 |
public class TestCollection {
public static void main(String[] args) {
Collection collection = new ArrayList();
Collection<String> collection1 = new ArrayList<String>();
//向容器中加入对象
collection.add( "Hello");
collection1.add( "Hello");
collection.add(new Integer(1));
//collection1.add(new Integer(1));
Object obj = new Object();
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<E>
是有序的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是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<E>是一种双向的链式结构。相对ArrayList而言,LinkedList<E>的插入和删除元素相对方便,但速度较慢。
除了实现 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和数学中的集合是同一个概念,就是没有重复元素的集合,是一个不包含重复元素的 collection。更确切地讲,set 不包含满足 e1.equals(e2) 的元素对 e1 和 e2,并且最多包含一个 null 元素。
Set继承Collection的所有方法,没有扩展了其他方法。
八、映射Map<K , V>
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 实现通常不允许插入 null 元素,尽管某些实现(如 LinkedList)并不禁止插入 null。即使在允许 null 的实现中,也不应该将 null 插入到 Queue 中,因为 null 也用作 poll 方法的一个特殊返回值,表明队列不包含元素。
Queue继承Collection的所有方法,并扩展了其他方法:
函数 | 参数 | 方法 |
element | 获取,但是不移除此队列的头。 | |
offer | (E e) | 将指定的元素插入此队列(如果立即可行且不会违反容量限制),当使用有容量限制的队列时,此方法通常要优于 add(E),后者可能无法插入元素,而只是抛出一个异常。 |
peek | 获取但不移除此队列的头;如果此队列为空,则返回 null。 | |
poll | 获取并移除此队列的头,如果此队列为空,则返回 null。 | |
remove | 获取并移除此队列的头。 | |
相关文章推荐
- Java容器学习之List接口
- Java容器(四):HashMap(Java 7)的实现原理
- java容器
- Java容器HashMap与HashTable详解
- Java容器Queue(初级)
- java容器(二) Iterator接口
- 使用Java容器的Map接口统计单词个数
- java容器(一)
- Java容器
- JAVA容器,什么叫JAVA容器?
- Java容器
- Java容器(Map)
- j2ee开发中的“java容器”和“web容器”有什么区别?
- Java容器总结
- Java面试题-Java容器
- java容器
- JAVA容器
- Java容器学习--LinkedList源码分析
- java容器
- java容器系列 —— 从Iterator说起