一、集合组成

  java集合主要由Map和Collection组成,Collection主要类图如下(图片来源于网络,懒得画图):

  从上图中能很明显的看出来Collection下主要是Set、List和Queue,上图主要涉及Set和List,某些不常用的集合,比如Queue还有ArrayDeque、PriorityQueue等实现类,Vector子类Stack,Set下EnumSet也未见展示

  Map接口主要类图如下

Map主要分为了HashMap、Hashtable、TreeMap,另外的WeakHashMap等应用场景不多,ConcurrentHashMap等属于java.util.concurrent下子类,Map中IdentityHashMap和EnumMap等未见展示

二、常用场景:

Java常用集合一般适用场景:

Collection

Collection是最基本的集合接口,一个Collection代表一组Object的集合,这些Object被称作Collection的元素。Collection是一个接口,用以提供规范定义,不能被实例化使用。

Collection继承了Iterable接口,实现这个Iterable接口的对象允许使用foreach进行遍历,也就是说,所有的Collection集合对象都具有"foreach可遍历性"。这个Iterable接口只有一个方法: iterator(java8之后多了forEach和Spliterator两个default方法,在此不多展开),它返回一个代表当前集合对象的泛型<T>迭代器,用于之后的遍历操作

List:List集合代表一个元素有序、可重复的集合,集合中每个元素都有其对应的顺序索引。List集合允许加入重复元素,因为它可以通过索引来访问指定位置的集合元素。List集合默认按元素的添加顺序设置元素的索引

ArrayList:类似一个长度可变的数组 ,它封装了一个动态的增长的、允许再分配的Object[]数组。适合查询,不适合增删

LinkedList:底层是双向循环链表,实现List接口,能对它进行队列操作,即可以根据索引来随机访问集合中的元素。同时它还实现Deque接口,即能将LinkedList当作双端队列使用,自然也可以被当作"栈来使用"。适合增删,不适合查询。

Vector:Vector和ArrayList在用法上几乎完全相同,线程安全

Stack:Stack是Vector提供的一个子类,用于模拟"栈"这种数据结构(LIFO后进先出)

Set:元素无序,不可重复,Set判断两个对象相同不是使用"=="运算符,而是根据equals方法。也就是说,我们在加入一个新元素的时候,如果这个新元素对象和Set中已有对象进行注意equals比较都返回false,则Set就会接受这个新元素对象,否则拒绝。

HashSet:根据对象的哈希值确定元素在集合中的位置

LinkedHashSet:LinkedHashSet集合也是根据元素的hashCode值来决定元素的存储位置,但和HashSet不同的是,它同时使用链表维护元素的次序,这样使得元素看起来是以插入的顺序保存的。当遍历LinkedHashSet集合里的元素时,LinkedHashSet将会按元素的添加顺序来访问集合里的元素

TreeSet: 实现了对集合中的元素排序

Map:双列集合的根接口,用于存储具有键(key)、值(value)映射关系的元素,不能出现重复的键key,即同一个Map对象的任何两个key通过equals方法比较结果总是返回false。

HashMap:用于存储键值映射关系,两个key通过equals()方法比较返回true、同时两个key的hashCode值也必须相等

LinkedHashMap:LinkedHashMap也使用双向链表来维护key-value对的次序,该链表负责维护Map的迭代顺序,与key-value对的插入顺序一致(注意和TreeMap对所有的key-value进行排序进行区

分)

TreeMap:TreeMap可以保证所有的key-value对处于有序状态。

Hashtable:不常用,线程安全的hashmap,性能不及ConcurrentHashMap

Queue:Queue用于模拟"队列"这种数据结构(先进先出 FIFO)。队列的头部保存着队列中存放时间最长的元素,队列的尾部保存着队列中存放时间最短的元素。新元素插入(offer)到队列的尾部,访问元素(poll)操作会返回队列头部的元素,队列不允许随机访问队列中的元素

PriorityQueue:PriorityQueue并不是一个比较标准的队列实现,PriorityQueue保存队列元素的顺序并不是按照加入队列的顺序,而是按照算法优先级进行重新排序

Deque:Deque接口代表一个"双端队列",双端队列可以同时从两端来添加、删除元素,因此Deque的实现类既可以当成队列使用、也可以当成栈使用

三、常见问题

Collection 和 Collections 的区别

  Collection是java.util下的接口,它是各种集合结构的父接口,继承于它的接口的主要有set和List,提供关于集合的一些操作,比如插入、删除、判断一个元素是否是其成员,遍历等

Collections是java.util下的类,是针对集合类的一个工具类,提供一系列静态方法,实现对集合的查找、排序、替换等操作

java基础详解-集合的更多相关文章

  1. Java基础详解

    从写Java系列的第一篇到现在已经三个月了,因为在网络上或书籍中没有见到一些很适合初学者的学习流程,所以下决心自己写一写,也当作回顾一下Java的知识.网上有许多Java教程之类的内容,都是从概念起步 ...

  2. 【java】详解集合

    目录结构: contents structure [-] 集合概述 什么是集合 Collection和Map的区别 List和Set的区别 ArrayList和LinkedList的区别 HashSe ...

  3. java基础:详解类和对象,类和对象的应用,封装思想,构造方法详解,附练习案列

    1. 类和对象 面向对象和面向过程的思想对比 : 面向过程 :是一种以过程为中心的编程思想,实现功能的每一步,都是自己实现的 面向对象 :是一种以对象为中心的编程思想,通过指挥对象实现具体的功能 1. ...

  4. Java基础详解 (一)Java的类成员访问权限修饰词(以及类访问权限)

    在一个类的内部,其成员(包括成员变量和成员函数)能否被其他类所访问,取决于该成员的修饰词.Java的类成员访问权限修饰词有四类:private,无(默认情况下),protected和public.其权 ...

  5. java继承基础详解

    java继承基础详解 继承是一种由已存在的类型创建一个或多个子类的机制,即在现有类的基础上构建子类. 在java中使用关键字extends表示继承关系. 基本语法结构: 访问控制符 class 子类名 ...

  6. java封装基础详解

    java封装基础详解 java的封装性即是信息隐藏,把对象的属性和行为结合成一个相同的独立单体,并尽可能地隐藏对象的内部细节. 封装的特性是对属性来讲的. 封装的目标就是要实现软件部件的"高 ...

  7. 【Java_基础】Java内部类详解

    1.四种内部类 java中的四种内部类:成员内部类.静态内部类.局部内部类和匿名内部类.其中匿名内部类用到的最多. 1.1.成员内部类 若一个类定义在另一个类的内部作为实例成员,我们把这个作为实例成员 ...

  8. Java面向对象详解

    Java面向对象详解 前言:接触项目开发也有很长一段时间了,最近开始萌发出想回过头来写写以前学 过的基础知识的想法.一是原来刚开始学习接触编程,一个人跌跌撞撞摸索着往前走,初学的时候很多东西理解的也懵 ...

  9. javaScript基础详解(1)

    javaScript基础详解 首先讲javaScript的摆放位置:<script> 与 </script> 可以放在head和body之间,也可以body中或者head中 J ...

随机推荐

  1. Kubernets二进制安装(7)之部署主控节点服务--apiserver二进制安装

    kube-apiserver集群规划 主机名 角色 IP地址 mfyxw30.mfxyw.com kube-apiserver主 192.168.80.30 mfyxw40.mfyxw.com kub ...

  2. leetcode 22. 括号生成 dfs

    先思考符合要求的串是什么样子的 任意时刻,(数量大于),且最后(==)==n即可 考虑下一个加入string的字符时(或者)即可 dfs class Solution { public: vector ...

  3. Sublime text 3 中 Package Control安装

    安装前 ctrl+shift+p  在命令板中输入PC,如下图表示没安装: 使用ctrl+~调出sublime软件的控制台命令窗口:粘贴运行 import urllib.request,os,hash ...

  4. postman skills

    postman skills variables https://learning.postman.com/docs/sending-requests/variables/ https://learn ...

  5. CSS pseudo element All In One

    CSS pseudo element All In One CSS 伪元素 https://developer.mozilla.org/en-US/docs/Web/CSS/Pseudo-elemen ...

  6. HTML5 Canvas in Action

    HTML5 Canvas in Action canvas 图片处理 视频编辑工具 xgqfrms 2012-2020 www.cnblogs.com 发布文章使用:只允许注册用户才可以访问!

  7. 人物传记-BILL RAY:低谷时的信念,决定你能走多远

    自2018年全球经济危机以来,以工作为重的成年人们一直备受打击.尤其是2020年,全球贸易争端使得经济下滑严重,很多公司倒闭破产,有些人甚至从富豪变成了负债者,走向了人生低谷.其实,每个人都会遇到人生 ...

  8. 新手如何通过内存和NGK DeFi Baccarat进行组合投资?

    区块链市场在2020年迎来了大爆发,资本市场异常火热.无论是内存,还是DeFi,都无疑是这个火爆的区块链市场中的佼佼者.通过投资内存和DeFi,很多投资者都已经获取了非常可观的收益,尝到了资本市场带来 ...

  9. PAUL ADAMS ARCHITECT:日本楼市仍保持稳定

    日本国土交通省从2008年11月开始,到2020年10月,连续追踪日本的公寓房价和日经指数两个数值的变动关联性,结果显示相关系数是0.935,也就是说在此期间,日本楼市和股市有着非常强的正相关. 保罗 ...

  10. ROS1与ROS2对比简述

    资料参考: https://blog.csdn.net/Fourier_Legend/article/details/106319000