集合总结(Collection)

转载自 集合总结(Collection)

最近项目上线完,闲来无事,整理了关于集合相关对比,具体详见以下几点:
1.ArrayList和Vector区别:
这两个类都实现了List接口(List接口继承了Collection接口),他们都是有序集合,集存储在这两个集合中的元素的位置都是有顺序的,相当于一种动态数组,我们以后可以按位置的索引号来取出某元素,并且其中的数据是允许重复的,这是HashSet之类的集合的最大的不同之处,HashSet之类的集合不可以按索引号去检索其中的元素,也不允许有重复的元素。
ArrayList与Vector的区别,主要由两个方面:
① 同步性
Vector是线程安全的,也就是说它的方法之间是线程同步的,而ArrayList是线程不安全的,它的方法之间是线程不同步的。如果只有一个线程会访问到集合,那最好使用ArrayList,因为它不考虑线程安全问题;如果有多个线程会访问到集合,那最好使用Vector,因为不需要我们自己去考虑和编写线程安全的代码。
备注:对于Vector&ArrayList、HashTable&HashMap,要记住线程安全问题,记住Vector与HashTable是旧的,是java一诞生就提供了的,他们是线程安全的,ArrayList与HashMap是java2时才提供的,他们是线程不安全的。
②数据增长
ArrayList与Vector都有一个初始的容量大小,当存储进它们里面的元素的个数超过了容量时,就需要增加ArrayList与Vector的存储空间,每次要增加存储空间时,不是只增加一个存储单元,而是增加多个存储单元,每次增加的存储单元的个数在内存空间利用与程序效率之间要取得一定的平衡。Vector默认增长为原来的2倍,而ArrayList的增长策略在文档中没有明确规定(从源码看到的是增长为原来的1.5倍)。ArrayList与Vector都可以设置初始空间的大小,Vector还可以设置增长的空间大小,而ArrayList没有提供设置增长空间的方法。
总结:即Vector增长原来的一倍,ArrayList增长原来的0.5倍。
2.HashMap和HashTable区别:
HashMap是HashTable的轻量级实现(非线程安全的实现),他们都完成了Map接口,主要区别在于HashMap允许空(null)键值(key),由于非线程安全,在只有一个线程访问的情况下,效率高于HashTable。
HashMap允许将null作为一个Entry的key或者Value,而HashTable不允许。
HashMap把HashTable的contains方法去掉了,改成containsvalue和congainsKey。因为contains方法容易让人引起误解。
HashTable继承自Dictionary类,而HashMap是Java1.2引进的Map interface的一个实现。
最大的不同是,HashTable的方法是Synchronize的,而HashMap不是,在多个线程访问HashTable时,不需要自己为它的方法实现同步,而HashMap必须为之提供外同步。
HashMap和HashTable采用的hash/rehash算法大致一样,所以性能不会有很大的差异。
HashMap与HashTable主要从三个方面讲:
①历史原因:HashTable是基于陈旧的Dictionary类的,HashMap是Java1.2引进的Map接口的一个实现;
②同步性:HashTable是线程安全的,也就是说是同步的,而HashMap是线程不安去的,不是同步的;
③值:只有HashMap可以让你将空值作为一个表的条目的key和value。
3.List、Map、Set三个接口存取元素时,各有什么特色:
首先,List和Set具有相似性,它们都是单列元素的集合,所以它们有一个共同的父接口Collection。Set里面不允许有重复的元素,所谓重复,即不能有两个相等(注意:不仅仅是相同)的对象。【假设Set集合中有了一个A对象,现在我要向Set集合再存入一个B对象,但B对象与A对象equals相等,则B对象存储不进去,所以Set集合的add方法有一个boolean的返回值,当集合中没有某个元素,此时add方法可成功加入该元素时,则返回true,当集合含有与某个元素equals相等的元素时,此时add方法无法加入该元素,返回结果为false。Set取元素时,没法说取第几个,只能以Iterator接口取得所有的元素,再逐一遍历各个元素】
List表示有先后顺序的集合,注意不是那种按年龄、大小、价格之类的排序。当我们多次盗用add(Object)方法时,每次加入的对象就想火车站买票有排队顺序一样,按先来后到的顺序排序。有时候,也可以插队,即调用add(int index,Obj  e)方法,就可以指定当前对象在集合中的存放位置。一个对象可以被反复存储进List中,每调用一次add方法,这个对象就被插入进集合中一次,其实,并不是把这个对象本身存储进集合中,而是在集合中用一个索引变量指向这个对象,当这个对象被add多次时,即相当于集合中有多个索引指向了这个对象。List除了可以以Iterator接口取得所有元素,再逐一遍历各个元素之外,还可以调用get(index i)来明确说明取第几个。
Map与List和Set不同,它是双列的集合,其中有put方法,定义如下:put(obj key,obj value),每次存储时,要存储一对key/value,不能存储重复的key,这个重复的规则也是按equals比较相等。取则可以根据key获得相应的value,即get(Object key)返回值为key所对应的value。另外,也可以获得所有的key的集合,还可以获得所有的value的集合,还可以获得key和value组合成的Map.Entry对象的集合。
List以特定次序来持有元素,可有重复元素。Set无法拥有重复元素,内部排序。Map保存key-value值,value可多值。
HashSet按照hashcode值的某种运算方式进行存储,而不是直接按hashCode值的大小进行存储。例如:”abc” –> 78,”def”–>62,”xyz”–>65在HashSet中的存储顺序不是62,65,78。
同一个对象可以在Vector中加入多次。往集合里面加元素,相当于集合里用一根绳子连接到目标对象。往HashSet中缺加不了多次。
4.List、Map和Set的区别:
List:存储单列数据的集合;List中存储的数据是有顺序的,并且允许重复。
Map:存储键和值的双列数据的集合;Map中存储的数据是没有顺序的,其键(key)是不能重复的,它的值(value)是可以有重复 。
Set:存储单列数据的集合;Set中存储的数据是没有顺序的,并且不予许重复。
5.ArrayList、Vector、LinkedList的存储性能和特性:
ArrayList和Vector都是使用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,它们都允许直接按序号索引元素,但是插入元素要涉及数组元素移动等内存操作,所以索引数据快而插入数据慢,Vector由于使用了synchronized方法(线程安全),通常性能上较ArrayList差,而LinkedList使用双向链表实现存储,按序号索引数据需要进行前向或后向遍历,但是插入数据时只需要记录本项的前后项即可,所以插入速度快。
LinkedList也是线程不安全的,LinkedList提供了一些方法,是的LinkedList可以被当做堆栈和队列来使用。
6.ArrayList、HashMap容量相关:
HashMap:默认容量为16,负载因子为0.75;
ArrayList:默认容量为10,负载因子为0.5;

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

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

相关文章

springboot接收浏览器发送delete请求( method not allowed 405解决方法)

【README】 浏览器使用form提交信息的时候只支持GET和POST&#xff0c;如果需要在浏览器上使用PUT和DELETE请求方式的话&#xff0c;只能使用欺骗的方式了&#xff0c;SpringMvc提供了HiddenHttpMethodFilter类来提供支持&#xff1b; 【1】前端 1&#xff09;list.html <…

tensorflow图形检测_社交距离检测器——Tensorflow检测模型设计

在隔离期间&#xff0c;我花时间在github上探索Tensorflow的大量预训练模型。这样做时&#xff0c;我偶然发现了一个包含25 个带有性能和速度指标的预训练对象检测模型的存储库。拥有一些计算机视觉知识并给出了实际的背景知识&#xff0c;我认为使用其中之一来构建社交隔离应用…

leetcode初级算法4.两个数组的交集 II

leetcode初级算法4.两个数组的交集 II 仅为个人刷题记录&#xff0c;不提供解题思路 题解与收获 我的解法&#xff1a;&#xff08;总结在代码中&#xff09; public int[] intersect(int[] nums1, int[] nums2) {//为空则返回if(nums1 null || nums2 null){return null;…

Java NIO:Buffer、Channel 和 Selector

转载自 Java NIO&#xff1a;Buffer、Channel 和 Selector本文将介绍 Java NIO 中三大组件 Buffer、Channel、Selector 的使用。 本来要一起介绍非阻塞 IO 和 JDK7 的异步 IO 的&#xff0c;不过因为之前的文章真的太长了&#xff0c;有点影响读者阅读&#xff0c;所以这里将它…

(转)使用IDEA将普通MAVEN项目转为WEB项目

转自&#xff1a; 使用IDEA将普通MAVEN项目转为WEB项目_yun0000000的博客-CSDN博客使用IDEA将普通MAVEN项目转为WEB项目https://blog.csdn.net/yun0000000/article/details/70664944 1、file--project Structure--,然后点“”号&#xff0c;,若没有war包&#xff0c;可修改mav…

python创建文件对象_python基础教程:文件读写

在Linux系统中&#xff0c;一切都是文件。但我们通常说的文件是保存在磁盘上的图片、文档、数据、程序等等。而在程序的IO操作中&#xff0c;很多时候就是从磁盘读写文件。本节我们讲解Python中的文件对象如何操作文件。创建文件对象 通过Python内置函数open()可以很容易的创建…

(转)springboot:添加JSP支持

转自&#xff1a; 14.springboot:添加JSP支持 - 简书&#xff08;1&#xff09;创建Maven web project 使用Eclipse新建一个Maven Web Project &#xff0c;项目取名为&#xff1a;spring-boot-jsp &#xff08;2&#xff09;在pom.xm...https://www.jianshu.com/p/4216bbd1e0…

leetcode初级算法5.加一

leetcode初级算法5.加一 仅为个人刷题记录&#xff0c;不提供解题思路 题解与收获 我的解法&#xff1a;&#xff08;总结在代码中&#xff09; public int[] plusOne(int[] digits) {//获取digits长度int length digits.length;//判断条件int count 0;//全是9的情况for …

epoll 浅析以及 nio 中的 Selector

转载自 epoll 浅析以及 nio 中的 Selector首先介绍下epoll的基本原理&#xff0c;网上有很多版本&#xff0c;这里选择一个个人觉得相对清晰的讲解&#xff08;详情见reference&#xff09;&#xff1a;首先我们来定义流的概念&#xff0c;一个流可以是文件&#xff0c;socket&…

转-SpringBoot——使用外置的Tomcat服务器

转自&#xff1a; SpringBoot——使用外置的Tomcat服务器_架构师的小跟班的博客-CSDN博客_springboot使用外置tomcat1 前言2 修改步骤2.1 修改打包方式&#xff08;jar -> war&#xff09;2.2 排除 SprignBoot的Web模块中的Tomcat依赖2.2.1 将嵌入的Tomcat依赖方式改成 pro…

leetcode初级算法6.字符串转整数(atoi)

leetcode初级算法6.字符串转整数(atoi) 仅为个人刷题记录&#xff0c;不提供解题思路 题解与收获 我的解法&#xff1a; public int myAtoi(String s) {//避免魔法值先设spaceString space " ";//如果是空或者是一串空字符串就滚回去&#xff01;if(s null || …

inner join on 加条件和where加条件_SQL学习笔记 - GROUP BY / JOIN / UNION

最近在DataCamp上学习SQL&#xff08;基于PostgreSQL&#xff09;的课程&#xff0c;本文主要记录自己易记混的点&#xff0c;以便日后参考学习&#xff0c;不做原理讲解。GROUP BY&#xff08;分组&#xff09;一般和聚合函数一起使用&#xff0c;包括COUNT()&#xff0c;AVG(…

Selector 实现原理

转载自 Selector 实现原理概述 Selector是NIO中实现I/O多路复用的关键类。Selector实现了通过一个线程管理多个Channel&#xff0c;从而管理多个网络连接的目的。 Channel代表这一个网络连接通道&#xff0c;我们可以将Channel注册到Selector中以实现Selector对其的管理。一个C…

转: 深入浅出-网络七层模型

转自 深入浅出&#xff0d;网络七层模型 - sunsky303 - 博客园引言 今天回顾一下&#xff0d;&#xff0d;网络七层模型&&网络数据包 网络基本概念 OSI模型 OSI 模型(Open System Interconnection model)是一个由国际标准化组织&#https://www.cnblogs.com/sunsky3…

date转timestamp格式_技术分享 | MySQL:timestamp 时区转换导致 CPU %sys 高的问题

作者&#xff1a;高鹏文章末尾有他著作的《深入理解 MySQL 主从原理 32 讲》&#xff0c;深入透彻理解 MySQL 主从&#xff0c;GTID 相关技术知识。本文为学习记录&#xff0c;可能有误请谅解。本文建议PC端观看&#xff0c;效果更佳。这个问题是一个朋友遇到的风云&#xff0c…

2021年最新springcloud配置中心不生效的版本原因

想直接看结论请到最下面&#xff0c;中间是我的纠错细节 实名吐槽一波cloudAlibaba文档。 github上的官方文档明明白白写着&#xff1a; 2.2.X版本适用于Springboot 2.2.X 彳亍&#xff01; 于是我将原本的2.6.0版本改成了SpringBoot 2.2.4Release&#xff0c;然后启动报错&a…

python爬新闻并保存csv_用python爬取内容怎么存入 csv 文件中

小白一个&#xff0c;爬取豆瓣电影250作为练习&#xff0c;想把爬取的内容用csv存储&#xff0c;想存但是不知道怎么自己原来代码拼接在一起。 ps:非伸手党&#xff0c;查阅了官方文档&#xff0c;也做了csv读写的练习&#xff0c;就是拼不到一起&#xff0c;不知道该怎么改。求…

idea部署springboot项目到外部tomcat

【README】 本文旨在记录idea部署springboot项目到外部tomcat的步骤&#xff1b; 第一次部署会踩很多坑儿&#xff0c;多查google&#xff0c;多重试&#xff1b; 第一次部署&#xff0c;不建议手动录入依赖&#xff0c;因为有可能遗漏&#xff1b;而且网络上资料很多但也很…

生成configDataContextRefres失败:Error creating bean with name ‘configDataContextRefresher‘

被这个问题折磨了很久&#xff0c;本人解决方法如下&#xff0c;奉劝一句&#xff0c;该看的官方文档还是要看&#xff0c;但是千万别傻傻地照做&#xff01; 首先编写bootstrap.properties&#xff0c;往里写入&#xff1a; 这些基础配置 然后检查自己是否引入了这个依赖&am…

python怎么用for循环找出最大值_用for循环语句写一个在输入的十个数字中求最大和最小值的python程序应该怎么写?...

“在输入的十个数字中求最大和最小值的 python 代码”这个需求&#xff0c;在不同时间来看&#xff0c;解题思路不同&#xff0c;所需要的 python 知识点不同。 作为萌新的我&#xff0c;为此特意整理了 3 种解法&#xff0c;以及相应的知识点笔记。 解法A&#xff1a;不使用列…