java的集合应用_Java之集合类应用总结

1.集合类类图

Collection

├List

│├LinkedList

│├ArrayList

│└Vector

│ └Stack

└Set

├HashSet

├TreeSet

├LinkedHashSet

Map

├Hashtable

├HashMap

├WeakHashMap

└SortedMap

└TreeMap

2.分类介绍

Collection是最基本的集合接口,JDK提供的类都继承自Collection的“子接口”,如List和Set。所有实现Collection接口的类都必须提供两个标准的构造函数:无参数的构造函数和有一个Collection参数的构造函数。前者用于创建一个空的Collection,后者用于创建一个新的Collection,允许用户复制一个Collection。不论Collection的实际类型如何,它都支持一个iterator()的方法,该方法返回一个迭代子,可逐一访问Collection中每一个元素。用法如下:

Iterator it = collection.iterator(); //获得一个迭代子    while(it.hasNext()) {

Object obj = it.next(); //得到下一个元素    }

由Collection接口派生的两个接口是List和Set。

1)Collection和Map区别:

Collection类型,每个位置只有一个元素。

Map类型,持有key-value形式的数据——“键值对”,即其元素是成对的对象。

2)Collection子接口List和Set区别:

List是有序的Collection,确保维护元素特定的顺序,这类似于Java的数组。

Set接口不保证维护元素的次序,存入Set的每个元素必须是唯一的。加入Set的Object必须定义equals()方法以确保对象的唯一性。

3)List实现类ArrayList、LinkedList和Vector区别

ArrayList实现了可变大小的数组,允许对元素进行快速随机访问,但是向List中间插入与移除元素的速度很慢(类似动态数组)。它允许所有元素,包括null。ArrayList没有同步。如果数组长度一定,用数组效率更高。

LinkedList插入与删除元素开销不大,随机访问相比则相对较慢(类似链表)。可当堆栈、队列和双向队列使用。

Vector是同步的。当一个Iterator被创建而且正在被使用,另一个线程改变了Vector的状态,这时将抛出ConcurrentModificationException异常,因此必须捕获该异常。比ArrayList慢。

Stack继承自Vector,实现一个后进先出的堆栈。同步的。

4)Set实现类HashSet和TreeSet区别

HashSet为快速查找而设计的Set(采用散列函数)。存入HashSet的对象必须定义hashCode()。 它不保证集合的迭代顺序;特别是它不保证该顺序恒久不变。此类允许使用 null元素。此实现不是同步的。

TreeSet保持次序的Set,底层为红黑树。使用它可以从Set中提取有序的序列。

LinkedHashSet: 具有HashSet的查询速度,且内部使用链表维护元素的顺序(哈希函数+链表)。于是在使用迭代器遍历Set时,结果会按元素插入的次序显示。

5)Map实现类Hashtable、HashMap和WeakHashMap

Hashtable是同步的,不允许null。继承于陈旧的Dictionary类的。

HashMap是非同步的,速度比Hashtable快。允许null。HashMap继承于AbstractMap类。内部Hash数组等于Hashtable不同。Map 中插入、删除和定位元素,HashMap 是最好的选择。

WeakHashMap是一种改进的HashMap,若一个key不再被外部所引用,那么该key可以被GC回收。

TreeMap中所有元素都保持固定的顺序,如果需有序的结果你就应该使用TreeMap(HashMap中元素的排列顺序是不固定的)。

3 总结

容器对象仅能持有对象引用(对象的指针),而不是将对象信息Copy一根至数列末位置。

在多线程环境下,对于非同步的结合和Map,可以用类似List list = Collections.synchronizedList(new LinkedList(...));或Collections.synchronizedMap(originMap)实现其同步,或者其他手动同步的方法。

Map提供的不是对象与数组的关联,而是对象和对象的关联。

Set只接受不重复的对象。HashSet提供了最快的查询速度。而TreeSet则保持元素有序。LinkedHashSet保持元素的插入顺序。

没必要再在新代码里使用旧类库留下来的Vector,Hashtable和Stack了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/294504.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Oracle级联查询

在ORACLE 数据库中有一种方法可以实现级联查询select * //要查询的字段from table //具有子接点ID与父接点ID的表 start with selfidid //给定一个startid(字段名为子接点ID,及开始的ID号)connect by prior selfidparentid …

Android面试题总结加强版(二)

http://blog.csdn.net/superjunjin/article/details/7855995 16.Android常用控件的信息 单选框(RadioButton与RadioGroup): RadioGroup用于对单选框进行分组,相同组内的单选框只有一个单选框被选中。 事件:setOnCheckedChangeListener()&…

1 盒用 1 年,这个防雾黑科技,让你的眼镜再也不起雾!

▲ 点击查看本来被疫情这么一闹,口罩就已经成了我们离不开的刚需品。现在天气大幅度降温,口罩更不能摘了,必须得御寒防疫两手抓!虽然口罩的优点有目共睹,但它最大的 Bug 也够大伙儿吐槽一顿了——口罩眼镜一秒起雾&…

福利好礼现金大奖等你来→首届 .NET Conf China Hackathon 火热报名中!

.NET 开源以来越来越多的开发者和企业开始加入到 .NET 的生态。.NET 6 是 .NET Framework, .NET Core 和 Mono 三个平台完成融合的第一个长期支持版本,无论你是开发云原生应用,还是 IOT 应用,移动端,桌面应用,.NET 6 …

ciscodk新科目——1Z1-807

1Z1-807是ciscodk.com刚更新的科目,具体信息如下: 1Z1-807 Java Enterprise Edition 6 Enterprise Architect Certified Master Exam (Step 1 of 3) 想知更多新科目就在ciscodk .com转载于:https://blog.51cto.com/ciscodk/1088893

一站式解决,Android 拍照 图库的各种问题

在android开发中, 在一些编辑个人信息的时候,经常会有头像这么一个东西,就两个方面,调用系统相机拍照,调用系统图库获取图片.但是往往会遇到各种问题: 1.oom 2.图片方向不对 3.activity result 的时候data null 4.调用图库的时候没找到软件 嘿嘿..开代码: 首先是调用系统拍照…

(转载)9个主流的开源许可协议[整理]

http://univasity.iteye.com/blog/1292658 关于开源许可现今存在的开源协议很多,而经过Open Source Initiative 组织通过批准的开源协议目前有60多种(http://www.opensource.org/licenses/alphabetical )。我们在常见的开源协议如BSD, GPL, L…

java属于面相_[Java教程]面相对象

[Java教程]面相对象0 2018-09-13 16:00:26面向对象那什么是面向对象? 在Java 中,我们是一切皆对象,所有的方法都是围绕着对象来的。面相对象是相对面向过程而来的,他们都是一种思想,面向过程,强调的是一种功…

Android面试题总结加强再加强版(三)

http://blog.csdn.net/superjunjin/article/details/7860025 26.如果后台的Activity由于某原因被系统回收了,如何在被系统回收之前保存当前状态? 当你的程序中某一个Activity A 在运行时中,主动或被动地运行另一个新的Activity B 这个时候A会…

下面由我来给大家表演个绝活

1 娶个老婆真不容易啊!▼2 孩子有些东西不是努力就能吃到的啊▼3 给大家表演个绝活▼4 在危险的边缘一点点试探▼5 你知道为什么狗子要拆家了吗▼6 外国版姜太公钓鱼愿者上钩▼7 最好看的那个晚霞永远出现在教室的窗外▼你点的每个赞,我都认真当成…

.Net 下高性能分表分库组件-连ShardingCore接模式原理

ShardingCore 一款ef-core下高性能、轻量级针对分表分库读写分离的解决方案,具有零依赖、零学习成本、零业务代码入侵。Github Source Code 助力dotnet 生态 Gitee Source Code介绍在分表分库领域java有着很多的解决方案,尤其是客户端解决方案(ShardingSphere)&…

PHP 学习1.1

1 链接mysql 数据简单测试 <html><head> <title></title> <meta http-equiv"Content-Type" content"text/html; charsetutf-8" /></head><body><?php $mysqli new mysqli(); $mysqli->connect(&quo…

php 利用http上传协议(表单提交上传图片 )

主要就是利用php 的 fsocketopen 消息传输。 这里先通过upload.html 文件提交&#xff0c;利用chrome抓包&#xff0c;可以看到几个关键的信息。 首先指定了表单类型为multipart/form-data;。 boundary是分隔符 因为上传文件不在使用原有的http协议了。请求内容不再可能以 x…

Nginx Unit 1.27.0 发布

目录 介绍 更新内容 将 HTTP 请求重定向到 HTTPS 为纯路径 URI 提供可配置的文件名 完整的更新日志 其他 平台更新 介绍 Nginx Unit 是一个动态应用服务器&#xff0c;能够与 Nginx Plus 和 Nginx 开源版并行或独立运行。Nginx Unit 支持 RESTful JSON API&#xff0c;…

java搜索string_java – 在数组列表中搜索最常见的String

我想知道如何搜索字符串的ArrayList以找到我创建的“行程”对象中最常出现的“目的地”(其中包含不同目的地的列表.)到目前为止,我有&#xff1a;public static String commonName(ArrayList itinerary){int count 0;int total 0;ArrayList names new ArrayList();Iteratori…

重新认识Docker Compose之Sidecar模式

什么是Docker Compose在微服务盛行的今天&#xff0c;我们通常是这么定义Compose的&#xff1a;对容器的统一启动和关闭的编排工具。但是我以前还是有个疑惑&#xff0c;谁会用Compose在一台服务器上部署多个服务呢&#xff1f;干脆直接用单体服务就行了&#xff01;直到我遇到…

Android面试题总结加强再加强版(四)

http://blog.csdn.net/superjunjin/article/details/7862182 1&#xff0c;双缓冲技术原理以及优缺点&#xff1a; 创建一幅后台图像&#xff0c;将每一帧画入图像&#xff0c;然后调用drawImage()方法将整个后台图像一次画到屏幕上去。 优点&#xff1a;双缓冲技术的优点在于大…

数学家看到就把持不住,高斯被它迷得神魂颠倒,2600年的数学史里的一个奇迹……...

全世界只有3.14 % 的人关注了爆炸吧知识数学的美两个字就能说清数学女神很可能是个洁癖她的苛刻就体现在公式里那每一个符号每一个数字都不允许有哪怕一点杂质如此才是她最认可的孩子因为知道了勾股定理古人们才创造了辉煌因为有了经典力学公式人类才能探索星辰大海因为掌握了质…

JSFL:导入Png图片导出swf

现在项目需要用到某种格式的swf&#xff0c;既这个swf里的舞台上原点有两个MovieClip&#xff0c;分别命名为mc1&#xff0c;mc2. mc1和mc2都是从外部导入的同一个png图片转为mc而来的。然后导出为这个png同名的swf文件&#xff0c;和png同目录。 代码如下&#xff1a; //功能&…

SQLSERVER中的自旋锁

SQLSERVER中的自旋锁 在SQLSERVER中的锁有很多&#xff0c;例如什么意向共享锁&#xff0c;排他锁&#xff0c;行&#xff0c;页锁 这些都属于LOCK 而latch比lock更轻量级&#xff0c;只在内存中存在&#xff0c;一般用来锁住数据页面&#xff0c;防止多人同时修改内存中的一个…