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());

}

}

运行结果:

容器的长度:

容器:[Hello, 1, java.lang.Object@2de41d]

容器1:[Hello]

第一个元素是:Hello

容器:[Hello, 1]

容器的长度:

容器:[]

注:在本例中也体系了泛型的好处。第一个容器没有使用泛型,可以向其添加不同类型的数据。第二个容器使用了泛型,只能向其添加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

获取并移除此队列的头。

JAVA容器的更多相关文章

  1. 【Java心得总结七】Java容器下——Map

    我将容器类库自己平时编程及看书的感受总结成了三篇博文,前两篇分别是:[Java心得总结五]Java容器上——容器初探和[Java心得总结六]Java容器中——Collection,第一篇从宏观整体的角 ...

  2. 【Java心得总结六】Java容器中——Collection

    在[Java心得总结五]Java容器上——容器初探这篇博文中,我对Java容器类库从一个整体的偏向于宏观的角度初步认识了Java容器类库.而在这篇博文中,我想着重对容器类库中的Collection容器 ...

  3. 【Java心得总结五】Java容器上——容器初探

    在数学中我们有集合的概念,所谓的一个集合,就是将数个对象归类而分成为一个或数个形态各异的大小整体. 一般来讲,集合是具有某种特性的事物的整体,或是一些确认对象的汇集.构成集合的事物或对象称作元素或是成 ...

  4. Java 容器(list, set, map)

    java容器类库的简化图: (虚线框表示接口, 实线框表示普通的类, 空心箭头表示特定的类实现了接口, 实心箭头表示某个类可以生成箭头所指的类对象) 继承Collection的主要有Set 和 Lis ...

  5. Java - 容器详解

    一.ArrayList 长度可变数组,类似于c++ STL中的vector. 元素以线性方式连续存储,内部允许存放重复元素. 允许对元素进行随机的快速访问,但是向ArrayList中插入和删除元素的速 ...

  6. Java 容器:Collection 初探之 List

    1 ///: JavaBasic//com.cnblogs.pattywgm.day1//CollectionTest.java 2 3 package com.cnblogs.pattywgm.da ...

  7. java容器---集合总结

    思考为什么要引入容器这个概念? Java有多种方式保存对象(应该是对象的引用),例如使用数组时保存一组对象中的最有效的方式,如果你想保存一组基本类型的数据,也推荐使用这种方式,但大家知道数组是具有固定 ...

  8. 3)Java容器

    3)Java容器   Java的集合框架核心主要有三种:List.Set和Map.这里的 Collection.List.Set和Map都是接口(Interface). List lst = new ...

  9. Java 容器相关知识全面总结

    Java实用类库提供了一套相当完整的容器来帮助我们解决很多具体问题.因为我本身是一名Android开发者,包括我在内很多安卓开发,最拿手的就是ListView(RecycleView)+BaseAda ...

随机推荐

  1. Bing Speech Recognition 标记

    Bing Speech Services Bing   Bing Speech Services provide speech capabilities for Windows and Windows ...

  2. 联想Z470安装10.11懒人版成功!!特此分享!!

    折腾黑苹果也断断续续好几个月了,在远景也爬了好多贴,遇到问题基本上靠自己解决,自己组的台式机已基本完美,大学期间买的联想Z470现在是“食之无味,弃之可惜”,想想也来试试装个黑苹果玩玩,之前装过10. ...

  3. CocoaPods 教程 转载

    CocoaPods安装和使用教程 Code4App 原创文章.转载请注明出处:http://code4app.com/article/cocoapods-install-usage 目录 CocoaP ...

  4. [转]unzip解压windows zip乱码的处理

    [转]unzip解压windows zip乱码的处理 http://blog.sina.com.cn/s/blog_6c9d65a101012gz0.html 朋友从windows传过来的zip文件, ...

  5. [读行者][学习LinqExpression和Reflection(Emit)]阅读TypeBuilderSample之ExampleFromTheArticle

    前言 关于”读行者“ 俗语有云:"读万卷书,行万里路“.多读一些优秀代码,不仅可以锻炼我们读代码的能力(便于维护或相互交流),还可以吸取很多我们成长所需的知识点.多读,才能开阔我们的眼界,才 ...

  6. P3245: 最快路线

    这道题其实还是不难的,只是自己搞混了=-=//晕,做了好久啊,其实就是个spfa,关键是存储路径搞昏了.输出格式要求太严了,航模不能有空格啊,所以因为格式WA了三次,哭啊/(ㄒoㄒ)/~~.贴上代码吧 ...

  7. 【BZOJ 1997】[Hnoi2010]Planar

    Description Input Output   找到哈密尔顿环之后找到不在哈密尔顿环上的边 这些边如果同时在里面相交那他们同时在外面也相交,所以只能一外一内,这就变成了2-SAT,判一下就好了 ...

  8. 团队开发-极速蜗牛-NABC模型

    特点:益智,操作简单. N(need):手机小游戏,可以让大家打发无聊的时间,比如:排队打饭,课间休息,等公交等地铁,拿出手机玩玩小游戏. A(approach):基于光的反射原理,编写的小游戏. B ...

  9. Windows 7系统下删除开机引导项的方法

    Windows 7系统下删除开机引导项的方法: 1.使用管理员权限运行cmd,在命令行窗口使用  bcdedit 回车 2.查找description为你想删除的段,看对应的标识符是多少, 然后使用 ...

  10. 博文&零散信息阅读

    关于培养方案: 全国一线高校.网易云课堂和我院培养计划的区别主要体现在: 基础课上,我院删去了物理课程的必修要求. 专业课上,删去了汇编语言.编译原理.信息安全技术等学科的必修要求. 专业选修课上,我 ...