IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> Java容器 -> 正文阅读

[系统运维]Java容器

关于容器,看这一篇

https://blog.csdn.net/weixin_39960920/article/details/111211130

容器的概念

在Java当中,如果有一个类专门用来存放其它类的对象,这个类就叫做容器,或者就叫做集合,集合就是将若干性质相同或相近的类对象组合在一起而形成的一个整体.java容器类基本上都是在java.util包下,有一个Collection接口,它是Java容器的顶级接口(除了Map),在编辑器中打开Collection接口,然后快捷键(IDEA默认是Ctrl+h)查看该接口的实现类,可以看到在util包下有List、Set和Queue三大接口,Java容器中大部分类都实现了这三大接口中的一个或多个,容器中除了这三大接口,当然还有另一个重要的接口了即Map。因此Java容器的最顶层结构如下图:
在这里插入图片描述

List

List集合是一个线性结构的列表,学过数据结构都知道线性表有两种存储方式即顺序存储(数组)和链式存储(链表),其实List集合正是这种线性结构集合的实现,List是一个有序(元素存入集合的顺序和取出的顺序一致)容器,元素可以重复,可以插入多个null元素,元素都有索引

List集合的实现类:

在这里插入图片描述

List集合子类作用

  • AbstractList
    看类名就能过猜测到该类为一个抽象类,它继承自AbstractCollection类实现了List接口,是 ArrayList 和 AbstractSequentiaList 的父类。内部实现了List的部分方法,同时也提供了Iterator, ListIterator 迭代器的实现类,分别为 Itr, ListItr。ListItr继承自Itr,从某种角度可以视为Itr的扩展。

  • ArrayList
    该类相信大家再熟悉不过,继承自AbstractList抽象类,实现List、RandomAccess等接口,内部是由数组实现,容量大小不固定,元素的顺序和存放的顺序一致,遍历元素可以通过随机读写(RandomAccess)和迭代器(Iterator)两种方式,由于数组的特性,当然RandomAccess方式要由于Iterator。

  • LinkedList
    在List家族,除了对ArrayList非常熟悉之外,估计就到LinkedList了。LinkedList基于双向链表实现,非常适用于数据插入和删除,对数据遍历较慢,和ArrayList恰好相反。

  • Vector
    Vector 和 ArrayList 一样,也是基于数组来实现,区别是Vector是线程安全的,通过源码可以看到Vector很多方法都是使用synchronized来修饰。

  • Stack
    通过类名可以知道该类实现了栈的功能,Stack继承自Vector,因此也是由数组来实现,并且线程安全。

  • CopyOnWriteArrayList
    该类是并发容器(java.util.concurrent)中的类,它的原理是当我们向容器中添加元素的时候,不直接往当前容器添加,而是先将当前容器进行Copy,复制出一个新的容器,然后新的容器里添加元素,添加完元素之后,再将原容器的引用指向新的容器。这样的意义主要在于当并发读取容器内容时不需要加锁,但是写内容的时候需要保证同步并且需要开辟新的内存空间,因此比较适合读多写少的并发场景。

ArrayList的实现用的是数组,LinkedList是基于链表,ArrayList适合查找,LinkedList适合增删

HashMap的原理
所周知,HashMap是用来存储Key-Value键值对的一种集合,这个键值对也叫做Entry,而每个Entry都是存储在数组当中,因此这个数组就是HashMap的主干。
HashMap数组中的每一个元素的初始值都是NULL 1.Put方法的实现原理
HaspMap的一种重要的方法是put()方法,当我们调用put()方法时,比如hashMap.put(“Java”,0),此时要插入一个Key值为“Java”的元素,这时首先需要一个Hash函数来确定这个Entry的插入位置,设为index,即
index = hash(“Java”),假设求出的index值为2,那么这个Entry就会插入到数组索引为2的位置。
但是HaspMap的长度肯定是有限的,当插入的Entry越来越多时,不同的Key值通过哈希函数算出来的index值肯定会有冲突,此时就可以利用链表来解决。
其实HaspMap数组的每一个元素不止是一个Entry对象,也是一个链表的头节点,每一个Entry对象通过Next指针指向下一个Entry对象,这样,当新的Entry的hash值与之前的存在冲突时,只需要插入到对应点链表即可。
需要注意的是,新来的Entry节点采用的是“头插法”,而不是直接插入在链表的尾部,这是因为HashMap的发明者认为,新插入的节点被查找的可能性更大。
2.Get方法的实现原理 get()方法用来根据Key值来查找对应点Value,当调用get()方法时,比如hashMap.get(“apple”),这时同样要对Key值做一次Hash映射,算出其对应的index值,即index
= hash(“apple”)。 前面说到的可能存在Hash冲突,同一个位置可能存在多个Entry,这时就要从对应链表的头节点开始,一个个向下查找,直到找到对应的
Key值,这样就获得到了所要查找的键值对。 例如假设我们要找的Key值是"apple":
第一步,算出Key值“apple”的hash值,假设为2。
第二步,在数组中查找索引为2的位置,此时找到头节点为Entry6,Entry6的Key值是banana,不是我们要找的值。
第三步,查找Entry6的Next节点,这里为Entry1,它的Key值为apple,是我们要查找的值,这样就找到了对应的键值对

List:一个有序(元素存入集合的顺序和取出的顺序一致)容器,元素可以重复,可以插入多个null元素,元素都有索引。常用的实现类有
ArrayList、LinkedList 和 Vector。

Set:一个无序(存入和取出顺序有可能不一致)容器,不可以存储重复元素,只允许存入一个null元素,必须保证元素唯一性。Set
接口常用实现类是 HashSet、LinkedHashSet 以及 TreeSet。

Map是一个键值对集合,存储键、值和之间的映射。Key无序,唯一;value
不要求有序,允许重复。Map没有继承于Collection接口,从Map集合中检索元素时,只要给出键对象,就会返回对应的值对象。

Map 的常用实现类:HashMap、TreeMap、HashTable、LinkedHashMap、ConcurrentHashMap

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2022-02-09 21:08:06  更:2022-02-09 21:09:00 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/16 6:03:28-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码