首页 > 编程语言 >Java笔记积累—集合

Java笔记积累—集合

时间:2022-09-19 23:14:03浏览次数:86  
标签:Map Java HashMap 笔记 链表 数组 集合 LinkedHashMap

在 Java 中除了以 Map 结尾的类之外,其他类都实现了 Collection 接⼝。并且以Map结尾的类都实现了Map接⼝

 

List,Set,Map 三者的区别?

  • List (对付顺序的好帮⼿): 存储的元素是有序的、可重复的。
  • Set (注重独⼀⽆⼆的性质): 存储的元素是⽆序的、不可重复的。
  • Map (⽤ Key 来搜索的专家): 使⽤键值对(kye-value)存储,类似于数学上的函数 y=f(x),“x”代表 key,"y"代表 value,Key 是⽆序的、不可重复的,value 是⽆序的、可重复的,每个键最多映射到⼀个值。 

集合框架底层数据结构总结
先来看⼀下 Collection 接⼝下⾯的集合
List

  • Arraylist : Object[] 数组
  • Vector : Object[] 数组
  • LinkedList : 双向链表(JDK1.6 之前为循环链表,JDK1.7 取消了循环)

Set

  • HashSet (⽆序,唯⼀): 基于 HashMap 实现的,底层采⽤ HashMap 来保存元素
  • LinkedHashSet : LinkedHashSet 是 HashSet 的⼦类,并且其内部是通过LinkedHashMap 来实现的。有点类似于我们之前说的 LinkedHashMap 其内部是基于HashMap 实现⼀样,不过还是有⼀点点区别的
  • TreeSet (有序,唯⼀): 红⿊树(⾃平衡的排序⼆叉树)

再来看看 Map 接⼝下⾯的集合
Map

  • HashMap : JDK1.8 之前 HashMap 由数组+链表组成的,数组是 HashMap 的主体,链表则是主要为了解决哈希冲突⽽存在的(“拉链法”解决冲突)。JDK1.8 以后在解决哈希冲突时有了较⼤的变化,当链表⻓度⼤于阈值(默认为 8)(将链表转换成红⿊树前会判断,如果当前数组的⻓度⼩于 64,那么会选择先进⾏数组扩容,⽽不是转换为红⿊树)时,将链表转化为红⿊树,以减少搜索时间
  • LinkedHashMap : LinkedHashMap 继承⾃ HashMap ,所以它的底层仍然是基于拉链式散列结构即由数组和链表或红⿊树组成。另外, LinkedHashMap 在上⾯结构的基础上,增加了⼀条双向链表,使得上⾯的结构可以保持键值对的插⼊顺序。同时通过对链表进⾏相应的操作,实现了访问顺序相关逻辑。
  • Hashtable : 数组+链表组成的,数组是 HashMap 的主体,链表则是主要为了解决哈希冲突⽽存在的
  • TreeMap : 红⿊树(⾃平衡的排序⼆叉树)

标签:Map,Java,HashMap,笔记,链表,数组,集合,LinkedHashMap
From: https://www.cnblogs.com/dork-h/p/16709456.html

相关文章

  • Java子方法中static去掉之后的报错
    importjava.util.Arrays;importjava.util.Random;publicclassac{ publicstaticvoidmain(Stringargs[]){ System.out.println("Thesquareofinteg......
  • Java中的SPI原理浅谈
    在面向对象的程序设计中,模块之间交互采用接口编程,通常情况下调用方不需要知道被调用方的内部实现细节,因为一旦涉及到了具体实现,如果需要换一种实现就需要修改代码,这违......
  • java学习
    1.基本规范每个java文件只能有一个publicclass,且类名要与文件名相同文件调用的是publicstaticvoidmain(String[]args)函数类名(文件名)首字母大写,函数名单个单词......
  • CSS的复习笔记
    css:-层叠样式表-网页实际上是一个多层的结构,通过css可以分别为网页的每一个层来设置样式而最终我们能看到只是网页的最上边一层-总之一句话,css用来设置网页中元素的样式。......
  • JavaScript 函数定义
    https://m.runoob.com/js/js-function-definition.html JavaScript使用关键字function定义函数。函数可以通过声明定义,也可以是一个表达式。函数声明在之前的教......
  • Linux运维笔记[3]-部署数据分析框架
    部署jupyterDocker部署JupyterbookJupyterDockerStacksareasetofready-to-runDockerimagescontainingJupyterapplicationsandinteractivecomputingtoo......
  • jenv for windows[快速切换windows java版本]
    一直以来,切换java版本一直是令我头疼的问题,一开始我的解决办法太蠢了,将所有需要高版本java的软件装在一台虚拟机中,所有低版本java的软件装在一台虚拟机中。但显然,这样并不......
  • Java中如何遍历字符串呢?
    字符串是程序开发中我们见的最多的一种数据类型对字符串的操作,也是我们日常涉及的最多的一种操作方式,那么如何遍历字符串为字符并输出呢?下面笔者讲述三种操作方式,如下所......
  • JavaScript合并多个数组
    工作中经常会对数组进行合并,稍微总结一下常用的方法:concatJavaScript原生自带的函数,用法如下:letarr1=[3,5,7];letarr2=[4,78,79];letarr3=[];arr3=......
  • JavaEE企业级应用开发教程 pdf
    高清扫描版下载链接:https://pan.baidu.com/s/19awdYpedqslkeYxfU6YSYQ点击这里获取提取码 ......