Java基础--集合

集合

        1.可以动态的保存任意多个对象,使用比较方便。

        2.提供了一系列方便的操作对象的方法:add,remove,set,get等。

        3.使用集合添加,删除新元素的示意代码,简介明了。

集合主要是两种(单列集合,双列集合)

Collection 接口有两个重要的子接口 List ,Set,他们的实现子类都是单列集合

Map 接口的视线子类四双列结合,存放的是K-V键值对

public class Demo {public static void main(String[] args) {ArrayList arrraylist = new ArrayList<>();       //单列集合arrraylist.add("jack");             //单列数据        arrraylist.add("tom");HashMap hashMap = new HashMap<>();              //双列集合hashMap.put("No1","北京");           //双列数据hashMap.put("No2","上海");}
}

集合体系图

        

     

Collection 接口实现类的特点

1.collection 实现子类可以存放多个元素,每个元素可以是 Object。

2.有些 Collection 的实现类,有些是有序的(List),有些不是有序(Set)。

3.Collection 接口没有直接的实现子类,是通过他的子接口 Set 和 List 来实现的。

Collection 接口遍历元素方式:

1.使用 Iterator(迭代器)

(1)Iterator 对象称为迭代器,主要用于遍历 Collection 集合中的元素。

(2)所有实现了 Collection 接口的集合类都有一个 iterator() 方法,用以返回一个实现了 Iterator

接口的对象,即可以返回一个迭代器。

(3)Iterator 的结构。

(4)Iterator 仅用于遍历集合,Iterator 本身并不存放对象。

迭代器的执行原理:

Iterator iterator = coll.iterator();                //得到一个集合的迭代器

//hasNext();        判断是否还有下一个元素

while(iterator.hasNext()){

//next();        作用:1.下移 2.将下移以后集合位置上的元素返回  

System.out.println(interator.next());

}

增强for循环

        可以替代 iterator 迭代器,特点:增强 for 循环就是简化版的 iterator,本质一样,只能用于遍历集合或数组。

        基本语法:

for (元素类型 元素名:集合名或数组名) {

                访问元素

}

增强for循环底层仍然是迭代器,增强for循环可以理解为简化版的迭代器遍历。

List 接口方法

        1.List 集合类中元素有序(即添加顺序和取出顺序一致),且可以重复。

        2.List集合中的每个元素都有其对应的顺序索引,即支持索引,索引是从 0 开始的。

        3.List容器中的每个元素都对应一个整数型的序号记载其在容器中的位置,可以根据序号存取容器中的元素。 

List 的三种遍历方式

        1.使用 iterator

Iterator iterator = col.iterator();

        while(iter.hasNext()) {

        Object o = iter.next();

}

        2.使用增强 for

for(Object o:col){

}

        3.使用普通 for

for (int i = 0;i < list.size();i++){

        Object objcect = list.get(i);

        System.out.println(object);

}

使用LinkedList 完成 使用方式和ArrayList 一样

ArrayList 的注意事项

        1.permits all elements, including null, ArrayList 可以加入null,并且多个

        2.ArrayList 是由数组实现数据存储的

        3.ArrayList 基本等同于 Vector,除了 ArrayList 是线程不安全(执行效率高),在多线程下,不建议使用ArrayList。

Vector 和 ArrayList 底层机构的比较

底层结构线程安全(同步)效率扩容倍数
ArrayList可变数组不安全,效率高

如果有参构造1.5倍

如果无参

   1.第一次10

   2.从第二次开始按1.5倍扩

Vector可变数组安全,效率不高

如果是无参,默认10,满后,就按2倍扩容

如果指定大小,则每次直接按2倍扩

ArrayList 和 LinkedList 的比较

底层结构增删的效率改查的效率

ArrayList

可变数组较低,数组扩容较高
LinkedList双向链表较高,通过链表追加较低

如何选择ArrayList 和LinkedList

1.如果我们改查的操作多,选择ArrayList

2.如果我们增删的操作多,选择LinkedList

3.一般来说,大部分情况下会选择ArrayList

Set接口方法

        1.无序(添加和取出的顺序不一致),没有索引

        2.不允许重复元素,所以最多包含一个null

        和 List接口一样,Set 接口也是Collection 接口的子接口,因此,常用方法和 Collection 接口的接口一样

Set 接口的遍历方式

        因为是Collection 接口的子接口,所以同Collection 的遍历方式一样

        1.可以使用迭代器

        2.增强for

        3.不能使用索引方式来获取

Set 接口的实现类的对象,不能存放重复的元素,可以添加一个null。

Set接口对象存放数据是无序的(即添加和取出的顺序是不一致的),取出的顺序虽然不是添加的顺序,但他是固定的。

HashSet 的全面说明

        1.HashSet 实现了Set接口。

        2.HashSet 实际上是HashMap。

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

        4.HashSet 不保证元素是有序的,取决 hash 后,再确定索引的结果。

        5.不能有重复元素/对象。

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

LinkedHashSet 的全面说明

        1.LinkedHashSet 是 HashSet 的子类。

        2.LinkedHashSet 底层是 LinkedHashMap 底层维护了一个 数组 + 双链表。

        3.LinkedHashSet 根据元素的 HashCode 值来决定元素的存储位置,同时使用链表维护元素的次序,这使得元素看起来是以插入顺序保存的。

        4.HashSet 不允许添加重复元素。

Map 接口特点

        1.Map 与 Collection 并列存在,用于保存具有映射关系的数据:key-value。

        2.Map 中的key 与 value 可以是任何引用类型的数据,会封装到 HashMap$Node

对象中。

        3.Map 中的 key 不允许c重复。

        4.Map 中的value 可以重复。

        5.Map 的 key 可以为 null,value 也可以为 null,key 为 null 只能有一个,value 为 null 可以多个。

        6.常用 String 类作为 Map 的 key。

        7.key 和 value 之间存在单向一对一关系,即通过指定的key 总能找到对应的 value。

Map 遍历方法

        1.containKey:查找键是否存在

        2.KeySet:获取所有的键

        3.entrySet:获取所有关系

        4.values:获取所有的值

HashMap 小结:

1.HashMap 是以 key-value 的方式来存储数据

2.key 不能重复,但是值可以重复,允许使用 null 键和 null 值

3.如果添加相同的 key,则会覆盖原来的key-value,等同于修改(key 不会替换,value 会替换)

4.与HashSet 一样,不能保证映射的顺序,因为底层是以 hash 表的方式来存储的

5.HashMap 没有实现同步,因此线程是不安全的。

HashTable 的基本介绍

1.存放的元素是键值对。

2.HashTable 的键和值都不能为空。

3.HashTable 的使用方法基本上和 HashMap 一样。

4.HashTable 线程是安全的,HashMap 是线程不安全的。

HashTable 和 HashMap 的对比

线程安全(同步)效率允许null键和null值
HashMap不安全可以
HashTable安全较低不可以

怎么选择集合实现类

Ending: 

        OK,本篇文章就到此结束了,非常感谢你能看到这里,所以如果你觉得这篇文章对你有帮助的话,请点一个大大的赞,支持一下博主,若你觉得有什么问题或疑问,欢迎私信博主或在评论区指出~ 

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

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

相关文章

罗技G29游戏方向盘试玩拆解,带震动力反馈

1.正好有时间记录下 自己的爱好 一千多的罗技G29游戏方向盘试玩拆解&#xff0c;带震动力反馈&#xff0c;值这个价吗_哔哩哔哩_bilibili 一千多的罗技G29游戏方向盘试玩拆解&#xff0c;带震动力反馈&#xff0c;值这个价吗_哔哩哔哩_bilibili 2.拆解 3.2个大电机 4.主控芯…

全新体验|德克萨斯州奥斯汀市登陆 The Sandbox

以前所未有的方式探索德克萨斯州奥斯汀——The Sandbox迎来虚拟旅游&#xff0c;新体验由Smobler工作室打造。 我们的使命是为虚拟旅游创造新机遇&#xff0c;让每个人都能更方便地游览城市和国家。我们非常兴奋地宣布&#xff1a;Cobbleland&#xff1a;Austin&#xff0c;这款…

城市排涝与海绵城市规划设计中的水文水动力模拟技术

原文链接&#xff1a;城市排涝与海绵城市规划设计中的水文水动力模拟技术https://mp.weixin.qq.com/s?__bizMzUzNTczMDMxMg&mid2247598401&idx3&sn0c4c86b3a5d09a75b8f07e6fad81aa9c&chksmfa8200a6cdf589b0970a6854869e8e3a9f132fe40a19977863c091cbcf6d9786f…

赋能 DevOps:平台工程的关键作用

在当今快节奏的数字环境中&#xff0c;DevOps 已成为寻求简化软件开发和交付流程的组织的关键方法。DevOps 的核心在于开发和运营团队之间协作的概念&#xff0c;通过一组旨在自动化和提高软件交付生命周期效率的实践和工具来实现。 DevOps 实践的关键推动因素之一是平台工程。…

c语言(自定义类型——结构体)

C语⾔已经提供了内置类型&#xff0c;如&#xff1a;char、short、int、long、float、double等&#xff0c;但是只有这些内置类 型还是不够的&#xff0c;假设我想描述学⽣&#xff0c;描述⼀本书&#xff0c;这时单⼀的内置类型是不⾏的。描述⼀个学⽣需要 名字、年龄、学号、…

libVLC 元数据

libVLC是一个开源的多媒体框架&#xff0c;主要用于处理和播放各种类型的媒体文件&#xff0c;如视频、音频等。 媒体元数据&#xff08;Metadata&#xff09;&#xff1a;包括媒体文件的基本信息&#xff0c;如标题、艺术家、专辑、持续时间、分辨率、比特率、编码格式等。 …

Docker【安装redis】【redis-desktop-manager】

文章目录 前言一、建立挂载目录二、下载运行镜像三、安装redis可视化工具redis-desktop-manager 前言 本文开始默认你已经安装了docker&#xff0c;如果对此还不够了解请看这篇文章&#xff1a;docker的安装 一、建立挂载目录 一般对应mysql、redis这种存储数据的镜像&#x…

RESNET的复现pytorch版本

RESNET的复现pytorch版本 使用的数据为Object_102_CaDataset&#xff0c;可以在网上下载&#xff0c;也可以在评论区问。 RESNET模型的亮点 1.提出了残差模块。 2.使用Batch Normalization加速训练 3.残差网络&#xff1a;易于收敛&#xff0c;很好的解决了退化问题&#…

【C++】狗屁不通文章生成器2.0

【C】狗屁不通文章生成器2.0 1 前言2 改进2.1 字词的前后关系2.2 文章生成系统 3 实现(部分)3.1 class wordpair3.1.1 转化为 json3.1.2 添加后缀词3.1.3 选择后缀词 3.2 class createArticle3.2.1文本分割3.2.2生成文章 4演示4.1 wordpair(3x2), 启动词(春天)4.2 wordpair(2x1…

Vue按需加载:提升应用性能的利器

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

【进程概念】进程控制块task_struct-PCB

文章目录 进程的概念如何描述进程?**为什么要描述一个进程**&#xff1f;进程描述--PCBtask_struct 组织进程查看进程通过系统调用获取进程标示符getpid()以及getppid() 进程的概念 在【百度百科】中&#xff0c;关于进程---- 狭义定义&#xff1a;进程是 正在运行 的程序的实…

若依ruoyi-vue中的文件上传和下载

文章目录 文件上传后端实现前端实现 文件下载后端实现前端实现 在若依&#xff08;Ruoyi&#xff09;框架中&#xff0c;结合 Vue 前端框架&#xff0c;文件的上传和下载通常使用以下方法实现&#xff1a; 文件上传 若依现成的功能里面没有文件上传&#xff0c;但是集成了文件…

基于php健身房管理系统flask-django-python

根据现实需要&#xff0c;此系统我们设计出一下功能&#xff0c;主要有以下功能模板。 &#xff08;1&#xff09;前台功能&#xff1a;首页、运动器材、教练信息、营业信息、公告栏、在线留言、后台管理、个人中心。 &#xff08;2&#xff09;会员功能&#xff1a;首页、个人…

Springboot笔记(web开启)-08

有一些日志什么的后续我会补充 1.使用springboot: 创建SpringBoot应用&#xff0c;选中我们需要的模块&#xff1b;SpringBoot已经默认将这些场景配置好了&#xff0c;只需要在配置文件中指定少量配置就可以运行起来自己编写业务代码&#xff1b; 2.SpringBoot对静态资源的映…

【记录39】html element-ui 加载

环境 html使用element-ui组件、用vue框架搭建 方法一&#xff1a; 方法二&#xff08;推荐&#xff09; 将相关资源下载下来&#xff0c;在对应的html文件中相对路径引入。注意&#xff1a;css加载放在js之前

Controller中接收数组参数

1、场景 需要根据用户id集合批量删除用户数据&#xff0c;前端使用post请求&#xff0c;controller中参数接收数组参数并根据用户id删除用户基本信息 2、分析处理&#xff1a; 2.1、前端请求类型contentType:application/json 请求体中为json字符串&#xff0c;后端新建一个U…

javaSwing愤怒的小鸟

一、简介 游戏名称是“愤怒的小鸟”&#xff0c;英文称为“AngryBird”。 “愤怒的小鸟”是著名游戏公司Rovio偶然间开发出来的益智游戏&#xff0c;从2009年12月上市到iOS。&#xff0c;讲述了鸟类和猪因为猪偷鸟蛋反生的一系列故事。游戏的类型版本是横向版本的水平视角&…

怎么在Linux系统下Docker部署Excalidraw白板工具并实现无公网IP远程访问?

文章目录 1. 安装Docker2. 使用Docker拉取Excalidraw镜像3. 创建并启动Excalidraw容器4. 本地连接测试5. 公网远程访问本地Excalidraw5.1 内网穿透工具安装5.2 创建远程连接公网地址5.3 使用固定公网地址远程访问 本文主要介绍如何在Ubuntu系统使用Docker部署开源白板工具Excal…

C++临时变量

本博客将讲述我学习过程中对临时变量的疑惑与理解 为什么写这篇文章&#xff1f; 我在学习C过程中&#xff0c;发现C在发生隐式转换时或者出现未命名的变量如字符串再或者在求值的时候&#xff0c;会出现C临时变量&#xff08;系统自动生成&#xff09;&#xff0c;而这个临时…

PgSQL根据身份证号查询年龄

1、需求&#xff1a;数据库中有身份证号码&#xff0c;也有年龄字段&#xff0c;但是年龄字段不会自动更新&#xff0c;现在需要返回最新的年龄数据。 2、思路&#xff1a;获取当前年份&#xff0c;截取省份证中的年龄部分数据&#xff0c;再进行相减即可&#xff1b; 3、具体…