文档章节

java集合点

蜀山下的鱼
 蜀山下的鱼
发布于 2015/04/29 00:43
字数 2298
阅读 2
收藏 0

java集合体系图:



 


Iterator:对集合进行迭代的迭代器。

                                  方法:    hasNet()如果仍有元素可以迭代,则返回true。

                                                   next()     返回迭代的下一个元素。

   remove()从迭代器指向的集合中移除迭代器返回的最后一个元素


Collection:  List  Set   Queue接口的父接口。



Set:Set集合不允许包含相同的元素,集合里的多个对象之间没有明显的顺序。Set判断两个对象相同不是使用==运算符,而是根据equals方法。


HashSet: Set接口的典型实现。按Hash算法来存储集合中的元素,因此具有很好的存取和查找性能

    不能保证元素的排列顺序。

    此实现不是同步的。 如果多个线程同时访问一个集合,而其中至少一个线程修改了该集合,那么它必须 保持外部同步。这通常是通过对自然封装该集合的对象执行同步操作来完成的。如果不存在这样的对象,则应该使用 Collections.synchronizedSet 方法来“包装”集合。最好在创建时完成这一操作,以防止对 HashSet 实例进行意外的不同步访问: Set s =Collections.synchronizedSet(new HashSet(...));

原理:当想HashSet集合插入一个元素时,HashSet会调用该对象的hashCode()方法来得到该对象的hashcode值,然后根据它们的hashcode值决定该对象在HashSet中存储位置。

HashSet集合判断两个元素相等的标准是   两个对象通过equals()方法比较相等,并且两个对象的hashCode()方法返回值也相等

此类的 iterator 方法返回的迭代器是快速失败 的:在创建迭代器之后,如果对集合进行修改,除非通过迭代器自身的 remove 方法,否则在任何时间以任何方式对其进行修改,Iterator 都将抛出 ConcurrentModificationException。因此,面对并发的修改,迭代器很快就会完全失败,而不冒将来在某个不确定时间发生任意不确定行为的风险。 

       LinkedHashSet:具有可预知迭代顺序的Set 接口的哈希表和链接列表实现,元素顺序总与添加顺序一致

由于增加了维护链接列表的开支,其性能很可能会比HashSet 稍逊一筹,不过,在迭代访问Set元素时有很好的性能。

不是线程安全的,可以使用Collections.synchronizedSet()方法来“包装”该集合:Set s =Collections.synchronizedSet(new LinkedHashSet(...));


TreeSet:SortedSet接口的实现类。

此类保证排序后的 set 按照升序排列元素,根据使用的构造方法不同,可能会按照元素的自然顺序 进行排序(参见 Comparable),或按照在创建 set 时所提供的比较器进行 排序。

Comparable接口:该接口里面定义一个compareTo(Object obj)方法,该方法返回一个整数值,实现该接口的类必须实现该方法,实现了该接口的类的对象就可以比较大                                                                                         小。

如果试图把一个对象添加到TreeSet时,则该对象的类必须实现Comparable接口,否则程序将会抛出异常。

向TreeSet中添加的应该是同一个类的对象。

判断标准是:两个对象通过compareTo(Object obj)方法比较是否返回0;返回0,认为它们相等,否则不相等。

当需要把一个对象放入TreeSet中,重写该对象对应类的equals()方法时,应保证与compareTo(Object  obj)方法有一致的结果:

如果两个对象通过equals()方法比较返回true时,则这两个队象通过compareTo(Object  obj)方法比较应返回0.

不是线程安全的,可以使用Collections.synchronizedSet()方法来“包装”该集合:Set s = Collections.synchronizedSortedSet(new TreeSet(...));


各Set实现类的性能分析:

HashSet和TreeSet是Set的两个典型实现;HashSet的性能总是比TreeSet好,因为TreeSet需要额外的红黑树算法来维护集合元素的次序。只有当需要一个保持排序的Set时,才应该使用TreeSet,否则都应该使用HashSet。

LinkedHashSet是HashSet的子类,只有在遍历的时候会很快,其他方面都比HashSet稍慢。



List集合:元素有序,可重复的集合,集合中每个元素都有其对应的顺序索引,通过equals()方法判断两个对象是否相等。

ListIterator接口:继承Iterator接口,提供专门的操作List的方法。

hasPrevious():是否还有上一个元素

previous():返回该迭代器的上一个元素。

add(int index, E element):在指定位置插入一个元素。


  ArrayList和Vector是List的两个典型实现,List 接口的大小可变数组的实现;

size、isEmpty、get、set、iterator 和 listIterator 操作都以固定时间运行。add 操作以分摊的固定时间 运行,也就 是说,添加 n 个元素需要 O(n) 时间。其他所有操作都以线性时间运行(大体上讲)。

Vector是一个古老的集合。

ArrayList是线程不安全的;

Vector是线程安全的。

Vector的性能比ArrayList的性能要低,实际上,即使需要额外保证ArrayList集合线程安全,也不推荐使用Vector。


固定长度的List:数组的工具类Arrays的内部类ArrayList。是一个固定长度的List集合,程序只能遍历,不可增加,删除。




Queue集合  :模拟队列这种数据结构。队列通常(但并非一定)以 FIFO(先进先出)的方式排序各个元素。不过优先级队列和 LIFO 队列(或堆栈)例外,前者根据提供的比较器或元素的自然顺序对元素进行排序,后者按 LIFO(后进先出)的方式对元素进行排序。



Deque接口:是Queue接口的子接口,代表一个双端队列,可以从两端操作队列的元素。

典型实现:ArrayDeque,基于数组实现的双端队列。在程序需要使用“栈”这种队列时,推荐使用ArrayDeque和LinkedList,而不是Stack。


LinkeList: 既是List接口的实现类,也是Deque接口的实现类,所以既可以根据索引来随机访问集合中的元素,也可以当成双端队列来使用。


LinkedList与ArrayList, ArrayDeque的实现机制完全不同,ArrayList,ArraDeque内部以数组的形式来保存集合中的元素,因此随即访问集合元素时有较好的性能,而LinkedList内部以链表的形式来保存集合中的元素,因此在随即访问元素时性能较差,但在插入,删除元素时性能非常出色。




Map:保存具有映射关系的数据。一个映射不能包含重复的键;每个键最多只能映射一个值。


HashMap和Hashtable:   它们的关系类似于ArrayList和Vector。
Hashtable是一个古老的实现类,也是一个线程安全类,性能比HashMap较低。Hashtable不允许使用null作为key和value,而HashMap可以使用null作为key或value。
由于HashMap里的key不能重复,所以HashMap里做多只有一个key-value对的key为null,但可以有无数个value为null。
为了能在HashMap  Hashtable中存储,获取对象,用作key的对象必须实现hashcode()方法和equals()方法。
HashMap   Hashtable不能保证key-value对的顺序。
判断key相等的标准:两个key通过equals()方法比较返回true,两个key的hashcode值也相等。
判断value相等标准:通过equals()方法比较返回true。

LinkedHashMap:  使用双向链表来维护key-value对的次序。该链表负责维护Map的迭代顺序,迭代顺序与key-value对的插入顺序一致。
类似于LinkedHashSet,性能较低,迭代遍历时性能较好。


SortedMap接口和TreeMap实现类:
类似SortedSet和TreeSet,TreeMap也是一个红黑树数据结构,每个key-value对作为一个树的节点,存储key-value对时,需要根据key对节点进行排序:自然排序,定制排序。
TreeMap中判断两个key相等的标准是:两个key通过compareTo()方法返回0,即可认为两个key相等。
重写equals()时应该保持和compareTo()方法的一致性:即equals()方法返回true时,compareTo()方法应该返回0。


各Map实现类的性能分析:
HashMap通常比Hashtable要快一点,因为Hashtable需要额外的线程同步控制。TreeMap通常比HashMap   Hashtable要慢,尤其在插入和删除时更慢,因为底层采用红黑树来管理key-value对。
TreeMap有一个好处:key-value对是有序的,无须专门进行排序操作。
对于一般的应用场景,多考虑HashMap,因为HashMap正是为快速查询设计的。
如果程序需要一个总是排好序的Map时,则考虑使用TreeMap。



HashSet及其子类:采用hash算法来决定集合中的元素的存储位置,并通过hash算法来控制集合的大小。
HashMap   Hashtable及其子类:采用hash算法来决定Map中的key的存储,并通过hash算法来控制集合的大小。


本文转载自:http://blog.csdn.net/caiwenfeng_for_23/article/details/8248952

蜀山下的鱼
粉丝 9
博文 405
码字总数 0
作品 0
广州
高级程序员
私信 提问
Java编程的逻辑 -- 并发章 -- 线程的基本协作机制

线程的基本协作 线程的基本协作示例 总结 线程的基本协作 多线程间除了竞争访问同一资源外,也经常需要相互协作的去执行一些任务。而对于协作的基本机制用的最多的无疑是wait/notify。 协作的...

HikariCP
2018/06/22
0
0
高并发下数据库插入重复数据

以上是我的java代码,我用loadrunner 进行压力测试,在saveuser前设置集合点,直接使用300用户并发操作,结果数据库会保存进许多重复username的记录,我自己从网上也查了许多资料有人给了我以...

skyline520
2013/05/28
11.4K
27
JAVA + LR实现apache流媒体的性能测试

最近的一个项目,视频点播系统,使用apache实现的流媒体服务器。其实准确的说叫做伪流(HTTP Pseudo-Streaming),基本原理和概念自行了解吧。 让我简单的描述就是仍然是HTTP下载,播放器播放...

呐呐丶嘿
2018/11/28
306
0
使用ANT生成证书的时候出错

我想使用Ant生成CA证书,在做好build.xml,写好./bin/cli.xml 执行脚本时出现 [java] Initializing CA [java] Generating rootCA keystore: [java] CA name: AdminRootCA [java] SuperAdmin CN......

fringe-liu
2012/06/26
481
2
【目录导航】JAVA零基础进阶之路

【JAVA零基础入门系列】(已完结)导航目录 Day1 开发环境搭建 Day2 Java集成开发环境IDEA Day3 Java基本数据类型 Day4 变量与常量 Day5 Java中的运算符 Day6 Java字符串 Day7 Java输入与输出...

MFrank
2018/06/21
0
0

没有更多内容

加载失败,请刷新页面

加载更多

【2019年8月版本】OCP 071认证考试最新版本的考试原题-第5题

choose the best answer The CUSTOMERS table has a CUST_LAST_NAME column of data type VARCHAR2. The table has two rows whose COST_LAST_MANE values are Anderson and Ausson. Which q......

oschina_5359
35分钟前
3
0
电脑怎样制作流程图?分享绘制流程图方法

流程图的绘制可以用很多方法来实现,小编经常使用电脑对流程图进行绘制,即简单又便利,相信很多朋友都因为不知道怎样绘制流程图而选择了放弃,今天这篇文章希望可以让大家重拾绘制流程图的信...

干货趣分享
37分钟前
4
0
Elasticsearch 7.x 之文档、索引和 REST API 【基础入门篇】

前几天写过一篇《Elasticsearch 7.x 最详细安装及配置》,今天继续最新版基础入门内容。这一篇简单总结了 Elasticsearch 7.x 之文档、索引和 REST API。 什么是文档 文档Unique ID 文档元数据...

泥瓦匠BYSocket
41分钟前
5
0
TL665x-EasyEVM开发板处理器、flash、RAM

TL665x-EasyEVM是广州创龙基于SOM-TL665x核心板研发的一款TI C66x多核定点/浮点高性能DSP开发板,采用核心板+底板方式,底板尺寸为200mm*106.65mm,采用4*50pin和1*80pin B2B工业级连接器,稳...

Tronlong创龙
45分钟前
3
0
DevExpress Report-XRTable绑定数据

将从跳转前的页面(A)中获取传入的数据(dtOrd、BatchID、ModelID),绑定到Report报表对应的控件 ,代码如下: this.xrtBatchID.Text = sBatchID; this.xrtModel.Text ...

_Somuns
46分钟前
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部