首页 > 编程语言 >韩顺平java基础-14-集合

韩顺平java基础-14-集合

时间:2024-02-28 17:35:04浏览次数:25  
标签:Map 遍历 java 14 HashSet value key 底层 顺平

韩顺平java基础-14-集合

集合介绍

理解

好处

框架体系图

主要有两组

Collection(单列集合)\Map(双列集合)


Collection

Collection通用

方法

遍历

迭代器遍历

iterator 底层原理:

hasNext()

快捷键:ctrl + j

增强for循环

本质仍然是iterator

在集合和数组中均可以使用


List

通用

接口

  1. 添加顺序与取出顺序一致,且可以重复
  2. 每个元素都有对应的顺序索引,且可以通过索引取出

常用方法

三种遍历

  1. iterator迭代器遍历
  2. 增强for循环
  3. 普通for循环(把list当作普通数组遍历)

LinkedList、Vector原理同List一致


ArrayList

扩容机制

  1. 无参构造器 初始大小为10 而后扩容为1.5倍
  2. 指定大小构造器 扩容为1.5倍

底层源码


Vector

扩容机制

  1. 无参构造器 初始大小为10 而后扩容为2倍
  2. 指定大小构造器 扩容为2倍

LinkedList

底层结构

  1. 底层是双向链表
  2. 维护两个属性 first和last 分别指向 首节点和尾节点
  3. 每个结点(Node),里面维护了prev、next、item三个属性
  4. LinkedList的添加和删除,不是通过数组实现,相对来说效率较高

ArrayList和LinkedList的比较

  1. ArrayList改查效率高
  2. LinkedList增删效率高
  3. 也可以根据业务灵活选择

Set

通用


HashSet

特点

  1. HashSet实现了Set接口,实际上是HashMap

  2. 可以存放null,但是只能有一个null

  3. 不保证元素是有序的

  4. 不能有重复元素

不能添加相同的元素 说明:

HashSet的底层机制

HashSet的底层是HashMap,HashMap的底层是(数组 + 链表 + 红黑树)

HashSet扩容机制

每向hashset增加一个元素,数组就会加一


LinkedHashSet

基础

  1. LinkedHashSet是HashSet的子类
  2. 维护了一个hash表和双向链表,在遍历时可以确保插入顺序和遍历顺序一致
  3. LinkedHashSet有head和tail,每一个节点有before和after属性,形成双向链表

源码分析

  1. LinkedHashSet底层维护的是LinkedHashMap
  2. LinkedHashMap$Entry 继承--> HashMap$Node

Map

接口特点

  1. Map与Collection并列存在,保存具有映射关系的数据:key - Value(双列元素)Collection中value存放常量PRESENT
  2. Map中的key和value可以是任何引用类型的数据,会封装到HashMap$Node对象中
  3. Map中的key不允许重复,而value可以重复(key相当于Map中的索引,key-value是一一对应的关系,通过key就可以找到value(get()))
  4. Map的key和value可以为null
  5. 常用String类作为Map的key

标签:Map,遍历,java,14,HashSet,value,key,底层,顺平
From: https://www.cnblogs.com/forest-pan/p/18041178

相关文章

  • javaweb01-html&css
    HTML-CSS基础介绍html:超文本标记语言学习标签css:层叠样式表学习样式基础标签&样式-新浪新闻biao标题标题排版(标签介绍)标题标签h1、h2水平线标签hr图片标签img超链接a标题样式css引入方式:行内样式:内嵌样式:外联样式:<link颜色表示形式:关键字:redrbg表示法:#rgb(......
  • javaweb02-JavaScript&vue
    JavaScript控制网页行为js引入方式内部脚本:script标签外部脚本:js文件js基础语法书写语法区分大小写每行结尾分号可有可无,建议写上输出语句警告框window.alerthtml输出document.write浏览器控制台console.log变量用var关键字声明变量JavaScript是一......
  • 2024.2.14
    HomeView.vue<template><el-containerstyle="min-height:100vh"><el-asidewidth="sideWidth+'px'"style="background-color:rgb(255,255,255)"><!--width="sideWidth+'px'&......
  • Java面向对象之内部类的几类使用场景
    介绍Java内部类是一种特殊的类,它定义在另一个类的内部。内部类提供了许多有用的特性,包括访问外部类的私有成员、隐藏实现细节以及实现回调接口等。以下是Java内部类的一些常用场景及其举例说明:回调接口当某个类需要一个对象来执行其方法时,通常可以使用回调接口。这时,内部类可以......
  • 题解 NKOJ2929 【[THUSC2014] 函数求解】
    代码:#include<iostream>#include<queue>#include<cstdio>#include<cmath>usingnamespacestd;typedefstruct{ intnxt; intend; intdis; doublecost;}Edge;constintN=2e3,M=400+7,K=80800+7;constdoubleep......
  • java远望,第一次触摸
    AboutJAVAJDkjavadevelopmentkit卸载JDK删除java的安装目录删除环境变量的JAVA_HOME删除path下关于java的目录cmd查看java-version安装JDK百度搜索JDK8同意协议下载对应电脑版本双击安装JDK记住安装路径配置环境变量1.此电脑->右键->属性2.环境变量->新建-......
  • 2.14
    packagecom.example.myapplication;importandroid.content.Context;importandroid.view.LayoutInflater;importandroid.view.View;importandroid.view.ViewGroup;importandroid.widget.BaseAdapter;importandroid.widget.TextView;importjava.util.List;p......
  • Python会超越Java吗
    与Java相比,PythonPython和Java,作为各自领域的领导者,他们的力量在工程界和开发者社区不断被讨论。Python因其简洁的语法和快速的开发而被广泛应用于数据分析、人工智能、网络爬虫等领域。Java在企业级应用、安卓应用开发和大型系统建设中占有重要地位,具有强大的类型和面向对象的特......
  • Hudi-FlinkSQL导入数据报错:[ERROR] Could not execute SQL statement. Reason: java.l
    问题描述通过FlinkSQL创建Hudi表后,向表中插入数据报错:[ERROR]CouldnotexecuteSQLstatement.Reason:java.lang.ClassNotFoundException:org.apache.hadoop.fs.FSDataInputStream 解决办法向Hudi表中写入数据时,会调用Hadoop的Jar包,但是Flink的lib目录中没有该Jar包。......
  • JAVA基础
    基础知识常用快捷键Ctrl+A:全选Ctrl+X:剪切Ctrl+Z:撤销Ctrl+Z:撤销Ctrl+S:保存Alt+F4:关闭窗口Shift+Delete:永久删除win+E:文件资源管理器Alt+Alt:切换界面Win+Rcmd:控制台(若以管理员身份运行,则右击)Ctrl+D:复制当前行到下一行常用Dos命令(cmd)#盘符切换#查看当前目录下的所......