Java集合主要分为Collection和Map两个接口;Collection又分别被List和Set继承;List被AbstractList实现,然后分为3个子类,ArrayList,LinkList和VectorList;Set被AbstractSet实现,又分为2个子类,HashSet和TreeSet;Map被AbstractMap实现,又分为2个子类,HashMap和TreeMap;Map被Hashtable实现。

ArrayList和LinkedList、Vector的区别

ArrayList和LinkedList的区别:

(1)相同点:

LinkedeList和ArrayList都实现了List接口。
ArrayList和LinkedList是两个集合类,用于存储一系列的对象引用(references)。
(2)不同点:

ArrayList底层的实现数组,而LinkedList是双向链表。
ArrayList进行随机访问所消耗的时间是固定的,因此随机访问时效率比较高。
LinkedList是不支持快速的随机访问的,但是在插入删除时效率比较高。

ArrayList和Vector的区别:

(1)相同点:

ArrayList和Vector都是用数组实现的。
默认初始化大小都是10
(2)不同点

Vector多线程是安全的,而ArrayList不是。Vector类中的方法很多有synchronized进行修饰,这样就导致了Vector在效率上无法与ArrayList相比;
两个都是采用的线性连续空间存储元素,但是当空间不足的时候,两个类的增加方式是不同的。(ArrayList每次存储时会检查空间大小,不够时会扩充为原来的1.5倍,Vector会扩充为原来空间的2倍)
原文
https://blog.csdn.net/glpghz/article/details/107581333

HashSet和TreeSet的区别

相同点:单例集合,数据不可重复

不同点1:底层使用的储存数据结构不同:1,Hashset底层使用的是HashMap哈希表结构储存2,而Treeset底层用的是TreeMap树结构储存。不同点2:储存的数据保存唯一方式不用。1,Hashset是通过复写hashCode()方法和equals()方法来保证的。2,而Treeset是通过Compareable接口的compareto方法来保证的。不同点3:hashset无序   Treeset有序

储存原理:

hashset:底层数据结构是哈希表,本质就是哈希值储存。通过判断元素的hashcode方法和equals方法来保证元素的唯一性。当哈希值不同时就直接进行储存。
如果相同,会判断一次equals方式是否返回为true ,如果是true 则视为用的同一个元素,不用再储存。  如果是false,这俄格相同哈希值不同内容的元素会放在同一个桶里(
当哈希表中有一个桶结构,每一个捅都有一个哈希值)Treeset:底层数据结构式一个二叉树,可以对set集合中的元素进行排序,这种结构,可以提高排序性能。根据比较方法的返回值决定的,只要返回的是0,就代表元素重复。

原文
https://blog.csdn.net/qq_42216184/article/details/84026603

HashMap 和 TreeMap 的区别:

原文
https://blog.csdn.net/weixin_43281498/article/details/123434620

Java中的List、Set和Map的各自特征及使用场景:

Java中的集合分为单列集合Collection和双列集合Map。
先通过这张图看看Collection和Map的各自体系。

首先看单列集合Collection中的List及Set的各自特征。
List(有序,可重复)
ArrayList
底层数据结构是数组,查询快,增删慢
线程不安全,效率高
Vector
底层数据结构是数组,查询快,增删慢
线程安全,效率低
LinkedList
底层数据结构是链表,查询慢,增删快
线程不安全,效率高
Set(无序,唯一)
HashSet
底层数据结构是哈希表。
LinkedHashSet
底层数据结构由链表和哈希表组成。
由链表保证元素有序。
由哈希表保证元素唯一。
TreeSet
底层数据结构是红黑树。(是一种自平衡的二叉树)
根据比较的返回值是否是0来决定保证元素唯一性
两种排序方式
自然排序(元素具备比较性)
让元素所属的类实现Comparable接口
比较器排序(集合具备比较性)
让集合接收一个Comparator的实现类对象

接下来是双列集合Map的特征
Map(双列集合)
注:Map集合的数据结构仅仅针对键有效,与值无关。存储的是键值对形式的元素,键唯一,值可重复。
HashMap
底层数据结构是哈希表。线程不安全,效率高
哈希表依赖两个方法:hashCode()和equals()
执行顺序:
首先判断hashCode()值是否相同
是:继续执行equals(),看其返回值
是true:说明元素重复,不添加
是false:就直接添加到集合
否:就直接添加到集合
最终:
自动生成hashCode()和equals()即可
LinkedHashMap
底层数据结构由链表和哈希表组成。
由链表保证元素有序。
由哈希表保证元素唯一。
Hashtable
底层数据结构是哈希表。线程安全,效率低
哈希表依赖两个方法:hashCode()和equals()
执行顺序:
首先判断hashCode()值是否相同
是:继续执行equals(),看其返回值
是true:说明元素重复,不添加
是false:就直接添加到集合
否:就直接添加到集合
最终:
自动生成hashCode()和equals()即可
TreeMap
底层数据结构是红黑树。(是一种自平衡的二叉树)
根据比较的返回值是否是0来决定保证元素唯一性
两种排序方式
自然排序(元素具备比较性)
让元素所属的类实现Comparable接口
比较器排序(集合具备比较性)
让集合接收一个Comparator的实现类对象

那么到底什么时候需要用什么样的集合呢?
画一张图总结下

原文:
https://blog.csdn.net/codest/article/details/120093254

java集合类构造及原理相关推荐

  1. Java集合排序及java集合类详解

    Java集合排序及java集合类详解 (Collection, List, Set, Map) 摘要内容 集合是Java里面最常用的,也是最重要的一部分.能够用好集合和理解好集合对于做Java程序的开 ...

  2. Java 集合类详解

    0.参考文献 http://blog.csdn.net/liulin_good/article/details/6213815 1.java集合类图 1.1 1.2 上述类图中,实线边框的是实现类,比 ...

  3. java集合类深入分析之TreeMap/TreeSet篇

    2019独角兽企业重金招聘Python工程师标准>>> 简介 TreeMap和TreeSet算是java集合类里面比较有难度的数据结构.和普通的HashMap不一样,普通的HashM ...

  4. 【JAVA集合类(大公司面试喜欢问的) 】

    看了一些所谓大公司的JAVA面试问题,发现对于JAVA集合类的使用都比较看重似的,而自己在这方面还真的是所真甚少,抽空也学习学习吧. java.util包中包含了一系列重要的集合类,而对于集合类,主要 ...

  5. Java集合类: Set、List、Map、Queue区别及应用

    Java集合类基本概念 在编程中,常常需要集中存放多个数据.从传统意义上讲,数组是我们的一个很好的选择,前提是我们事先已经明确知道我们将要保存的对象的数量.一旦在数组初始化时指定了这个数组长度,这个数 ...

  6. java 多线程集合操作_多线程中使用Java集合类

    Java集合类中,某个线程在 Collection 上进行迭代时,通常不允许另一个线性修改该 Collection.通常在这些情况下,迭代的结果是不确定的.如果检测到这种行为,一些迭代器实现(包括 J ...

  7. java集合类详细概述

    2019独角兽企业重金招聘Python工程师标准>>> Java集合类   集合中存放的是对象的引用,而非对象本身 ,出于表达上的便利,简称为"集合中的对象". ...

  8. 多线程中使用Java集合类

    Java集合类中,某个线程在 Collection 上进行迭代时,通常不允许另一个线性修改该 Collection.通常在这些情况下,迭代的结果是不确定的.如果检测到这种行为,一些迭代器实现(包括 J ...

  9. [转载] 夯实Java基础系列8:深入理解Java内部类及其实现原理

    参考链接: Java内部类 本系列文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查看 https://github.com/h2pl/Java-Tut ...

最新文章

  1. 它又来了!C**HashMap是如何保证线程安全的?会用不就完了?
  2. 面试官问你MyBatis SQL是如何执行的?把这篇文章甩给他
  3. Andorid应用去google广告
  4. PMCAFF微课堂 | 前猎豹高级产品经理:8大案例讲解猎豹如何做产品
  5. 直播 | WWW 2021论文解读:生成式板块推荐的变分控制和评估
  6. MySQL重要概念图解(重要)
  7. javase中的super、this和protected关键字
  8. python科学计算笔记(十四)pandas数据过滤、清理、转换
  9. spring-boot项目打war包并部署到本地的tomcat容器
  10. ubuntu下使用qemu模拟ARM-----uboot从sd卡启动内核
  11. python归并排序算法实现_排序算法之归并排序(附 Python 与 JS 实现)
  12. 一文读完C语言基础语法
  13. OneDrive更换要同步文件夹
  14. 解决mongodb 取出时是 UTC时间问题
  15. SD卡被写保护怎么解除?
  16. 实力认证!Coremail连续9次入围安全牛《中国网络安全行业全景图》
  17. TI达芬奇系列TMS320DM8148浮点DSP C674x + ARM Cortex-A8高性能视频处理器开发板规格书
  18. Redis介绍与安装
  19. lcn场景模拟演示_演示家庭影院的十大电影场景
  20. 《机器人学导论》学习-01空间描述与变换

热门文章

  1. 替换.DATA的COOKIE突破GS
  2. GPS车辆定位系统功能概述
  3. 独立站站群的模式和运营思路笔记
  4. 集合的所有子集的算法
  5. 基于javaweb的幼儿园网站设计
  6. Python 系列(一)- 收藏集 - 掘金
  7. endnote .enw format 文件格式说明
  8. 医疗器械许可证一类,二类,三类的区别
  9. BP神经网络实现汽油辛烷值预测,《MATLAB源码+数据集》
  10. Sublime Text工具栏隐藏后,怎么重新显现