java map与set的区别_java 集合(list,set,map)三者之间的关系和区别

java 集合(list,set,map)三者之间的关系和区别

一:先上一张关系图,让大家看的更明白。

ab549ceddff2d5c7351af65bdadd6d7d.png

备注:其中红色部分为实现,其他地方均为接口。

二:各自的特点。

List 有序,可重复ArrayList优点: 底层数据结构是数组,查询快,增删慢。缺点: 线程不安全,效率高Vector优点: 底层数据结构是数组,查询快,增删慢。缺点: 线程安全,效率低LinkedList优点: 底层数据结构是链表,查询慢,增删快。缺点: 线程不安全,效率高

Set 无序,唯一

HashSet

底层数据结构是哈希表。(无序,唯一)

如何来保证元素唯一性?

1.依赖两个方法:hashCode()和equals()

LinkedHashSet

底层数据结构是链表和哈希表。(FIFO插入有序,唯一)

1.由链表保证元素有序

2.由哈希表保证元素唯一

TreeSet

底层数据结构是红黑树。(唯一,有序)

1. 如何保证元素排序的呢?

自然排序,比较器排序

2.如何保证元素唯一性的呢?

根据比较的返回值是否是0来决定

三:我们怎么来使用。

针对Collection集合我们到底使用谁呢?

唯一吗?

是 > set > 排序吗 ?

是:TreeSet或LinkedHashSet

否:HashSet

否 > list > 要安全吗?

是:vector

否:ArrayList 或 LinkedList

四:Map。

有序:TreeMap

无序:HashMap和HashTable

HashMap

jdk1.7 底层为数组+单链

jdk1.8 底层为数组+单链+红黑树,默认长度为16,为什么是16不是其他的数字呢,只要是2的次幂就可以了。负载因子为0.75,当链表的长度大于8时,转为红黑树。

LinkedList

LinkedList是基于链表的,它是一个双向链表,每个节点维护了一个prev和next指针。同时对于这个链表,维护了first和last指针,first指向第一个元素,last指向最后一个元素。LinkedList是一个无序的链表,按照插入的先后顺序排序,不提供sort方法对内部元素排序。

HashSet

HashSet是基于HashMap来实现的,操作很简单,更像是对HashMap做了一次“封装”,而且只使用了HashMap的key来实现各种特性,而HashMap的value始终都是PRESENT。

HashSet不允许重复(HashMap的key不允许重复,如果出现重复就覆盖),允许null值,非线程安全。

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

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

相关文章

数据竞赛利器 —— xgboost 学习清单

1. 入门大全 xgboost 作者给出的一份完备的使用 xgboost 进行数据分析的完整示例代码:A walk through python example for UCI Mushroom dataset is provided.2. 参数调优 Complete Guide to Parameter Tuning in XGBoost (with codes in Python)转载于:https://www…

adf时间作用域_ADF任务流:页面片段的托管bean作用域

adf时间作用域介绍 当我们使用ADF任务流并需要实现一些特定于流的业务逻辑或存储一些与流相关的信息时,我们通常使用pageFlowScope托管bean。 而且,当我们需要为流的活动(页面或页面片段)提供服务时,我们会为此类托管b…

java接口抽象方法_Java 接口 抽象类 抽象方法

abstract class elehousekeeping { //抽象家用电器类abstract void opermode(); //抽象方法}class TV extends elehousekeeping { //电视机public void opermode() {System.out.println("13:12 TV is working.");}}class aircondition extends elehousekeeping { //空…

IMA文件如何打开,winimage使用方

一般先用UltraISO打开一个系统的镜像文件(.iso)。其中有些文件(尤其是.ima,img)比如下面雨林木风Ghost系统盘的这个IMA文件,我们先提取到桌面 用WinImage打开这个文件即可发现这个IMA文件整合了很多东西。所以&#x…

Java的几何布朗运动

Wiener过程是连续时间随机过程,以纪念Norbert Wiener命名。 通常用于用随机成分表示噪音或财务状况。 可以计算几何布朗运动以可视化某些界限(以分位数表示)以暗示绝对范围。 为了进行计算,需要以下参数: &#xff0…

上传图片,多图上传,预览功能,js原生无依赖

最近很好奇前端的文件上传功能,因为公司要求做一个支持图片预览的图片上传插件,所以自己搜了很多相关的插件,虽然功能很多,但有些地方不能根据公司的想法去修改,而且需要依赖jQuery或Bootstrap库,所以我就想…

mongodb java id 查询数据_java 用 _id 查找 MongoDB 下的数据

找网上的资料看了下增删改查,等日后补上。已经实现了数据的插入,现在想通过 _id属性来查找数据。一开始看到 类似 55b321df715cc162076eb466 这么一长串的内容觉得是string类型。但是发现并不能搜索到结果,在网上搜到了解决方案:S…

js中的面向对象入门

http://www.cnblogs.com/chenmeng0818/p/6508755.html 什么是对象 我们先来看高程三中是如何对对象进行定义的 "无序属性的集合,其属性可以包括基本值、对象或者函数",对象是一组没有特定顺序的的值。对象的没个属性或方法都有一个俄名字&…

maven 父maven_Maven不会吮吸。 。 。 但是Maven文件会

maven 父maven我不会参加整个Maven辩论,但可以说我是所有最佳实践的坚定支持者,对我而言,Maven是最佳实践的体现。 我的意思是说,Maven是围绕特定的最佳实践构建方法构建的。 注意,我说了一种特定的最佳实践构建方法。…

java maven部署_eclipse中maven项目部署到tomcat

下面就一一介绍这几种部署方式:1.打war包到tomcat/webapps目录这种方式其实跟非maven项目没什么区别,就是打包的方式不同之后在target目录下会生成war包,复制到tomcat/webapps目录即完成部署。2.使用tomcat-maven插件,在pom.xml的…

word 论文排版 —— 按指定格式章节的自动编号

在word中如何实现章节标题自动编号 标题样式与标题的编号是两个步骤,为标题建立编号是在为标题样式确定的基础后进行的。这是显而易见的,也即只有先定义了多级标题(也可使用 word 自带的标题样式),才可为这些多级标题自…

vb 获取mysql表第一行数据_vb如何将远程获取的数据插入本机数据表中

双击按钮添加如下代码Private Sub Command1_Click()Dim objRemoteConn As New ADODB.ConnectionDim objLocalConn As New ADODB.ConnectionDim objRs As ADODB.RecordsetDim strSql As StringobjRemoteConn.Open "providerSQLOLE…

ASP渲染下拉框使时间依次减少

<% xyear(now()) yyear(now())-1 Do While y>2002%><li><a href"#2015" class"treeview-time"><%y%></a></li><% yy-1 loop%>转载于:https://www.cnblogs.com/mazey/p/6512893.html

Spring Cloud对Hystrix的支持

Spring Cloud项目为Netflix OSS Hystrix库提供了全面的支持。 之前我已经写过有关如何使用原始Hystrix库包装远程调用的文章。 在这里&#xff0c;我将探讨如何将Hystrix与Spring Cloud结合使用 基本 实际上并没有什么大不了的&#xff0c;这些概念仅在特定于Spring引导的增强…

OA系统部署短信过程

安装dotNetFx40_Client_setup.exe插件 安装mysql_installer_community_V5.6.21.1_setup.1415604646.msi数据库 根据数据库版本安装相应驱动&#xff08;64位或者32位系统&#xff09; 安装mysql-connector-odbc-5.3.7-winx64.msi驱动&#xff08;ODBC&#xff09;工具 安装mysq…

centos6配置mysql5.7_CentOS 6/7 下 MySQL 5.7 安装部署与配置

一、前言1、本教程主要内容MySQL 5.7安装(yum)MySQL 5.7 ROOT账号密码修改MySQL 5.7基础使用与配置MySQL shell管理常用语法示例(用户、权限等)MySQL字符编码配置2、本教程环境信息与适用范围环境信息软件版本CentOS7.4 ReleaseMySQL5.7适用范围软件版本CentOSCentOS 6 & C…

hadoop伪分布式搭建 java_hadoop2.2.0伪分布式搭建

第一步&#xff1a;安装jdk我的linux版本是centos7&#xff0c;使用最简单的安装方式&#xff0c;这里首先说一下&#xff0c;由于系统会预装openjdk版本等其他各种版本&#xff0c;首先要做的是清除这些版本&#xff0c;然后iu安装oracle的jdk版本1.1 查看所有jdk版本并删除其…

北斗有 35 颗卫星,而 GPS 有 24 颗卫星,为什么二者数量不同?

作者&#xff1a;知乎用户链接&#xff1a;https://www.zhihu.com/question/21092045/answer/17164418来源&#xff1a;知乎著作权归作者所有。商业转载请联系作者获得授权&#xff0c;非商业转载请注明出处。反对目前的两个不靠谱回答&#xff01;需要的卫星数目和别人占坑没有…

可行的DeltaSpike教程

在一个最近的项目中&#xff0c;我遇到了一个有趣的问题&#xff1a;采用被赋予单个对象的服务方法&#xff0c;并在一个夜间过程的上下文中重用相同的代码&#xff0c;该过程独立于应用程序而在数千个相同类型的对象上运行。 试图在两个地方维护如此大小和复杂性的相同过程真…

2017/3/8 函数指针/事件/委托....

函数指针&#xff1a; 定义&#xff1a;函数指针是指向函数的指针变量。 因而“函数指针”本身首先应是指针变量&#xff0c;只不过该指针变量指向函数。这正如用指针变量可指向整型变量、字符型、数组一样&#xff0c;这里是指向函数。 函数指针有两个用途&#xff1a;调用函数…