JAVA容器
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容器的更多相关文章
- 【Java心得总结七】Java容器下——Map
我将容器类库自己平时编程及看书的感受总结成了三篇博文,前两篇分别是:[Java心得总结五]Java容器上——容器初探和[Java心得总结六]Java容器中——Collection,第一篇从宏观整体的角 ...
- 【Java心得总结六】Java容器中——Collection
在[Java心得总结五]Java容器上——容器初探这篇博文中,我对Java容器类库从一个整体的偏向于宏观的角度初步认识了Java容器类库.而在这篇博文中,我想着重对容器类库中的Collection容器 ...
- 【Java心得总结五】Java容器上——容器初探
在数学中我们有集合的概念,所谓的一个集合,就是将数个对象归类而分成为一个或数个形态各异的大小整体. 一般来讲,集合是具有某种特性的事物的整体,或是一些确认对象的汇集.构成集合的事物或对象称作元素或是成 ...
- Java 容器(list, set, map)
java容器类库的简化图: (虚线框表示接口, 实线框表示普通的类, 空心箭头表示特定的类实现了接口, 实心箭头表示某个类可以生成箭头所指的类对象) 继承Collection的主要有Set 和 Lis ...
- Java - 容器详解
一.ArrayList 长度可变数组,类似于c++ STL中的vector. 元素以线性方式连续存储,内部允许存放重复元素. 允许对元素进行随机的快速访问,但是向ArrayList中插入和删除元素的速 ...
- Java 容器:Collection 初探之 List
1 ///: JavaBasic//com.cnblogs.pattywgm.day1//CollectionTest.java 2 3 package com.cnblogs.pattywgm.da ...
- java容器---集合总结
思考为什么要引入容器这个概念? Java有多种方式保存对象(应该是对象的引用),例如使用数组时保存一组对象中的最有效的方式,如果你想保存一组基本类型的数据,也推荐使用这种方式,但大家知道数组是具有固定 ...
- 3)Java容器
3)Java容器 Java的集合框架核心主要有三种:List.Set和Map.这里的 Collection.List.Set和Map都是接口(Interface). List lst = new ...
- Java 容器相关知识全面总结
Java实用类库提供了一套相当完整的容器来帮助我们解决很多具体问题.因为我本身是一名Android开发者,包括我在内很多安卓开发,最拿手的就是ListView(RecycleView)+BaseAda ...
随机推荐
- Bing Speech Recognition 标记
Bing Speech Services Bing Bing Speech Services provide speech capabilities for Windows and Windows ...
- 联想Z470安装10.11懒人版成功!!特此分享!!
折腾黑苹果也断断续续好几个月了,在远景也爬了好多贴,遇到问题基本上靠自己解决,自己组的台式机已基本完美,大学期间买的联想Z470现在是“食之无味,弃之可惜”,想想也来试试装个黑苹果玩玩,之前装过10. ...
- CocoaPods 教程 转载
CocoaPods安装和使用教程 Code4App 原创文章.转载请注明出处:http://code4app.com/article/cocoapods-install-usage 目录 CocoaP ...
- [转]unzip解压windows zip乱码的处理
[转]unzip解压windows zip乱码的处理 http://blog.sina.com.cn/s/blog_6c9d65a101012gz0.html 朋友从windows传过来的zip文件, ...
- [读行者][学习LinqExpression和Reflection(Emit)]阅读TypeBuilderSample之ExampleFromTheArticle
前言 关于”读行者“ 俗语有云:"读万卷书,行万里路“.多读一些优秀代码,不仅可以锻炼我们读代码的能力(便于维护或相互交流),还可以吸取很多我们成长所需的知识点.多读,才能开阔我们的眼界,才 ...
- P3245: 最快路线
这道题其实还是不难的,只是自己搞混了=-=//晕,做了好久啊,其实就是个spfa,关键是存储路径搞昏了.输出格式要求太严了,航模不能有空格啊,所以因为格式WA了三次,哭啊/(ㄒoㄒ)/~~.贴上代码吧 ...
- 【BZOJ 1997】[Hnoi2010]Planar
Description Input Output 找到哈密尔顿环之后找到不在哈密尔顿环上的边 这些边如果同时在里面相交那他们同时在外面也相交,所以只能一外一内,这就变成了2-SAT,判一下就好了 ...
- 团队开发-极速蜗牛-NABC模型
特点:益智,操作简单. N(need):手机小游戏,可以让大家打发无聊的时间,比如:排队打饭,课间休息,等公交等地铁,拿出手机玩玩小游戏. A(approach):基于光的反射原理,编写的小游戏. B ...
- Windows 7系统下删除开机引导项的方法
Windows 7系统下删除开机引导项的方法: 1.使用管理员权限运行cmd,在命令行窗口使用 bcdedit 回车 2.查找description为你想删除的段,看对应的标识符是多少, 然后使用 ...
- 博文&零散信息阅读
关于培养方案: 全国一线高校.网易云课堂和我院培养计划的区别主要体现在: 基础课上,我院删去了物理课程的必修要求. 专业课上,删去了汇编语言.编译原理.信息安全技术等学科的必修要求. 专业选修课上,我 ...