java —— 集合

一、集合的概念

集合可以看做是一个存储对象的容器,与数组不同的是集合可以存储不同类型的对象,但开发中一般不这样做。集合不能存储基本类型的对象,如果存储则需要将其转化为对应的包装类。

二、集合的分类

集合分为 Collection 和 Map 两大接口,具体的实现类继承自这两大接口。

(一)Collection 接口

Collection 接口下面有 3 个子接口,可以视为 3 个分支,常用的是 List 接口和 Set 接口:

1、List 子接口

特点:存放的数据有序且允许重复,主要的实现类有 ArrayList(重点)、LinkedList、Vector,这三个实现类用法相同,具体可见:java —— ArrayList 使用方法

区别:LinkedList 增加了 .addFirst() 方法和 .addLast() 方法,分别表示在首尾添加。

public static void main(String[] args)
{LinkedList list=new LinkedList();list.add("Tom");list.add("Jerry");list.addFirst("Spike");list.addLast("Snoopy");System.out.println(list.get(0));System.out.println(list.get(list.size()-1));
}

2、Set 子接口

特点:存放的对象无序且不允许重复,方法与 ArrayList 相同,但由于无序,因而没有 .get() 方法,常见的实现类有 HashSet、TreeSet。

区别:HashSet 内部对象散列存放,完全无序;TreeSet 内部按照自然升序排列,与添加的先后顺序无关。自定义的类如果要在 TreeSet 内部实现自然排序,要么实现 Comparable 接口,要么自定义 Comparator 比较器。

(二)Map 接口

特点:Map 接口的实现类采用键值对的形式存储对象,主要的实现类是 HashMap、TreeMap、HashTable。虽然内部存储无序,但由于有键值对的存在,可以通过 .get(key k) 的方法获取元素。

区别:HashMap 允许键出现一次“null”,值允许为空;TreeMap 内部按照键的自然升序排列,键不允许为“null”,值允许为空;HashTable 键和值都不允许为空。

常用方法:

.containsKey(key k)判断是否包含指定的键
.containsValue(value v)判断是否包含指定的值
.get(key k)根据键获取值
.isEmpty()判断是否为空
.keySet()返回一个set集合,包含所有的键
.values()返回一个collection集合,包含所有的值
.put(key k,value v)添加元素
.putAll(Map m)将集合m添加至本集合
.remove(key k,value v)根据键删除值
.size()获取集合长度

三、服务集合的三大工具

(一)Iterator 迭代器

用法可见:java —— ArrayList 使用方法 中的 “八、迭代器”。

(二)Comparable 接口和 Comparator 比较器

用法可见:java —— Comparable 接口和 Comparator 比较器

(三)Collections 工具类

Collections 是一个操作 List、Set、Map 等集合的工具类,它提供了一系列静态方法用于对集合执行查询、排序、修改等操作。

1、排序

① 升序:Collections.sort(List list)

② 降序:Collections.reverse(List list)

③ 随即排列:Collections.shuffle(List list)

public static void main(String[] args)
{ArrayList<Integer> ar=new ArrayList();ar.add(5);ar.add(4);ar.add(7);//升序Collections.sort(ar);Iterator ite1=ar.iterator();while(ite1.hasNext()){System.out.println(ite1.next());}//降序Collections.reverse(ar);Iterator ite2=ar.iterator();while(ite2.hasNext()){System.out.println(ite2.next());}//随即排列Collections.shuffle(ar);Iterator ite3=ar.iterator();while(ite3.hasNext()){System.out.println(ite3.next());}
}

2、 修改

① 交换:Collections.swap(List list,int i,int j)

public static void main(String[] args)
{ArrayList<Integer> ar=new ArrayList();ar.add(5);ar.add(4);ar.add(7);Collections.swap(ar,0,2);   //将索引0和2的元素进行交换Iterator ite=ar.iterator();while(ite.hasNext()){System.out.println(ite.next());}
}

② 填充:Collections.fill(List list, Object obj)

public static void main(String[] args)
{ArrayList<Integer> ar=new ArrayList();ar.add(5);ar.add(4);ar.add(7);Collections.fill(ar,10);   //将集合内元素变成10Iterator ite=ar.iterator();while(ite.hasNext()){System.out.println(ite.next());}
}

3、使集合不可变

public static void main(String[] args)
{ArrayList<Integer> ar=new ArrayList();ar.add(5);ar.add(4);ar.add(7);Collection cc=Collections.unmodifiableCollection(ar);   //将集合不可变并返回一个集合cc,此时cc不能执行任何变更    
}

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

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

相关文章

AI技术:探索未来智能的无限可能

随着科技的飞速发展&#xff0c;人工智能&#xff08;AI&#xff09;技术已经成为我们这个时代最引人瞩目的科技力量。从简单的自动化任务到复杂的决策支持系统&#xff0c;AI技术正在以前所未有的速度改变着我们的世界。本文将深入探讨AI技术的定义、发展历程、当前应用、面临…

JavaScript第四讲:函数,作用域,运算符

前言 在JavaScript的广阔天地中&#xff0c;函数、作用域、算术运算符和逻辑运算符是构成代码世界的基石。它们各自扮演着不同的角色&#xff0c;却又紧密相连&#xff0c;共同编织出丰富多彩的程序逻辑。无论是编写一个简单的网页交互&#xff0c;还是构建一个复杂的应用程序…

React-表单受控绑定

概念&#xff1a;使用React组件的状态&#xff08;useState&#xff09;控制表单的状态 1.准备一个React状态值 2.通过value属性绑定状态&#xff0c;通过onChange属性绑定状态同步的函数

js或者es6 已知id为222的对象数据,如何查询并返回该数据中parentId: 7对应的对象父节点数据的对象

要查询并返回id为222的对象数据中parentId为7对应的对象的父节点数据&#xff0c;我们需要遍历整个data数组&#xff0c;找到id为222的对象&#xff0c;并从其父节点中提取信息。由于您提供的data数组中的对象格式存在问题&#xff08;例如&#xff0c;对象的键值对应该用花括号…

2024年5月总结及随笔之快乐五一

1. 回头看 日更坚持了517天。 读《天才与算法&#xff1a;人脑与AI的数学思维》更新完成 2023年至2024年5月底累计码字1177253字&#xff0c;累计日均码字2277字。 2024年5月码字95875字&#xff0c;同比增长66.7%&#xff0c;环比增长9.3%&#xff0c;日均码字数3092字&am…

jenkins快速入门

Jenkins 是啥&#xff1f; Jenkins 是一个超级能干的自动化助手&#xff0c;它的主要任务是帮你自动构建项目、测试代码、部署应用等等&#xff0c;就像你告诉它&#xff1a;“嘿&#xff0c;Jenkins&#xff0c;我改了代码&#xff0c;你帮我看看能不能正常运行&#xff0c;没…

STM32 定时器与PWM的LED控制

学习目标&#xff1a; 1. 使用定时器的某一个通道控制LED周期性亮灭&#xff1b; 2. 采用定时器PWM模式&#xff0c;让 LED 以呼吸灯方式渐亮渐灭。 一、定时器 1、STM32定时器介绍 STMicroelectronics是STM32微控制器中的重要块&#xff0c;具有丰富的外设和功能&#xff0…

Dijkstra求最短路篇一(全网最详细讲解两种方法,适合小白)(python,其他语言也适用)

前言&#xff1a; Dijkstra算法博客讲解分为两篇讲解&#xff0c;这两篇博客对所有有难点的问题都会讲解&#xff0c;小白也能很好理解。看完这两篇博客后保证收获满满。 本篇博客讲解朴素Dijkstra算法&#xff0c;第二篇博客讲解堆优化Dijkstra算法Dijkstra求最短路篇二(全网…

从C++示例理解开闭原则

开闭原则要求我们在编写代码时&#xff0c;尽量不去修改原先的代码&#xff0c;当出现新的业务需求时&#xff0c;应该通过增加新代码的形式扩展业务而不是对原代码进行修改。 假如我们现在有一批产品&#xff0c;每个产品都具有颜色和大小&#xff0c;产品其定义如下&#xf…

父子进程概述

父子进程概述 总结了两篇博客&#xff0c;对父子进程涉及的问题进行了简要总结&#xff08;参考博客在文章末尾&#xff09; 创建进程的目的一般有两个&#xff1a; 一是父进程希望生成一份自己的副本&#xff0c;执行同一个程序中不同的代码片段。二是让子进程执行不同的程序…

python with 和 上下文管理器

with with操作写法简单又安全 文件操作使用with会自动调用关闭文件操作&#xff0c;即使出现异常也会自动调用文件关闭操作 上下文管理器 with语句强大的根本是由上下文管理器支持的 通过open打开的的文件&#xff0c;赋值给的一个变量file&#xff0c;file就是文件对象&am…

linux docker常用命令记录

一、防火墙 1. 开启防火墙 systemctl start firewalld 2.查看防火墙状态 systemctl status firewalld 二、docker 1.启动docker systemctl start docker 2.关闭docker systemctl stop docker 3.重启docker systemctl restart docker4.查看docker 运行状态 systemc…

Kotlin 函数

文章目录 函数的定义函数的返回值参数默认值 & 调用时参数指定函数作用域Lambda 表达式匿名函数内联函数扩展函数中缀函数递归函数 & 尾递归函数 函数的定义 函数可以理解成一个小小的加工厂&#xff0c;给入特定的原材料&#xff0c;它就会给出特定的产品。 fun [接…

知识运维概述

文章目录 知识运维研究现状技术发展趋势 知识运维 由于构建全量的行业知识图谱成本很高&#xff0c;在真实的场景落地过程中&#xff0c;一般遵循小步快走、快速迭代的原则进行知识图谱的构建和逐步演化。知识运维是指在知识图谱初次构建完成之后&#xff0c;根据用户的使用反馈…

小白跟做江科大32单片机之对射式红外传感器计次

原理部分 1中断示意图&#xff0c;中断会打断主函数的执行&#xff0c;终端执行完成之后再返回主函数继续执行 2.STM32中断 这些灰色的是内核中断 这些白色的是普通中断 3.NVIC统一管理中断&#xff0c;每个中断通道都拥有16个可编程的优先等级&#xff0c;可对优先级进行分组…

独孤思维:10个T的赚钱资料,要不要

01 今天有一个通过网站引流过来的粉丝。 问我&#xff0c;为啥网站不设置付费&#xff0c;这样直接转化成网站vip。 我说&#xff0c;我想把用户沉淀到私域。 其实这个问题&#xff0c;独孤在早年做网站的时候也思考过。 前端给资料&#xff0c;是为了后端引流加个人号&am…

java-this关键字

Java 中的 this 关键字是一个特殊的引用&#xff0c;它代表当前对象。在 Java 中&#xff0c;this 关键字可以在类的构造函数、方法、块和初始化语句中使用。this 关键字的主要作用是&#xff1a; 1. 引用当前对象的属性&#xff08;Field&#xff09;&#xff1a;使用 this 关…

OCP题库

Q2.分析下面的语句和输出: mysql> SHOW GRANTS FOR jsmith; ------------------------------------------------------------------------------------------------------------------- IGrants for jsmith% | -----------------------------------------------------------…

Redis缓存(笔记一:缓存介绍和数据库启动)

目录 1、NoSQL数据库简介 2、Redis介绍 3、Redis(win系统、linux系统中操作) 3.1 win版本Redis启动 3.2 linux版本Redis启动 1、NoSQL数据库简介 技术的分类&#xff1a;&#xff08;发展史&#xff09; 1、解决功能性的问题&#xff1a;Java、Jsp、RDBMS、Tomcat、HTML、…

Filter和ServletContext和Listener

目录 Filter案例 解决全站乱码问题 登录权限校验 ServletContext对象 Listener&#xff08;监听器&#xff09; Filter案例 解决全站乱码问题 我们每次访问每个servlet都要书写处理请求和响应乱码的代码&#xff0c;这样代码十分冗余&#xff0c;所以我们可以在过滤中 We…