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

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

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

二:各自的特点。

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值,非线程安全。

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

  1. 栈,队列和链表三者之间的关系与区别

    最近一直在学习算法,刷算法题,但是自从大学毕业以来,数据结构的知识都还给老师了,只会个数组,所以前期刷的题目也都是有关数组的 最近跟着小册重学了一遍数据结构,今天就记录一下栈,队列和链表三者之间的关系 ...

  2. sql语句和java的关系_java中Statement 与 PreparedStatement接口之间的关系和区别

    Statement 和 PreparedStatement之间的关系和区别. 关系:PreparedStatement继承自Statement,都是接口 区别:PreparedStatement可以使 ...

  3. JavaSE、JavaEE、JavaME三者之间的关系与区别

    Java 平台有三个版本,这使软件开发人员.服务提供商和设备生产商可以针对特定的市场进行开发: Java SE (Java Platform,Standard Edition).Java SE 以前称 ...

  4. 睡眠、休眠、混合睡眠三者之间的关系与区别

    1.先说一下"最古老"的待机:电脑待机待机(Standby):将系统切换到该模式后,除了内存,电脑其他设备的供电都将中断,只有内存依靠电力维持着其中的数据(因为内存是易失性的,只要 ...

  5. Git、GitHub、GitLab三者之间的联系以及区别

    Git.GitHub.GitLab三者之间的联系以及区别 在讲区别以及联系之前先简要的介绍一下,这三者都是什么(本篇文章适合刚入门的新手,大佬请出门左转) 1.什么是 Git? Git 是一个版本控制 ...

  6. 详解RTK、RTD、SBAS、WAAS、PPP、PPK广域差分等技术之间的关系与区别。

    RTK与RTD的区别,一个是载波相位差分.一个是码差分,并且RTK的定位精度要高一些. RTK与PPK的区别,一个是实时提供数据信息,一个是事后处理. WAAS是SBAS系统一个具体的实例,包含在SB ...

  7. 详解RTK,RTD,SBAS,WAAS,PPP,PPK,广域差分等技术之间的关系与区别

    RTK与RTD的区别,一个是载波相位差分.一个是码差分,并且RTK的定位精度要高一些. RTK与PPK的区别,一个是实时提供数据信息,一个是事后处理. WAAS是SBAS系统一个具体的实例,包含在SB ...

  8. Java笔记-01(Java语言的特性、JDK、JRE、JVM三者之间的关系和Java重点术语)

    1.Java语言的特性 1.1.简单性在Java语言当中真正操作内存的是:JVM(Java虚拟机)所有的java程序都是运行在Java虚拟机当中的.而Java虚拟机执行过程中再去操作内存.对于C或者C ...

  9. UIView 的 alpha、hidden 和 opaque 属性之间的关系和区别

                     UIView 的 alpha.hidden 和 opaque 属性之间的关系和区别 UIView的这几个属性让我困惑了好一阵子,通过翻看官方文档和stackoverf ...

最新文章

  1. Docker - Tips
  2. c# 添加中文描述 给enum_理解C# 核心概念 – C# 程序集本地化
  3. Java中实现DES加解密的一个类
  4. python获取url文件名_python httplib / urllib获取文件名
  5. 安装翻译_【现象】面对日益增多的外国人 日本安装远程翻译设施
  6. BZOJ2216: [Poi2011]Lightning Conductor
  7. 使用阿里云容器监控服务与第三方监控框架集成搭建自己的容器看板
  8. java中this有什么作用_Java中this有什么用
  9. 电子海图与雷达图像的融合显示
  10. 基于FPGA的四轴运动控制IC设计(verilog)
  11. zktime 协议_ZKTiMe5.0考勤管理系统使用介绍(1.3版).pdf
  12. vim 修改注释颜色 tab键
  13. 近景摄影测量空间后方交会python
  14. 执行git reset --hard后文件的恢复
  15. day2-运算符和分支
  16. 从前后端分离到前后端整合的“退步”(一)项目结构
  17. bootstrap-table表格排序问题
  18. nand读寿命_Nand Flash的擦写次数与使用寿命
  19. python/educoder第4关:综合运用
  20. React 安装 node-sass失败解决方案

热门文章

  1. 【渝粤题库】广东开放大学 文化市场营销 形成性考核 (2)
  2. android studio怎么回退,如何回滚已经commit的代码(Android Studio)
  3. mysql 授权访问_windows开启3306端口并用可视化工具访问远程mysql(授权访问)
  4. nginx php 不能连接mysql_nginx配置php环境,并测试PHP是否可以连接mysql
  5. linux c 多文件编译,Linuxc - 多c文件程序编译执行
  6. Java简单内存解析
  7. 分布式部署_业务模块化打造单体和分布式部署同步支持方案
  8. datastage配置oracle,IBM Datastage8.5配置问题
  9. QT:基本知识(一);
  10. python函数的 全局变量与局部变量