List集合,Set集合

article/2025/8/25 5:13:43

List集合:

1 ArrayList集合:

 优点:查找快

缺点: 元素增删慢

注:日常开发使用最多的功能就是查询数据,遍历数据,所以该集合是最常用的集合。

常用方法:

 方法测试:

新建一个集合添加数据:

  ArrayList list = new ArrayList();int start = list.size();System.out.println("初始长度:"+start);list.add("张三");list.add("李四");list.add("王五");int end = list.size();System.out.println("添加数据后的长度:"+end);

遍历集合:

将指定元素添加到指定元素上:

list.add(1,"牛六");

添加后的集合:

 返回指定位置的元素:

  System.out.println("返回的元素:"+list.get(1));

 返回结果:

删除元素 方法:
 

        list.remove("张三");Object s = list.remove(0);int size = list.size();System.out.println("删除后的集合长度"+size);

remove里面的参数可以填下标也可以填元素,两者都有返回值,填元素的时候返回值是Boolean型,填下标的时候返回的就是删除的具体元素。

删除结果:

修改元素:

   list.set(0,"李中正");System.out.println("修改后的遍历:");for (int i = 0; i <list.size() ; i++) {System.out.println(list.get(i));}

 返回指定元素:

 LinkdeList集合:

常用方法:

 大部分方法与Array里面的方法差不多,这里只说明两个,pop方法和push方法:

这个方法的源代码如下:

 这两个方法从实现层次上来说,就是removeFirst()和addfirst()两个方法的调用,上述所以方法的使用案例:

public static void main(String[] args) {LinkedList linkedList = new LinkedList();int start=linkedList.size();System.out.println("集合初始长度为:"+start);linkedList.add("张三");linkedList.add("张三");linkedList.add("李四");linkedList.add("王五");linkedList.add("牛六");int size=linkedList.size();System.out.println("加入数据后的长度:"+size);System.out.println("初始遍历:");for (int i = 0; i <linkedList.size() ; i++) {System.out.println(linkedList.get(i));}/*添加元素至首位*/linkedList.addFirst("六六");System.out.println(linkedList.get(0));/*添加元素至末尾*/linkedList.addLast("默默");System.out.println("添加末尾元素后的遍历:");for (int i = 0; i <linkedList.size() ; i++) {System.out.println(linkedList.get(i));}Object shouwei=linkedList.getFirst();System.out.println("返回的首位元素:"+shouwei);Object mowei=linkedList.getLast();System.out.println("返回的末尾元素:"+mowei);Object removefirst=linkedList.removeFirst();System.out.println("删除的首位元素:"+removefirst);Object removeend=linkedList.removeLast();System.out.println("删除的末尾元素:"+removeend);Object l=linkedList.pop();//弹出,把第一个元素删除并返回,无参数System.out.println("弹出返回的元素:"+l);System.out.println("用完pop方法后的集合遍历:");for (int i = 0; i <linkedList.size() ; i++) {System.out.println(linkedList.get(i));}linkedList.push("推入元素");//没有返回值,同时也是添加到第一位,括号内无参数System.out.println("推入后的元素遍历:");for (int i = 0; i <linkedList.size() ; i++) {System.out.println(linkedList.get(i));}boolean b=linkedList.isEmpty();//集合是否为空System.out.println(b);}

打印结果:

 Set接口:

java.util.Set接口和java.util.List接口一样,同样继承自Collection接口,它与Collection接口中的方法基本一致,并没有对Collection接口进行功能上的扩充,只是比Collection接口更加严格了。与List接口不同的是,Set接口都会以某种规则保证存入的元素不出现重复。

HashSet集合:

为set接口的一个实现类,存储元素不重复,且没有顺序。

HashSet是根据对象的哈希值来确定元素在集合中的存储位置,因此具有良好的存储和查找性能。保证元素唯一性的方式依赖于:hashCodeequals方法。

eg:

public class HashSetDemo {public static void main(String[] args) {//创建 Set集合HashSet<String>  set = new HashSet<String>();//添加元素set.add(new String("cba"));set.add("abc");set.add("bac"); set.add("cba");  //遍历for (String name : set) {System.out.println(name);}}
}

存储结果:

cba
abc
bac

可以看到数据并没有重复。

当关于集合里面存储的是对象的时候,我们为了仍旧保持数据的唯一性,需要重写hascode和equals方法。

eg:

Student类:

public class Student {private String name;private int age;public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}@Overridepublic String toString() {return "Student{" +"name='" + name + '\'' +", age=" + age +'}';}public Student() {}public Student(String name, int age) {this.name = name;this.age = age;}@Overridepublic boolean equals(Object o) {if (this == o) return true;if (o == null || getClass() != o.getClass()) return false;Student student = (Student) o;return age == student.age &&Objects.equals(name, student.name);}@Overridepublic int hashCode() {return Objects.hash(name, age);}
}

测试类:
 

public class TestMyType {public static void main(String[] args) {HashSet<Object> set = new HashSet<>();Student student = new Student("张三",20);Student student1 = new Student("李四", 21);Student student2 = new Student("王五", 22);Student student3 = new Student("张三", 20);Student student4= new Student("张三", 26);set.add(student);set.add(student1);set.add(student2);set.add(student3);set.add(student4);for (Object o : set) {System.out.println(o);}}

存储结果:

 这里有一个疑问,为什么要同时重写两个方法?能不能只重写一个方法呢?

经过查阅资料,发现如果不同时重写两个方法的话,会有隐藏的bug存在,这里推荐大家看一下下面这位大佬的博客,解释的很详细。作者id:leeeeJay,博客文章名叫从一道面试题那个。


http://chatgpt.dhexx.cn/article/uQrKwrkU.shtml

相关文章

集合Set

集合的一个关键的特点就是不能存放重复的元素&#xff0c;二分搜索树是一个非常好的实现集合的底层数据结构 1、二分搜索树实现集合&#xff1a; set接口 package Set;public interface Set<E> {void add(E e);boolean contains(E e);void remove(E e);int getSize();b…

C++ 集合set 详解

1.关于set C STL 之所以得到广泛的赞誉&#xff0c;也被很多人使用&#xff0c;不只是提供了像vector, string, list等方便的容器&#xff0c;更重要的是STL封装了许多复杂的数据结构算法和大量常用数据结构操作。vector封装数组&#xff0c;list封装了链表&#xff0c;map和se…

set集合使用详解

set集合使用详解 “曾经年少爱追梦&#xff0c;一心只想往前飞。”那会高二&#xff0c;刚刚接触c语言&#xff0c;一发不可收拾&#xff0c;还记得当时为了一个想法和朋友一起想到半夜。现在我还是那个少年&#xff0c;那个又菜又爱玩的少年。 咳咳&#xff0c;set集合容器&am…

OBS录屏如何设置录制窗口大小?

1、在显示录制窗口区右键→滤镜→添加一个裁剪/填充→调整左右顶底部里的数字进行裁剪&#xff0c;调整到合适的录屏大小即可。

如何使用OBS 进行屏幕录制

软件界面 默认的保存位置 C:\Users\XXXX\Videos 如何对屏幕进行录制&#xff08;默认也录制了音频信号&#xff09;

obs屏幕录制暂停

OBS Studio 24.0 RC1 发布 – 有大惊喜OBS Studio 24.0 RC1 发布 – 有大惊喜 OBS Studio 24.0 RC1于今天下午发布&#xff0c;增加了在录制时暂停的功能&#xff0c;允许“无缝地实时删除视频片段”。OBS Studio 24.0 RC1还支持在发生拥塞时自动调整比特率&#xff0c;而不是丢…

OBS录屏软件使用指南

OBS录屏软件使用指南 1 简介2 录屏使用步骤2.1 来源2.2 设置2.2.1 输出2.2.2 视频 2.3 录制 3 总结 1 简介 2 录屏使用步骤 2.1 来源 在来源标签&#xff0c;添加显示器捕获。 2.2 设置 在录屏时&#xff0c;需要进行录屏设置&#xff0c;点击菜单栏文件->设置 2.2.1…

【录屏】OBS如何区域录制

OBS如何区域录制 按住alt拖动红色边框即可隐藏拖动的区域

OBS 录制简单操作说明

把从B站Sky灬素颜看到的关于OBS录制视频的部分文字记录下 视频地址 录制界面捕获 1.首先&#xff0c;新建一个场景。 2.在新建的场景下&#xff0c;点击右边的来源窗口&#xff0c;新建一个捕获方式。 &#xff08;此处注意被捕获的窗口不能最小化&#xff0c;需要浮在桌…

OBS录制黑屏的解决办法

前些时间打开下载了好久一直没打开的obs录屏软件&#xff0c;想把老师的直播网课录下来重复看&#xff0c;但是发现&#xff0c;无论是用显示器捕获还是窗口捕获都是黑屏&#xff0c;然后就百度找了挺多关键词的&#xff0c;有的方法奏效有的不行有的不全面&#xff0c;为了方便…

obs直播录屏软件下载使用教程-制作短视频录制视频教程

现在是短视频的时代&#xff0c;我们需要学一点视频处理技术&#xff0c;录屏也是一项基本能力 下载软件 这里我下载的是obs软件&#xff0c;可以录屏可以直播 https://obsproject.com/ 因为网络原因&#xff0c;一直没有下载成功&#xff0c;开启特殊上网&#xff0c;才算一点…

OBS录制设置基本介绍(1)

1.OBS OBS&#xff08;Open Broadcasting Software&#xff09;是一款免费且开源的跨平台直播和录制软件&#xff0c;它可以将电脑屏幕、摄像头、麦克风和音频源等多种内容混合在一起并进行直播或录制。 1)基本操作介绍&#xff1a; 下载 OBS官网 在OBS官网&#xff08;htt…

直播、录屏软件OBS Studio下载安装操作教程

直播、录屏软件OBS Studio下载安装操作教程 OBS Studio是一款非常强大的免费开源无广告&#xff0c;国外开发的软件&#xff0c;录屏只是它的一部分功能&#xff0c;对于需要录制屏幕又要录制摄像头的也很适合&#xff0c;比如现在的直播行业&#xff0c;这款软件是一个不二之…

录屏软件OBS录屏时噪声大的解决办法

1、选择麦克风的滤镜 2、点击右下角号&#xff0c;选择噪声抑制 3、点击确定即可&#xff0c;这样设置就完成了&#xff0c;最后关闭滤镜就可以无噪声录制视频了 你的点赞、评论、收藏和关注是我创作的动力。 感谢各位看官老爷

解决OBS录屏软件窗口采集不全的问题

问题描述 使用OBS录屏软件的窗口采集功能的时候&#xff0c;有时候窗口对象只能捕获到一部分&#xff0c;不能全屏都是目标对象。 解决办法

OBS视频录制及其直播推流教程(超详细,非硬核)

录制软件&#xff1a; OBS &#xff08;我用过很多录制软件&#xff0c;OBS是最好用的&#xff0c;没有之一&#xff0c;而且完全免费&#xff09; 功能&#xff1a;直播&#xff0c;录像&#xff08;录制游戏或者网课等等&#xff09; 我准备将我的教程分为多个部分&#xf…

OBS 安装与考试参数设置及屏幕无法完全捕获、录屏不完整的解决方法

目录 一、OBS 的下载与安装 二、OBS 考试参数设置 三、问题解决 &#xff08;1&#xff09;屏幕无法完全捕获 &#xff08;2&#xff09;录屏不完整 一、OBS 的下载与安装 官网&#xff08;Open Broadcaster Software | OBS&#xff09;选择对应的版本下载&#xff0c;自…

OBS 录制没有声音怎么办?

1.检查obs设置- 音频 -是否是默认选项 2.检查win10 是否允许使用麦克风 1&#xff09;右下角出现麦克风标识 2&#xff09;设置-隐私-麦克风&#xff0c;查看允许放开你的麦克风是否打开 如果上述还是为解决问题&#xff0c;那么接下来的就是关键 3. 控制面板 - 硬件和声音 …

20221130如何修改OBS录屏的存储路径?

obs https://obsproject.com/ OBS OBS Open Broadcaster Software OBS Studio Latest Release 28.1.2 - November 5th obs 录屏 更换保存位置 https://jingyan.baidu.com/article/67508eb4c854fbddca1ce481.html 20221130如何修改OBS录屏的存储路径&#xff1f; 如何修改OBS录…

CSP在线考试环境 | OBS录屏软件下载安装和设置教程

今年由于疫情原因&#xff0c;很多省份都申请在线参加CCF CSP-J/S考试。 本次在线考试采用双重保险方式&#xff0c;不仅要求有腾讯会议端的监考&#xff0c;还要求在考试电脑上要安装OBS录屏软件&#xff0c;进行全程录屏。最后&#xff0c;将两份录制的视频文档传回给CCF&am…