JAVA基础-集合(List与Map)

news2024/11/26 18:49:58

目录

引言

一,Collection集合

1.1,List接口

1.1.1,ArrayList

1.1.1.1,ArrayList的add()添加方法

 1.1.1.2,ArrayList的remove()删除方法

1.1.1.3,ArrayList的contains()判断方法

1.1.1.4,ArrayList的set()排序方法和size()大小方法

1.1.1.5,ArrayList的遍历

1.1.2,LinkedList

1.2,Set接口

1.2.1,HashSet

1.2.1.1,HashSet的add()添加方法

1.2.1.2,HashSet的remove()删除方法

 1.2.1.3,HashSet的contains()判断方法

1.2.1.4,HashSet的size()大小方法和clear()清空方法

 1.2.2,Treeset

二,Map集合

2.1,HashMap集合

2.1.1,HashMap的put()添加方法

2.1.2,HashMap的get()获取方法

2.1.3,HashMap的containkey()和containvalue判断方法

2.1.4,HashMap的remove()删除方法

2.1.5,HashMap的遍历

2.1.5.1,HashMap的keyset()遍历方法

2.1.5.2,HashMap的values()遍历方法

2.2,TreeMap集合


引言

        程序中可能通过数组来保存多个对象,因为数组长度是不可变的。JDK中提供了一些特殊的类,这些类 可以存储任何对象,并且长度可变,在java中这些类被为集合。集合类位于 java.util 包中。

        集合有两大类:

  1. 单列集合 Collection 接口
  2. 双列集合 Map 接口

一,Collection集合

        java.util.Collection 是所有单列集合的父接口,因此在Collection中定义了单列集合 List 和 Set 通用的一些方法。

方法声明功能描述
boolean add(Object o)向集合中添加一个元素
boolean addAll(Collection c)增加一个集合(多个元素)
void clear()清空集合
boolean remove(Object o)删除集合中的一个对象(元素)
boolean removeAll(Collection c)删除一个集合(多个元素)
boolean isEmpty()是不是空的
boolean contains(Object o)判断集合有没有这个元素
boolean containsAll(Collection c)判断集合中有没有参数集合
Iterator iterator()返回一个遍历迭代器
int size()返回集合的元素个数

1.1,List接口

        List接口继承自Collection接口,是单列集合的一个重要分支,习惯性地将实现了List接口的对象称为List 集合,本质更象一个动态的数组。

        List的常用方法:

方法功能描述
void add(int index,Object element)向集合中指定位置添加一个元素
boolean addAll(int index,Collection c)向集合中指定位置增加一个集合(多个元素)
Object get(int index)获取指定位置元素
Object remove(int index)删除指定位置元素
Object set(int index,Object element)修改指定位置的元素
int indexOf(Object o)获取指定元素索引
int lastIndexOf(Object o)获取最后一个元素索引
List subList(int fromIndex,int toIndex)将指定索引对象对换

1.1.1,ArrayList

        java.util.ArrayList类是List接口的一个实现类,此对象相当于动态的数组。

        实例化ArrayList对象有几种方式:

实例演示:

        //实例化 ArrayList
        ArrayList list1 = new ArrayList();
        var list2 = new ArrayList();
        List list3 = new ArrayList();
        //此方法实例出的对象,是只读的(不能添加 删除 移动位置,优点是能够快速建立集合实例对象)
        List list4 = List.of();
        //list4.add(10); 此行是错误的,因为List.of() 对象是只读的
        String[] arr = {"java","javascript","python","html"};
        //此方法实例出的对象,是只读的;list5.add(10);不可行
        List list5 = Arrays.asList(1,2,3);

        ArrayList的常用方法添加、删除、判断、大小输出,修改,,排序,遍历:

  • add()//添加
  • remove()//删除
  • contains()//判断
  • set()//设置指定位置元素更改为指定对象
  • size()//大小

1.1.1.1,ArrayList的add()添加方法

实例演示:

        //实例化,这们实例化,集合可以添加任何类型的元素 默认是Object
        List list = new ArrayList();
        //添加元素
        list.add(10);
        System.out.println(list);
        list.add(5.665);
        System.out.println(list);
        list.add("java");
        System.out.println(list);
        list.add("mysql");
        System.out.println(list);
        //在指定位置添加元素
        list.add(0, "python");
        System.out.println(list);
        //添加多个元素
        list.addAll(List.of("html", "css"));
        System.out.println(list);
        //在指定位置添加多个元素
        list.addAll(0, List.of(100, 200, 300, 400, 500));
        System.out.println(list);

输出结果:

 1.1.1.2,ArrayList的remove()删除方法

示例演示:

         List list = new ArrayList();
        list.addAll(List.of("java","php","c","go","c++","java","c"));
        System.out.println(list);
        //删除元素remove(Object o) remove(int index)
        //此时删除的是索引为5的元素,如果下标没有5就出异常
        //删除对象,成功返回布尔true,失败返回false
        var oo = list.remove(5);
        System.out.println(oo);
        //删除子集合,只要陈工删除一个元素就返回true
        System.out.println(list.removeAll(List.of("mysql", "java")));
        System.out.println(list);
        //清空集合
        list.clear();
        System.out.println(list);

输出结果:

1.1.1.3,ArrayList的contains()判断方法

示例演示:

        List list = new ArrayList();
        list.addAll(List.of("java","php","c","go","c++","java","c"));
        System.out.println(list);
        //判断某一个元素是否存在
        System.out.println(list.contains("php"));
        //判断集合是否为空
        System.out.println(list.isEmpty());
        //判断多个元素是否都存在,有一个不存在就返回false
        System.out.println(list.containsAll(List.of("mysql", "java")));

 输出结果:

1.1.1.4,ArrayList的set()排序方法和size()大小方法

示例演示:

        List list = new ArrayList();
        list.addAll(List.of("java","php","c","go","c++","java","c"));
        System.out.println(list);
        System.out.println(list.size());
        list.set(0,"c++");
        System.out.println(list);

输出结果:

1.1.1.5,ArrayList的遍历

 示例演示:

        List list = new ArrayList();
        list.addAll(List.of("java","php","c","go","c++","java","c"));
        System.out.println(list);
        //集合遍历
        for (Object obj : list) {
            System.out.println(obj);
        }
        for (int i = 0; i < list.size(); i++) {
            System.out.printf("list.get(%d) = %s%n", i, list.get(i));
        }

 输出结果:

1.1.2,LinkedList

extends AbstractSequentialList

        LinkedList同时实现了 List 接口和 Deque 对口,也就是收它既可以看作一个顺序容器,又可以看作一 个队列(Queue),同时又可以看作一个栈(stack),这样看来,linkedList简直就是无敌的,当你需要使 用栈或者队列时,可以考虑用LinkedList,一方面是因为Java官方已经声明不建议使用Stack类,更遗憾的是, Java里根本没有一个叫做Queue的类(只是一个接口的名字)。关于栈或队列,现在首选是ArrayDeque, 它有着比LinkedList(当作栈或队列使用时)更好的性能。

        LinkedList常用方法同ArrayList基本相同,可以参照Arraylist尝试。

1.2,Set接口

        Set接口继承了Collection接口,集合中元素是不能重复的。如果有相关的元素重复内容,就保留原来的 元素,添加的元素取消,不能随机读取元素,没有顺序。

        public interface Set extends Collection

1.2.1,HashSet

        实例化HashSet:

示例演示:

        HashSet hashset1=new HashSet();
        Set hashset2=new HashSet();
        var hashset=new HashSet();

1.2.1.1,HashSet的add()添加方法

示例演示:

        HashSet hashset=new HashSet();
        hashset.add("java");
        hashset.add("c");
        hashset.add("php");
        hashset.add("go");
        hashset.add("java");
        System.out.println(hashset);
        hashset.addAll(List.of("nihao","小明"));
        System.out.println(hashset);

输出结果:

1.2.1.2,HashSet的remove()删除方法

示例演示:

        HashSet hashset=new HashSet(List.of(10,50,30,80,5));
        System.out.println(hashset);
        System.out.println(hashset.remove(50));
        System.out.println(hashset);
        System.out.println(hashset.removeAll(List.of(80, 4, 3)));
        System.out.println(hashset);

输出结果:

 

 1.2.1.3,HashSet的contains()判断方法

示例演示:

        HashSet hashset=new HashSet(List.of(10,50,30,80,5));
        System.out.println(hashset);
        System.out.println(hashset.contains(5));
        System.out.println(hashset.containsAll(List.of(10, 5)));
        System.out.println(hashset.containsAll(List.of(10, 5,4)));

输出结果:

1.2.1.4,HashSet的size()大小方法和clear()清空方法

示例代码:

        HashSet hashset=new HashSet(List.of(10,50,30,80,5));
        System.out.println(hashset);
        System.out.println(hashset.size());
        hashset.clear();
        System.out.println(hashset);

输出结果:

 1.2.2,Treeset

        是一个有序,可排序的(默认是升序),不可重复元素的集合工具类。

示例演示:

        //实例化TreeSet对象
        //Set treemap=new TreeSet();
        TreeSet treeset=new TreeSet(List.of(5,9,8,4,55,4,1));
        System.out.println(treeset);

输出结果:

二,Map集合

         map接口是一个双列集合,每个元素有一个键值 对 Map

  • 1.Map是一个双列集合,一个元素包含两个值(一个key,一个value)
  • 2.Map集合中的元素,key和value的数据类型可以相同,也可以不同
  • 3.Map中的元素,key不允许重复,value可以重复
  • 4.Map里的key和value是一一对应的。

        map集合方法:

2.1,HashMap集合

         HashMap 基于哈希表的 Map 接口实现,是以 key-value 存储形式存在,即主要用来存放键值对。HashMap 的实现不是同步的,这意味着他不是线程安全的。它的 key、value 都可以为 null,此外,HashMap 中的映射不是有序的。 

        实例化HashMap

        //实例化HashMap,使用泛型
        Map<String,Integer> hash1=new HashMap<>();
        HashMap<String,Integer> hash2=new HashMap<>();
        //不使用泛型
        HashMap hash=new HashMap();

2.1.1,HashMap的put()添加方法

示例代码:

        HashMap hash=new HashMap();
        hash.put("小黑",1);
        hash.put("小黄",1);
        hash.put("小吕",1);
        hash.put("小黑",2);
        System.out.println(hash);

输出结果:

  

2.1.2,HashMap的get()获取方法

示例代码:

        HashMap hash=new HashMap();
        hash.put("小黑",1);
        hash.put("小黄",1);
        hash.put("小吕",1);
        hash.put("小黑",2);
        System.out.println(hash);
        System.out.println(hash.get("小黑"));
        System.out.println(hash);

输出结果:

  

2.1.3,HashMap的containkey()和containvalue判断方法

示例代码:

        HashMap hash=new HashMap();
        hash.put("小黑",1);
        hash.put("小黄",1);
        hash.put("小吕",1);
        hash.put("小黑",2);
        System.out.println(hash);
        System.out.println(hash.containsKey("小黑"));
        System.out.println(hash.containsValue(1));

输出结果:

  

2.1.4,HashMap的remove()删除方法

示例代码:

        HashMap hash=new HashMap();
        hash.put("小黑",1);
        hash.put("小黄",1);
        hash.put("小吕",1);
        hash.put("小黑",2);
        System.out.println(hash);
        System.out.println(hash.remove("小黑"));
        System.out.println(hash.remove("小吕", 1));

输出结果:

  

2.1.5,HashMap的遍历

2.1.5.1,HashMap的keyset()遍历方法

示例代码:

        HashMap hash=new HashMap();
        hash.put("小黑",1);
        hash.put("小黄",1);
        hash.put("小吕",1);
        hash.put("小黑",2);
        System.out.println(hash);
        for (Object o : hash.keySet()) {
            System.out.println(o);
        }

输出结果:

  

2.1.5.2,HashMap的values()遍历方法

示例代码:

        HashMap hash=new HashMap();
        hash.put("小黑",1);
        hash.put("小黄",1);
        hash.put("小吕",1);
        hash.put("小黑",2);
        System.out.println(hash);
        for (Object value : hash.values()) {
            System.out.println(value);
        }

输出结果:

  

2.2,TreeMap集合

        1. 是一个有序的key-value集合,它是通过红黑树实现的。该映射根据其键的自然顺序进行排序,或 者根据创建映射时提供的 Comparator 进行排序,具体取决于使用的构造方法。

        2. 是继承了AbstractMap,也是以key-value集合存储。实现了NavigableMap接口,可以支持一系列 的导航方法。 比如返回有序的key集合。实现了Cloneable克隆接口。实现了java.io.Serializable序列化接口。另 外,TreeMap是非线程同步的。

实例化TreeMap

        //实例化TreeMap,使用泛型
        Map<String,Integer> treemap1=new TreeMap<>();
        TreeMap<String,Integer> treemap2=new TreeMap<>();
        //不使用泛型
        TreeMap treemap=new TreeMap();

TreeMap应用

示例代码:

        TreeMap treemap=new TreeMap();
        treemap.put("小黑",1);
        treemap.put("小黄",1);
        treemap.put("小吕",1);
        treemap.put("小黑",2);
        System.out.println(treemap);

输出结果:

  

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

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

相关文章

机器学习之主成分分析(Principal Component Analysis)

1 主成分分析介绍 1.1 什么是主成分分析 主成分分析&#xff08;Principal Component Analysis&#xff09;简称PCA&#xff0c;是一个非监督学习的机器学习算法&#xff0c;主要用于数据的降维&#xff0c;对于高维数据&#xff0c;通过降维&#xff0c;可以发现更便于人类理…

(css)自定义el-dialog对话框添加背景图片

(css)自定义el-dialog对话框添加背景图片 效果&#xff1a; // 文件管理对话框 /deep/ .el-dialog {background: transparent;background-image: url("../assets/image/file-upload-background.png");background-size: 100% 100%; } // 头部 /deep/ .el-dialog__titl…

2024考研408-操作系统 第五章-输入输出IO管理 学习笔记

文章目录 一、I/O管理概述1.1、I/O设备的概念与分类1.1.1、什么是I/O设备&#xff1f;1.1.2、I/O设备的分类&#xff1a;按照使用特性1.1.2、I/O设备的分类&#xff1a;按传输速率分类1.1.3、I/O设备的分类&#xff1a;按照信息交换的单位分类知识点回顾与重要考点 1.2、I/O控制…

【Linux】udp客户端windows版以及Tcp服务器的实现

windows版客户端更适合大多数人~ 文章目录 一. udp客户端windows版二.Tcp服务器的实现总结 一、udp客户端windows版 首先我们将上一篇文章中实现的udp大型聊天室的代码进行修改&#xff0c;注意我们只修改服务端代码将代码修改的很简单就好&#xff0c;因为我们只是做一个如何…

spring-事务

spring-事务 事务( transaction)是访问并可能操作各种数据项的一个数据库操作序列&#xff0c;这些操作要么全部执行,要么全部不执行&#xff0c;是一个不可分割的工作单位。事务由事务开始与事务结束之间执行的全部数据库操作组成&#xff0c;它具有ACID特性。 为了在spring中…

UE特效案例 —— 骷髅爆点

一&#xff0c;环境配置 创建默认地形Landscape&#xff0c;如给地形上材质需确定比例&#xff1b;添加环境主光源DirectionalLight&#xff0c;设置相应的强度和颜色&#xff1b;添加天光反射SkyLight&#xff0c;用于天空反射&#xff1b;添加指数级高度雾ExponentialHeightF…

C++笔记之循环引用与环状引用

C笔记之循环引用与环状引用 code review! 文章目录 C笔记之循环引用与环状引用1.C循环引用和环状引用描述的是同一种现象吗?2.环状引用3.环状引用现象举例——常见环状引用4.解决环状引用——使用前向声明5.环状引用现象举例——使用对象本身可能造成环状引用 1.C循环引用和…

MySQL_4

目录 一、日志 1、错误日志 2、二进制日志 2.1 介绍 2.2 格式 2.3 删除 3、查询日志 4、慢查询日志 二、主从复制 1、概述 2、原理 3、搭建 三、分库分表 1、介绍 1.1背景 1.2拆分策略 1.3垂直拆分 1.4水平拆分 1.5实现技术 2、Mycat概述 2.1 介绍 2.2 安装 2.3…

每日一题2023.7.22|链表的基本操作

链表的基本操作 题目描述 考察链表的基本操作 输入 输入数据只有一组&#xff0c;第一行有n1个整数&#xff0c;第一个整数是这行余下的整数数目n&#xff0c;后面是n个整数。这一行整数用来初始化列表的&#xff0c;并且输入的顺序与列表中的顺序相反&#xff0c;也就是说如果…

htmlCSS-----浮动

目录 前言&#xff1a; 浮动 1.浮动的效果 2.浮动的特点 3.浮动的写法 4.浮动的原理 5.浮动的作用 6.案例 7.浮动的缺陷与解决方式 浮动问题 解决方式 8.补充说明 前言&#xff1a; 浮动是html里面重要的一部分&#xff0c;前面我们学习了三种元素的类型&#xff08;…

element中table的表格更新数据之后保留原来的勾选状态

reserve-selection: 仅对 typeselection 的列有效&#xff0c;类型为 Boolean&#xff0c;为 true 则会在数据更新之后保留之前选中的数据&#xff08;需指定 row-key&#xff09; <el-table ref"table" :data"DataList" :row-key"rowKey"&g…

使用rknn-toolkit2把YOLOV5部署到OK3588上

使用rknn-toolkit2把YOLOV5部署到OK3588上 虚拟环境搭建软件包安装在PC机上运行yolov5目标检测 虚拟环境搭建 首先在PC的ubuntu系统安装虚拟环境&#xff1a; 我的服务器是ubuntu18.04版本&#xff0c;所以安装python3.6 conda create -n ok3588 python3.6 需要键盘输入y&…

【博客681】k8s list机制与resourceVersion语义

k8s list机制与resourceVersion语义 K8s 架构&#xff1a;环形层次视图 对于 K8s 集群&#xff0c;从内到外的几个组件和功能&#xff1a; etcd&#xff1a;持久化 KV 存储&#xff0c;集群资源&#xff08;pods/services/networkpolicies/…&#xff09;的唯一的权威数据&…

实例023 建立字体形状窗体

实例说明 大家都见过不规则形状的窗体吧&#xff0c;那么如何制作一个文字形的窗体呢&#xff1f;文字形窗体一般应用在屏幕提示中&#xff0c;如收款机屏幕等。运行本例&#xff0c;效果如图1.23所示。 技术要点 以前&#xff0c;创建字体形窗体是一个既费时又费人力的过程&…

K8S初级入门系列之七-控制器(Job/CronJob/Daemonset)

一、前言 前一章节我们介绍了RC&#xff0c;RS控制器&#xff0c;其主要针对在线业务Pod部署&#xff0c;比如nginx&#xff0c;这些业务是需要确保7*24持续运行的&#xff0c;还有一类离线业务&#xff0c;比如定时任务&#xff0c;大数据离线计算等&#xff0c;在有任务的才需…

在命令行模式、eclipse console下执行Java程序输入中文的几种情况尝试

介绍 在命令行模式下执行Java程序&#xff0c;如果输入中文&#xff0c;经常会出现和代码中的解码字符集不匹配的情况&#xff0c;导致结果不正确。 在命令行模式下执行Java程序&#xff0c;输入中文&#xff0c;其实是用某种字符集编码成字节流&#xff0c;Java程序读取该字节…

rk3588 双HDMI冲突问题与HDMI不能热插拔问题

问题一:HDMI不能热插拔问题 现象 rk3588在开发时现在发现只能在插入HDMI时上电才能输出信号,而当开机之后,再插入HDMI显示器则无信号。 分析 通过kernel显示,在开机后,插拔HMDI是有log提示的,说明内核能够检测到HDMI的插拔动作。 首先先排查软件问题,尝试重启显示进…

ssm项目配置,不再支持源选项 5。请使用 6 或更高版本。 不再支持目标选项 1.5。请使用 1.6 或更高版本。

ssm项目启动报错&#xff1a; 不再支持源选项 5。请使用 6 或更高版本。 不再支持目标选项 1.5。请使用 1.6 或更高版本 1.模块语言级别 2.设置模块目标字节码版本 3.pom文件指定jdk版本 <properties><project.build.soutceEncoding>UTF-8</project.build.sout…

SpringBoot3自动配置流程 SPI机制 核心注解 自定义starter

1. 自动配置流程 导入starter依赖导入autoconfigure寻找类路径下 META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports文件启动&#xff0c;加载所有 自动配置类 xxxAutoConfiguration 给容器中配置功能组件组件参数绑定到 属性类中。xxxPrope…

运维高级学习---MySQL主从复制

MySQL内建的复制功能是构建大型&#xff0c;高性能应用程序的基础 通过将MySQL的某一台主机 (master)的数据复制到其他主机(slaves)上&#xff0c;并重新执行一遍来执行复制过程中一台服务器充当主服务器&#xff0c;而其他一个或多个其他服务器充当从服务器 为什么要做主从复…