您的位置:首页 > 编程语言 > Java开发

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<E>

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>

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<E>

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<E>

Queue 实现通常不允许插入 null 元素,尽管某些实现(如 LinkedList)并不禁止插入 null。即使在允许 null 的实现中,也不应该将 null 插入到 Queue 中,因为 null 也用作 poll 方法的一个特殊返回值,表明队列不包含元素。

Queue继承Collection的所有方法,并扩展了其他方法:

函数

参数

方法

element

获取,但是不移除此队列的头。

offer

(E e)

将指定的元素插入此队列(如果立即可行且不会违反容量限制),当使用有容量限制的队列时,此方法通常要优于 add(E),后者可能无法插入元素,而只是抛出一个异常。

peek

获取但不移除此队列的头;如果此队列为空,则返回 null。

poll

获取并移除此队列的头,如果此队列为空,则返回 null。

remove

获取并移除此队列的头。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: