回炉重造java----单列集合(List,Set)

news2024/11/19 4:31:48

体系结构:  集合主要分为两种,单列集合collection和双列集合Map,区别在于单列集合一次插入一条数据,而双列的一次插入类似于key-value的形式

单列集合collection

294a9d0a1bc64a7ea78ef4c9eab9bc64.jpg

注:红色的表示是接口,蓝色的是实现类

7aa0297e45ba47c1bb2d024735e3dead.jpg

①操作功能:

714219247fc94d5abe7479f485de75f4.jpg增加: add(),List的新增一定是成功的,而Set不一定因为其有不能重复的限制条件

清空:clear()

删除:remove(),因为collection中定义的是共性的方法,所以删除不能通过索引去删除

判断是否存在:contains(),其底层是通过equals()方法实现的,因为equals()方法是基于比较地址值,所以如果集合中存的是对象的话,要重写equals()方法才能进行contains的比较

判断是否为空:isEmpty()

返回集合大小:size()

②遍历方式:

集合的遍历方式有三种,分别是迭代器遍历,增强for遍历和lambda表达式遍历

迭代器(Iterator)遍历:创建Iterator对象进行遍历

5dc442935a4e4233a7cde1b71295cd99.jpg

注:   迭代完毕指针不会复位;循环中next()只能用一次;迭代过程中不允许使用集合的方法增加删除

增强for遍历:底层其实就是迭代器   

b21d3e1c4a9b4367a1d375cb91fc18fa.jpg

注:   集合名.for快速生成;对s中的修改不对集合的原数据有影响

Lambda表达式(foreach)遍历:底层就是遍历集合通过accept方法依次过的元素

170150d4c6224a02bf46febc5a95b1d8.jpg

③List

db5e5cc96ca6443497d9fc1ce5840778.jpg

 注:  remove的时候如果有方法重载了,优先调用形参和实参类型一样的方法。remove(1)是索引

遍历方式:  相比于collection的3种遍历方式,List当然全部继承了,但是因为List有了索引的机制,所以List还增加了两种,普通的for循环和列表迭代器(listIterator)

cfc1c11724324f28aa473125afaffaeb.jpg

数据结构:

69b0b34aaed6469698d07d84e0a9ee47.jpg

 ArrayList详解:底层是数组

5a077adb8d5e42728fd64d62e12d44e3.jpg

 源码:277e9c1091b64dd98b0bc675227e8fd7.jpg

①创建ArrayList时是一个长度为0的elementData

②在插入第一个元素时,将扩容为长度为10的数组,然后把数据放进去

b389b39548a74bbbb9fcf0c8abbf7b83.jpg ①当原数组的长度已经用完了,底层就要去扩容,默认是扩容原数组长度的一半,即1.5倍

②如果插入的数据长度很大,就会扩容到大长度的地方

LinkedList详解:底层是双向链表

4e2c1c84214344dc87b5a70f3b4b30a0.jpg

 注: 这里的方法基本不用,而是基本使用List的方法

源码:学了数据结构中的双向链表就可以清楚的知道其操作流程

1c466b51d89940f1a5eaf119981a17a8.png

④Set

泛型: 

c4287671249543ea98a45f15d451104a.png

泛型的作用: 

704064569c2c4f04a83f7593fc0a3dd0.png

 java中的泛型其实是伪泛型:即其实底层存的时候依然是object对象,泛型会擦除

fb88d05e74f34aa08b9db07ac13fc2c8.png

泛型可以定义在类上,也可以定义在方法上,还可以定义在接口上 

HashSet详解:  底层是哈希表,jdk8之前是数组+链表,jdk8之后是数组+链表+红黑树

b6a6e82fe31b430c8e826b0a0f5edfd1.jpg

 存数据的过程:①由hashcode计算出应存入的位置②如果位置是空就放进去③如果不为空,则调用equals方法去判断是否一样的,如果一样的就不存④如果不一样的话,jdk8之前是把新元素放进去,老元素取出来挂在新元素后面,而jdk8之后就是直接把新元素挂在老元素的后面

80567b1f65c2472096030e5f51034e6e.jpg

 注意点:

c09cdad990244610be11fd64d2edcb87.jpg

LinkedHashSet详解:  底层跟HashSet一样,不过在其基础上加上了数据之间的双向链表结构,使得其变成有序的

7f1f2b86ae10442f8448bb84e6a84e2a.jpg

TreeSet详解:  底层是红黑树,性能好

e091477e82e14fb4b6d5e1b7c04b70c7.jpg

总结:各种单列集合的应用场景:

66bb62c3eef547d0b62c6aea025f73fd.jpg

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

六级仔细阅读

画两到三个词,精准定位 要原文和同义都满足才选 先看题目,在看原文,不要先看选项 做不出答案就继续往下读,读出来了就不用继续读了 分清楚是问为什么还是是什么,是什么看前面,为什么看后面 不知道就优先…

三、配置带HybridCLR的ARCore开发环境

预告 本专栏将介绍如何使用这个支持热更的AR开发插件,快速地开发AR应用。 专栏: Unity开发AR系列 插件简介 通过热更技术实现动态地加载AR场景,简化了AR开发流程,让用户可更多地关注Unity场景内容的制作。 “EnvInstaller…”支…

Java JVM 浅析

为什么要有JVMJVM是什么?JVM的工作流程和组成部分JVM规范和JVM实现JVM原理详解 带着以上问题,我将尝试对JVM作出一些简单的介绍。 一、JVM 简介 在90年代初,软件开发面临一个大问题,即不同的操作系统和硬件架构要求开发不同的版本…

【Java代码审计】代码审计的方法及常用工具

【Java代码审计】代码审计的方法及常用工具 代码审计的常用思路代码审计辅助工具代码编辑器测试工具反编译工具Java 代码静态扫描工具 代码审计的常用思路 1、接口排查(“正向追踪”):先找出从外部接口接收的参数,并跟踪其传递过…

3DGS+3D Tiles融合已成 ,更大的场景,更细腻的效果~

最近国外同行Kieran Farr发布了一个他制作的3D GussianSplatting(高斯泼溅)Google Map 3D Tiles的融合叠加的demo案例(如下所示)。 准确来说这是一个数据融合的实景场景,该实景场景使用了倾斜三维和3D GussianSplatting两种实景表达技术&…

深入理解Java TreeSet:实现与使用案例分析

哈喽,各位小伙伴们,你们好呀,我是喵手。运营社区:C站/掘金/腾讯云;欢迎大家常来逛逛 今天我要给大家分享一些自己日常学习到的一些知识点,并以文字的形式跟大家一起交流,互相学习,一…

【WPF学习笔记(一)】WPF应用程序的组成及Window类介绍

WPF应用程序的组成及Window类介绍 WPF应用程序的组成及Window类介绍前言正文1、WPF介绍1.1 什么是WPF1.2 WPF的特点1.3 WPF的控件分类 2、XAML介绍2.1 XAML的定义2.2 XAML的特点2.3 XAML的命名空间 3、WPF应用程序组成3.1 App.config3.2 App.xaml3.3 App.xaml.cs3.4 MainWindow…

react18【实战】tab切换,纯前端列表排序(含 lodash 和 classnames 的安装和使用)

技术要点 动态样式 className{tabItem ${currentType item.value && "active"}}安装 lodash npm i --save lodash使用 lodash 对对象数组排序(不会改变源数组) _.orderBy(dataList, "readNum", "desc")src\De…

十二种网络威胁防护方案

一、SQL注入 SQL注入即是指web应用程序对用户输入数据的合法性没有判断或过滤不严,攻击者可以在web应用程序中事先定义好的查询语句的结尾上添加额外的SQL语句,在管理员不知情的情况下实现非法操作,以此来实现欺骗数据库服务器执行非授权的任…

Python之数据分析基础

导言: “21世纪的竞争是数据的竞争,谁掌握数据,谁就掌握未来”。如何将大量看似杂乱无章的数据进行聚合,并发现潜在的规律也变得越来越重要。本文将先说明数据分析的步骤,再通过python完成实例数据的处理、分析最终展…

19.接口自动化-Jekins学习

1.CI-持续集成 频繁的(一天多次)将代码集成到主干 目的:让产品快速迭代,保持高质量 好处: 快速发现错误,每次更新都集成到主干,可以快速发现错误,定位错误也容易防止分支大幅偏离主…

示波器基础1-带宽

数字示波器最重要的基本特征之一是其带宽,了解带宽及其对技术指标的影响对于选择合适的示波器非常有帮助。 这里我们对示波器带宽的一些基本方面做一简要介绍。 当我们谈到示波器的带宽时,重要的是要区分模拟带宽和数字带宽。模拟带宽主要受仪器模拟输入…

TriCore: Architecture

说明 本文是 英飞凌 架构文档 TriCore TC162P core archiecture Volume 1 of 2 (infineon.com) 的笔记,稍作整理方便查阅,错误之处,还请指正,谢谢 :) 1. Architecture 2. General Purpose & System Register 名词列表&#…

Spring Cloud Alibaba 网关 Gateway 集成(7)

项目的源码地址 Spring Cloud Alibaba 工程搭建(1) Spring Cloud Alibaba 工程搭建连接数据库(2) Spring Cloud Alibaba 集成 nacos 以及整合 Ribbon 与 Feign 实现负载调用(3) Spring Cloud Alibaba Ribbo…

用标准的GNU/Linux命令替换Alpine上的精简版命令

Alpine Linux 是一个基于 musl libc 和 busybox 的轻量级Linux发行版,busybox 实现了很多常用类Unix命令的精简版,特点是体积很小,舍弃了很多不常用参数,我们简单对比一下标准Linux自带的 date 命令 和 Alpine下默认的 date 命令便…

Babel基础知识及实现埋点插件

目录 前言 AST 遍历 Visitors Paths(路径) Paths in Visitors(存在于访问者中的路径) State(状态) Scopes(作用域) Bindings(绑定) API babylo…

LeetCode 112. 路径总和 || LeetCode 113. 路径总和ii

LeetCode 112. 路径总和 1、题目 题目链接:112. 路径总和 给你二叉树的根节点 root 和一个表示目标和的整数 targetSum 。判断该树中是否存在 根节点到叶子节点 的路径,这条路径上所有节点值相加等于目标和 targetSum 。如果存在,返回 true…

唤醒手腕 Go 语言 并发编程、Channel通道、Context 详细教程(更新中)

并发编程概述 ​ 一个进程可以包含多个线程,这些线程运行的一定是同一个程序(进程程序),且都由当前进程中已经存在的线程通过系统调用的方式创建出来。进程是资源分配的基本单位,线程是调度运行的基本单位&#xff0c…

CentOS 7安装配置docker

CentOS 7、8安装、配置docker 这里宿主机的型号选择是centos7.9.2009的版本 1.宿主机关闭防火墙和selinux,配置ipv4 #设置SELinuxdisabled vim /etc/selinux/config SELinuxdisabled 查看防火墙状态:firewall-cmd --state 关闭防火墙:syst…

C# WinForm —— 14 CheckedListBox 复选列表框介绍

1. 简介 类似 ListBox,提供项的列表,区别就是 CheckedListBox 每一个项前面有个复选框 2. 常用属性 属性解释(Name)控件ID,在代码里引用的时候会用到,一般以 ckl 开头BackColor背景颜色BoderStyle边框样式:无、FixedSingle、F…