Java集合(Collection+Map)

Java集合(Collection+Map)

    • 为什么要使用集合?
    • 泛型 <>
    • 集合框架
    • 单列集合Collection
      • Collection遍历方式
      • List:有序、可重复、有索引
        • ArrayList
        • LinkedList
        • Vector(已经淘汰,不会再用)
      • Set:无序、不重复、无索引
        • HashSet
          • LinkedHashSet
        • TreeSet
    • 双列集合Map
      • HashMap
        • LinkedHashMap
      • HashTable(后续补充)
        • Properties
      • TreeMap
    • Collections 集合工具类

来自黑马,把视频截图保存,主要为了自己方便查找。

为什么要使用集合?

当有很多数据需要存储时,会想到用数组,而数组需要在定义时指定长度,而我们希望有一个可变长度的容器——集合。
集合可以自动扩容,提高了数据存储的灵活性,Java 集合不仅可以用来存储不同类型不同数量的对象,还可以保存具有映射关系的数据。
在这里插入图片描述

泛型 <>

在这里插入图片描述

集合框架

在这里插入图片描述

红色表示接口,蓝色表示实现类:
在这里插入图片描述
在这里插入图片描述
键和值之间一一对应。键值对也成为键值对对象,或者是Entry对象。
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

单列集合Collection

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在Java里面,字符串已经重写好了equals方法。

在这里插入图片描述

Collection遍历方式

以前的普通的for循环的遍历方式适用于有索引的list系列,而没有索引的set系列不能用。

1. 迭代器遍历
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

2. 增强for遍历
在这里插入图片描述
在这里插入图片描述
3. lambda表达式遍历
在这里插入图片描述
一行搞定:
在这里插入图片描述

List:有序、可重复、有索引

在这里插入图片描述

  • 添加元素:添加完之后,原来索引上的元素会依次后移。
  • 删除元素:下面第一个会删除1索引,第二个装箱了,会删除“1”
    在这里插入图片描述

独有的遍历方式: 继承了Collection的遍历方式。

  1. 迭代器
  2. 增强for
  3. Lambda表达式
  4. 普通for循环(因为List集合存在索引)
    在这里插入图片描述
  5. 列表迭代器遍历
    在这里插入图片描述
    总结:
    在这里插入图片描述
ArrayList

在这里插入图片描述

输出是 []

在这里插入图片描述

import java.util.*;
public class Main {public static void main(String[] args) {//1.创建一个集合ArrayList<String> list = new ArrayList<>();System.out.println(list);  //[]//2.添加元素: 对于add方法,在ArrayList里面,不管添加什么,都会返回true
//        boolean result = list.add("aaa");
//        System.out.println(result);  //true
//        System.out.println(list);  //[aaa]// 所以一般直接添加元素就行,不用管返回值list.add("aaa");list.add("bbb");list.add("ccc");System.out.println(list);  //[aaa, bbb, ccc]//3.删除元素list.remove("aaa");System.out.println(list);  //[bbb, ccc]String str = list.remove(0);  //这里也可以不接收返回值,直接list.remove(0)System.out.println(str);  //bbbSystem.out.println(list);  //[ccc]//4.修改元素String str1 = list.set(0, "ddd");System.out.println(str1);  //ccc,返回被覆盖的元素System.out.println(list);  //[ddd],结果就是覆盖以后的//5.查询元素String str2 = list.get(0);System.out.println(str2);  //ddd,获取单个元素//遍历list.add("eee");list.add("fff");for (int i = 0; i < list.size(); i++) {System.out.println(list.get(i));  //依次输出ddd eee fff}System.out.println(list);  //[ddd, eee, fff],直接打印就是集合}
}
LinkedList

在这里插入图片描述
我们在项目中一般是不会使用到 LinkedList 的,需要用到 LinkedList 的场景几乎都可以使用 ArrayList 来代替,并且,性能通常会更好!就连 LinkedList 的作者约书亚 · 布洛克(Josh Bloch)自己都说从来不会使用 LinkedList 。

另外,不要下意识地认为 LinkedList 作为链表就最适合元素增删的场景。我在上面也说了,LinkedList 仅仅在头尾插入或者删除元素的时候时间复杂度近似 O(1),其他情况增删元素的时间复杂度都是 O(n) ,因为需要从头或尾开始寻找!

Vector(已经淘汰,不会再用)

Set:无序、不重复、无索引

在这里插入图片描述

set遍历:
在这里插入图片描述

首先添加元素,如果是第一次添加,返回True,第二次就不行了,返回False:
在这里插入图片描述

遍历:
在这里插入图片描述

HashSet

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
加载因子表示的是扩容时机,当数组里面的元素到了16*0.75=12个的时候,数组长度就加倍,变成了32。而当链表长度大于8而且数组长度大于等于64,就会自动编程红黑树:
在这里插入图片描述

了解了底层原理,就可以回答HashSet的问题:
在这里插入图片描述
如图所示,读取的顺序是图中的123456,但是存的顺序就不一定了。

问题2:HashSet为什么没有索引?
图中1索引对应的位置有好几个元素,不好区分,所以干脆无索引。

问题3:HashSet是利用什么机制保证数据去重的?
用HashCode方法和equals方法,所以如果集合中存储的是自定义对象(如Student),一定要根据对象的属性重写这两个方法,要不然就会比较地址值!

这里为什么会强调自定义对象要重写:如果存储的是基本数据类型的包装类,已经正确地重写了hashCode()和equals()方法。对于 Java 标准库中的许多类(如String),也已经合理地重写了hashCode()和equals()方法。

LinkedHashSet

在这里插入图片描述
在这里插入图片描述
添加进去的1和2,2和3,3和4……两两之间有双向链表,互相记录地址值。遍历的时候也是从1开始遍历。
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

TreeSet

在这里插入图片描述

在这里插入图片描述
如果字符串里面字母很多,那就从第一个字母开始比较:
“aaa” > “ab” > “aba” > “cd” > “qwer”

双列集合Map

在这里插入图片描述
①添加
在这里插入图片描述
在这里插入图片描述

②删除
在这里插入图片描述
在这里插入图片描述

Map的三种遍历方式:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

HashMap

在这里插入图片描述
在这里插入图片描述
存储的时候只比较的属性值,如果一样,就要覆盖,这一点和Set不同(Set是不存)! 这就是put里面覆盖的功能!
在这里插入图片描述

  1. HashMap底层是哈希表结构的
  2. 依赖hashCode方法和equals方法保证键的唯一
  3. 如果存储的是自定义对象,需要重写hashCode和equals方法
    如果存储自定义对象,不需要重写hashCode和equals方法
LinkedHashMap

在这里插入图片描述
在这里插入图片描述

HashTable(后续补充)

Properties

TreeMap

在这里插入图片描述

在这里插入图片描述
这样直接输出已经是升序,如果要降序:
在这里插入图片描述

Collections 集合工具类

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/472467.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python学习------第八天

函数 函数的传入参数 掌握函数返回值的作用 掌握函数返回值的定义语法 函数的嵌套调用&#xff1a; 函数的局部变量和全局变量 局部变量的作用&#xff1a;在函数体内部&#xff0c;临时保存数据&#xff0c;即当函数调用完成后&#xff0c;则销毁局部变量。 money 5000000 n…

reduce-scatter:适合分布式计算;Reduce、LayerNorm和Broadcast算子的执行顺序对计算结果的影响,以及它们对资源消耗的影响

目录 Gather Scatter Reduce reduce-scatter:适合分布式计算 Reduce、LayerNorm和Broadcast算子的执行顺序对计算结果的影响,以及它们对资源消耗的影响 计算结果理论正确性 资源消耗方面 Gather 这个也很好理解,就是把多个进程的数据拼凑在一起。 Scatter 不同于Br…

C++- 基于多设计模式下的同步异步日志系统

第一个项目:13万字,带源代码和详细步骤 目录 第一个项目:13万字,带源代码和详细步骤 1. 项目介绍 2. 核心技术 3. 日志系统介绍 3.1 为什么需要⽇志系统 3.2 ⽇志系统技术实现 3.2.1 同步写⽇志 3.2.2 异步写⽇志 4.知识点和单词补充 4.1单词补充 4.2知识点补充…

Node.js GET/POST请求、WEB模块使用介绍 (基础介绍 八)

GET/POST请求 在很多场景中&#xff0c;我们的服务器都需要跟用户的浏览器打交道&#xff0c;如表单提交。 表单提交到服务器一般都使用 GET/POST 请求。 本章节我们将为大家介绍 Node.js GET/POST请求。 获取GET请求内容 由于GET请求直接被嵌入在路径中&#xff0c;URL是…

字节青训-小M的多任务下载器挑战、版本号比较

目录 一、小M的多任务下载器挑战 题目背景 题目内容 数据输入 数据输出 数据与约定 示例1 示例2 解题思路&#xff1a; 问题理解 数据结构选择 算法步骤 最终代码&#xff1a; 运行结果&#xff1a; 二、版本号比较 问题描述 样例 示例 1: 示例 2: 示例 3:…

jenkins用户在执行scp的时候如何做免密登录

一、背景 在jenkins job中执行scp的shell命令&#xff0c;当然不希望每次输入密码&#xff0c;另外处于出于安全考虑&#xff0c;也不建议在scp命令中指定。 所以&#xff0c;我们需要对远程机器进行免密登录。 本文遇到的问题是&#xff0c;在jenkins机器上执行scp已做到了…

Prometheus监控SQL SERVER常用指标和PromQL预警

SQL Server是企业级广泛应用的数据库&#xff0c;通过简单的Prometheus exportor可以很容易地监控它。与所有数据库一样&#xff0c;SQL Server也有许多故障点&#xff0c;例如事务延迟或数据库中连接过多。本文介绍如何使用Prometheus监视SQL Server&#xff0c;包括常用的监控…

HTML5实现俄罗斯方块小游戏

文章目录 1.设计来源1.1 主界面1.2 皮肤风格1.2 游戏中界面1.3 游戏结束界面 2.效果和源码2.1 动态效果2.2 源代码 源码下载 作者&#xff1a;xcLeigh 文章地址&#xff1a;https://blog.csdn.net/weixin_43151418/article/details/143788449 HTML5实现俄罗斯方块小游戏&#x…

从北美火到中国,大数据洞察品牌“STANLEY”的突围之路

保守直筒大头的“硬汉”外形&#xff0c;以百变颜色踩中时尚命脉&#xff0c;与各路大牌“梦幻联动”&#xff0c;不少时尚弄潮儿没能逃过其“真香”诱惑。 这就是今年以来从北美火到中国的STANLEY&#xff0c;在“巨无霸”水杯中突围出属于自己的一条路。 最近STANLEY又整活…

linux逻辑卷练习

目录 知识点&#xff1a; 常用命令 题目&#xff1a; 解题&#xff1a; 1&#xff09;分区 2&#xff09;创建物理卷 3&#xff09;创建卷组 4&#xff09;生成逻辑卷 "要带参数 -n" 5&#xff09;扩容 6&#xff09;格式化(添加文件系统) 7&#xff09;挂…

java版嘎嘎快充汽车单车充电系统源码系统jeecgboot

汽车使用云快充1.6 1.5协议&#xff0c;单车用的铁塔协议 前端uniapp、后端jeecgbootvue2

【Vitepress报错】Error: [vitepress] 8 dead link(s) found.

原因 VitePress 在编译时&#xff0c;发现 死链接(dead links) 会构建失败&#xff01;具体在哪我也找不到… 解决方案 如图第一行蓝色提示信息&#xff0c;设置 Vitepress 属性 ignoredeadlinks 为 true 可忽略报错。 .vuepress/config.js export default defineConfig(…

《Django 5 By Example》阅读笔记:p105-p164

《Django 5 By Example》学习第5天&#xff0c;p105-p164总结&#xff0c;总计60页。 一、技术总结 1.文章标签功能 Django自带django-taggit。 2.自定义template tags 3.roadmap功能 4.RSS功能 5.full-text搜索功能 这里使用的是Postgresql,使用pip install psycopg安…

awk(常用)

这个有点难 O.o 一、awk # 语法 awk 参数 模式 {动作} 文件# 第一列&#xff0c;包含p的 $1~"p" # 第一列&#xff0c;不包含p的 $1!~"p" # 开始时干嘛&#xff0c;结束时干嘛 awk BEGIN{开始时做的事}END{结束时做的事}{print $0} 文件 1、内置变量&…

数据结构—栈和队列

目录 1.栈底层结构的选择 2.栈的实现 3.栈 3.1入栈 3.2出栈 3.3栈顶删除 4.队列 4.1队列介绍 4.2队列初始化 4.3入队列 4.4队头删除 1.栈底层结构的选择 栈是一种数据结构 具有“后进先出的”的特点 现在面临的两种选择&#xff0c;一种是顺序表&#xff0c;另一种…

安装paddle

网址&#xff1a;飞桨PaddlePaddle-源于产业实践的开源深度学习平台 或者找对应python和cuda版本的paddle下载后安装&#xff1a; https://www.paddlepaddle.org.cn/whl/linux/mkl/avx/stable.html 你想要安装paddlepaddle - gpu2.6.1.post112版本。在你提供的文件列表中&am…

【解决】Layout 下创建槽位后,执行 Image 同步槽位位置后表现错误的问题。

开发平台&#xff1a;Unity 6.0 编程语言&#xff1a;CSharp 编程平台&#xff1a;Visual Studio 2022   一、问题背景 | 开发库存系统 图1 位置同步失败问题 图2 位置正常同步效果表现 黑框 作用于 UnityEngine.UI.GridLayoutGruop&#xff0c;形成 4x6 布局&#xff0c;如…

电商系统开发:Spring Boot框架实战

3 系统分析 当用户确定开发一款程序时&#xff0c;是需要遵循下面的顺序进行工作&#xff0c;概括为&#xff1a;系统分析–>系统设计–>系统开发–>系统测试&#xff0c;无论这个过程是否有变更或者迭代&#xff0c;都是按照这样的顺序开展工作的。系统分析就是分析系…

深度神经网络DNN反向传播BP算法公式推导

深度神经网络DNN反向传播BP算法推导、δ法则 文章目录 前言一、单个神经元的内部结构二、前向传播三、反向传播总结 前言 \;\;\;\;\; 本文详细推导深度神经网络DNN反向传播BP算法中对权重w和偏置b的更新公式。通过图片和一步步的数学公式推导深刻理解反向传播BP算法&#xff0c…