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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

c语言扫雷改进版

目录 文章目录 主体 整体架构流程 技术名词解释 技术细节 测试情况 文章目录 概要整体架构流程技术名词解释技术细节测试情况 主体 主体包括菜单&#xff0c;游戏规则简绍&#xff0c;选择进行与否 int main() {int input;srand((unsigned int)time(NULL));do{ menu()…

谷歌地图TMS地图服务地址收集2024,测试可用

对于普通的开发者或者GIS从业者来说&#xff0c;免费的底图影像服务&#xff0c;太重要了。之前写过一篇谷歌地图的TMS地址收集的博文&#xff0c;由于谷歌网站关闭已经不能用。最近又发现了谷歌在国内开放了其他地址&#xff0c;在这里给大家分享一下。 https://gac-geo.googl…

springboot Thymeleaf模版引擎使用

1.引入依赖 <!--thymeleaf视图引擎--> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency> html中要声明约束&#xff0c;这样就可以使用themelraf视…

EMC Unity存储系统(包含VNXe)常用检查命令

DELL EMC的Unity存储系统&#xff0c;包括VNXe存储系统的OS已经完全和Clariion 的VNX不同了&#xff0c;近期遇到很多关于EMC unity存储系统故障的一些初步检查需求&#xff0c;下面是一些对于DELL EMC Unity存储系统的最常用的底层检查命令&#xff0c;可以对系统故障有个初步…

小程序商城如何接入和设置支付宝支付功能?

众所周知&#xff0c;移动支付已成为电商平台不可或缺的核心组件。为了提升用户体验并拓宽支付渠道&#xff0c;许多小程序商城系统纷纷引入了支付宝作为支付选项。那么&#xff0c;如何在小程序商城系统中成功接入和设置支付宝支付功能呢&#xff1f;这似乎是大家当前所面临的…

电子台账:账页数据溯源

目录 1 前言 2 打开数据溯源面板 3 溯源面板操作 1 前言 账页中让人眼花缭乱的大堆数据来自哪里&#xff1f;从企业数据源表格中自动抓取数据后&#xff0c;如果感觉数据不对&#xff0c;就需要进行核对、排错&#xff0c;怎样确定程序到底抓取的哪些单元格&#xff1f;取数…

Visual Studio 2022 出现:E1696无法打开 源 文件 “stdafx.h“;E0020未定义标识符 “_TCHAR“错误解决办法

今天在用自己电脑上的visual studio2022写并行计算实验报告时出现了这种错误&#xff0c;但我在机房电脑vs2010版本运行时没有任何问题&#xff0c;于是我在网上找了解决办法&#xff0c;现总结如下。 1.报错E1696无法打开 源 文件 "stdafx.h"&#xff0c;解决办法&a…

思维线索(Thread of Thought)-ThoT梳理混乱的语境

Thread of Thought Unraveling Chaotic Contexts 大型语言模型&#xff08;LLMs&#xff09;在自然语言处理领域开启了一个变革的时代&#xff0c;在文本理解和生成任务上表现出色。然而&#xff0c;当面对混乱的上下文环境&#xff08;例如&#xff0c;干扰项而不是长的无关上…

【Java - 框架 - SpringMVC】(01) SpringMVC框架的简单创建与使用,快速上手

"SpringMVC"框架的简单创建与使用&#xff0c;快速上手&#xff1b; 环境 Java版本"1.8.0_202"&#xff1b;Spring Boot版本"2.5.9"&#xff1b;Windows 11 专业版_22621.2428&#xff1b;IntelliJ IDEA 2021.1.3(Ultimate Edition)&#xff1…

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

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

淘宝店铺如何从1688一键铺货?官方授权API接口,可满足多样化上货需求

那么新手卖家如何将1688的源头厂货一键铺货到淘宝店铺呢&#xff1f;下面我教大家几招&#xff1a; 1、通过淘宝复制一键复制上货 淘宝API接口采集 taobao.item_get 公共参数 名称类型必须描述keyString是调用key&#xff08;必须以GET方式拼接在URL中&#xff09;secretStr…

无粉乳胶手套:提升操作效率与舒适度的理想选择

作为一种新型的个人防护装备&#xff0c;无粉乳胶手套因其清洁、舒适和高靈敏度的特点&#xff0c;逐渐成为各个行业的首选。本文将通过对比分析无粉乳胶手套与其他手套的差异&#xff0c;探讨其在提升操作效率和舒适度方面的优势。 提升操作效率&#xff1a; 无粉乳胶手套具有…

[C语言]——函数递归

目录 一.什么是递归 1.递归的思想&#xff1a; 二.递归的限制条件 三.递归举例 1.举例1&#xff1a;求n的阶乘 1.1分析和代码实现 1.2画图推演 2.举例2&#xff1a;顺序打印⼀个整数的每⼀位 2.1分析和代码实现 2.2画图推演 四.递归与迭代 1.举例3&#xff1a;求第…

记录一次服务器内存使用率过高达到90%告警问题排查。

目录 一、前言二、问题排查处理三、 结尾 &#x1f469;&#x1f3fd;‍&#x1f4bb;个人主页&#xff1a;阿木木AEcru &#x1f525; 系列专栏&#xff1a;Docker容器化部署系列 &#x1f4b9;每一次技术突破&#xff0c;都是对自我能力的挑战和超越。 一、前言 一大早就有一…

EtherCAT 开源主站 IGH 在 linux 开发板的移植和伺服通信测试

手边有一套正点原子linux开发板imax6ul&#xff0c;一直在吃灰&#xff0c;周末业余时间无聊&#xff0c;把EtherCAT的开源IGH主站移植到开发板上玩玩儿&#xff0c;搞点事情做。顺便学习研究下EtherCAT总线协议及其对伺服驱动器的运动控制过程。实验很有意思&#xff0c;这里总…

01mysql

登陆mysql 默认数据库 进入&#xff0c;展示&#xff0c;删除 &#xff0c;查看当前正使用的库 select version()查看版本 查看表结构desc 查询 not in不会忽略空 in会自动忽略 like模糊查询 %o%中间带o的 _A%第二个字母是A的 查名字是下划线的 %\_% 排序 order …

Spring Batch | quick start

导学 官网介绍&#xff1a;https://docs.spring.io/spring-batch/reference/spring-batch-intro.html批处理就是将数据分批次进行处理的过程。常规的批处理操作步骤&#xff1a;系统A从数据库中导出数据到文件&#xff0c;系统B读取文件数据并写入到数据库批处理特点&#xff…

matlab 最小二乘拟合圆柱

目录 一、算法原理1、算法简介2、参考文献二、代码实现三、结果展示四、测试数据本文由CSDN点云侠原创,原文链接。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫。 一、算法原理 1、算法简介 圆柱拟合步骤主要包括两步: 一是确定柱面模型参数初始值; 二是…

粤嵌6818开发板如何理解Linux文件IO?

一、文件IO的概述 1、什么是文件&#xff1f; Linux下一切皆文件。普通文件、目录文件、管道文件、套接字文件、链接文件、字符设备文件、块设备文件。 2、什么是IO&#xff1f; input output&#xff1a;输入输出 3、什么是文件IO&#xff1f; 对文件的输入输出&#xff0c;把…

鸿蒙一次开发,多端部署(五)页面开发的一多能力介绍

本章介绍如何使用方舟开发框架“一多”能力&#xff0c;开发出在多设备上正常显示的页面。方舟开发框架推荐开发者使用声明式开发范式开发应用&#xff0c;故本章的内容和示例都主要基于声明式开发范式。本章主要包含如下内容&#xff1a; 布局能力 布局决定了页面中的元素按照…