Java基础--集合

news2024/9/24 15:27:26

集合

        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.coloradmin.cn/o/1534175.html

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

相关文章

【Web】记录巅峰极客2023 BabyURL题目复现——Jackson原生链

目录 前言 分析 EXP SignedObject打二次反序列化 打TemplatesImpl加载恶意字节码 前文&#xff1a;【Web】浅聊Jackson序列化getter的利用——POJONode 前言 题目环境:2023巅峰极客 BabyURL 之前AliyunCTF Bypassit I这题考查了这样一条链子&#xff1a; BadAttributeV…

动态规划题目练习

基础知识&#xff1a; 动态规划背包问题-CSDN博客 动态规划基础概念-CSDN博客 题目练习&#xff1a; 题目1&#xff1a;过河卒 题目描述 棋盘上 A 点有一个过河卒&#xff0c;需要走到目标 B 点。卒行走的规则&#xff1a;可以向下、或者向右。同时在棋盘上 C 点有一个对方的马…

面试算法-68-将有序数组转换为二叉搜索树

题目 给你一个整数数组 nums &#xff0c;其中元素已经按 升序 排列&#xff0c;请你将其转换为一棵 平衡 二叉搜索树。 示例 1&#xff1a; 输入&#xff1a;nums [-10,-3,0,5,9] 输出&#xff1a;[0,-3,9,-10,null,5] 解释&#xff1a;[0,-10,5,null,-3,null,9] 也将被视…

力扣---子集---回溯(子集型回溯)---递归

递归法思路&#xff1a; 首先考虑为什么能用递归&#xff08;因为存在大问题和小问题之间的关系&#xff0c;大问题&#xff1a;从第 i 个数字到最后一个数字之间找子集&#xff0c;小问题&#xff1a;从第 i1 个数字到最后一个数字之间找子集&#xff09;。其次&#xff0c;用…

新版 mac 浏览器乱码

现象 如下图&#xff0c;chrome 浏览器有的乱码了 解决方法 删除字体集中的微软雅黑&#xff08;下图已删除&#xff09;&#xff0c;右键移除

aac可以直接改成mp3吗?快速转换的3个方法~

AAC&#xff08;Advanced Audio Coding&#xff09;文件格式的诞生源于对音频压缩技术的不断追求。由Fraunhofer IIS、杜比实验室、AT&T、索尼等联合开发&#xff0c;旨在提供更高质量的音频压缩效果。AAC文件格式因其出色的音质和高效的压缩算法&#xff0c;成为数字音频领…

NVIDIA NCCL 源码学习(十三)- IB SHARP

背景 之前我们看到了基于ring和tree的两种allreduce算法&#xff0c;对于ring allreduce&#xff0c;一块数据在reduce scatter阶段需要经过所有的rank&#xff0c;allgather阶段又需要经过所有rank&#xff1b;对于tree allreduce&#xff0c;一块数据数据在reduce阶段要上行…

Linux中路径正确但是就是查找不到某个文件

显示文件不存在 Py4JJavaError&#xff1a;调用 o223.partitions 时出错。 &#xff1a; org.apache.hadoop.mapred.InvalidInputException&#xff1a; 输入路径不存在&#xff1a; 首先确定路径是否正确&#xff0c;文件是否存在 然后右键文件查看属性&#xff0c;确定文件…

matlab simulink 电力系统同步发电机励磁系统的建模与仿真

1、内容简介 略 77-可以交流、咨询、答疑 电力系统同步发电机励磁系统的建模与仿真 建立MATLAB的同步发电机励磁调节系统仿真模型&#xff0c;最后建立了以PID和PSS为励磁控制方式的同步发电机励磁调节系统数学模型&#xff0c;在Simulink环境下进行了仿真&#xff0c;收到…

爬虫逆向sm3和sm4 加密 案例

注意&#xff01;&#xff01;&#xff01;&#xff01;某XX网站逆向实例仅作为学习案例&#xff0c;禁止其他个人以及团体做谋利用途&#xff01;&#xff01;&#xff01; 案例--aHR0cDovLzExMS41Ni4xNDIuMTM6MTgwODgvc3Vic2lkeU9wZW4 第一步&#xff1a;分析页面和请求方式 …

C++利用开散列哈希表封装unordered_set,unordered_map

C利用开散列哈希表封装unordered_set,unordered_map 一.前言1.开散列的哈希表完整代码 二.模板参数1.HashNode的改造2.封装unordered_set和unordered_map的第一步1.unordered_set2.unordered_map 3.HashTable 三.string的哈希函数的模板特化四.迭代器类1.operator运算符重载1.动…

Vue2(七):脚手架、render函数、ref属性、props配置项、mixin(混入)、插件、scoped样式

一、脚手架结构&#xff08;Vue CLI&#xff09; ├── node_modules ├── public │ ├── favicon.ico: 页签图标 │ └── index.html: 主页面 ├── src │ ├── assets: 存放静态资源 │ │ └── logo.png │ │── component: 存放组件 │ │ …

未来已来?国内10家AI大模型盘点(附体验网址)

名人说&#xff1a;莫道桑榆晚&#xff0c;为霞尚满天。——刘禹锡&#xff08;刘梦得&#xff0c;诗豪&#xff09; 创作者&#xff1a;Code_流苏(CSDN)&#xff08;一个喜欢古诗词和编程的Coder&#x1f60a;&#xff09; 目录 1、阿里云——通义千问2、科大讯飞——星火大模…

Cookie使用

文章目录 一、Cookie基本使用1、发送Cookie2、获取Cookie 二、Cookie原理三、Cookie使用细节 一、Cookie基本使用 1、发送Cookie package com.itheima.web.cookie;import javax.servlet.*; import javax.servlet.http.*; import javax.servlet.annotation.*; import java.io.I…

嵌入式开发--获取STM32产品系列的信息

嵌入式开发–获取STM32产品系列和容量信息 获取STM32产品系列 有时候我们需要知道当前MCU是STM32的哪一个系列&#xff0c;这当然可以从外部丝印看出来&#xff0c;但是运行在内部的软件如何知道呢&#xff1f; ST为我们提供了一个接口&#xff0c;对于STM32的所有MCU&#x…

宏宇、萨米特、新明珠、金意陶、简一、科达、力泰、道氏、SITI BT、POPPI……35家参展商发布亮点

3月18日&#xff0c;2024佛山潭洲陶瓷展&#xff08;4月18-22日&#xff09;亮点发布会在广东新媒体产业园成功举办&#xff0c;主题为“我们不一样”。 陶城报社社长、佛山潭洲陶瓷展总经理李新良代表主办方&#xff0c;发布了2024佛山潭洲陶瓷展的“不一样”&#xff1b;佛山…

TikTok账号用什么IP代理比较好?

对于运营TikTok的从业者来说&#xff0c;IP的重要性自然不言而喻。 在其他条件都正常的情况下&#xff0c;拥有一个稳定&#xff0c;纯净的IP&#xff0c;你的视频起始播放量很可能比别人高出不少&#xff0c;而劣质的IP轻则会限流&#xff0c;重则会封号。那么&#xff0c;如何…

FPGA - SPI总线介绍以及通用接口模块设计

一&#xff0c;SPI总线 1&#xff0c;SPI总线概述 SPI&#xff0c;是英语Serial Peripheral interface的缩写&#xff0c;顾名思义就是串行外围设备接口。串行外设接口总线(SPI)&#xff0c;是一种高速的&#xff0c;全双工&#xff0c;同步的通信总线&#xff0c;并且在芯片的…

Day16:LeedCode 104.二叉树的最大深度 111.二叉树最小深度 222.完全二叉树的结点个数

104. 二叉树的最大深度 给定一个二叉树 root &#xff0c;返回其最大深度。 二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。 思路:根结点最大深度max(左子树最大深度,右子树最大深度)1 终止条件,结点为null,该结点最大深度为0 class Solution {publ…

【什么是Internet?网络边缘,网络核心,分组交换 vs 电路交换,接入网络和物理媒体】

文章目录 一、什么是Internet&#xff1f;1.从具体构成角度来看2.从服务角度来看 二、网络结构1.网络边缘1.网络边缘&#xff1a;采用网络设施的面向连接服务1.1.目标&#xff1a;在端系统之间传输数据1.2.TCP服务 2.网络边缘&#xff1a;采用网络设施的无连接服务2.1目标&…