java中的集合

article/2025/11/8 2:14:02

1.集合概述

Java的集合框架是由很多接口、抽象类、具体类组成的,都位于java.util包中。

2.Collection接口

Collection 接口-定义了存取一组对象的方法,其子接口Set和List分别定义了存储方式。
Set 中的数据对象没有顺序且不可以重复。

List中的数据对象有顺序且可以重复。

3.List接口及其实现类

 List继承了Collection接口,有三个实现的类。
- ArrayList
数组列表,数据采用数组方式存储。
-LinkedList
链表
-Vector
数组列表,添加同步锁,线程安全的

public class VectorDemo {public static void main(String[] args) {Vector<String> vector=new Vector();vector.add("a");vector.add("a");vector.add("a");vector.add("a");vector.add("a");System.out.println(vector);}}

ArrayList实现了长度可变的数组,在内存中分配连续的空间
遍历元素和随机访问元素的效率比较高。

LinkedList采用链表存储方式插入、删除元素时效率比较高

ArrayList的常用方法
add(int index, E element)
get(int index)
indexOf(Object o)
lastIndexOf(Object o)
remove(int index)    删除并返回指定位置元素
removeRange (int fromIndex, int toIndex) 删除指定区间的元素(子类继承使用)
set(int index, E element)

 ArrayList<Integer> arrayList=new ArrayList();arrayList.add(100);arrayList.add(1,10);arrayList.add(20);arrayList.add(20);arrayList.add(20);arrayList.add(20);arrayList.add(20);arrayList.add(20);arrayList.add(20);arrayList.add(20);//arrayList.clear();System.out.println(arrayList.contains(20));System.out.println(arrayList.isEmpty());System.out.println(arrayList.get(0));System.out.println(arrayList.remove(1));//删除System.out.println(arrayList.remove((Object)100));//删除某个值Object [] array=arrayList.toArray();System.out.println(Arrays.toString(array));//转数组System.out.println(arrayList);

LinkedList的常用方法
add(int index,Object element)
addFirist(Object element)
addLast(Object element)
get(int index)
removeFirst()
removeLast()
remove(int index)
getFirst()
getLast()

LinkedList<String> linklist=new LinkedList();linklist.add("a");linklist.add("a");linklist.add("a");linklist.add("a");linklist.add("a");//linklist.clear();linklist.addFirst("e");linklist.addLast("e");//peek 检索不删除//poll 检索并删除System.out.println(linklist.getFirst());System.out.println(linklist.pollLast());System.out.println(linklist.removeFirst());System.out.println(linklist.indexOf("a"));System.out.println(linklist.set(0,"s"));System.out.println(linklist.size());System.out.println(linklist);

List接口集合迭代

● for循环遍历
● 增强for循环的遍历
● 迭代器遍历(Iterator)

ArrayList<String> list = new ArrayList<>();list.add("a");list.add("a");list.add("b");list.add("c");list.add("d");/*//1.for循环for(int i=0;i<list.size();i++){String s=list.get(i);if(s.equals("a")){list.remove(s);i--;}}System.out.println(list);for循环会集合删除后会自动进位*//*//2.增强for循环for(String s:list){System.out.println(s);}*///迭代器iterator(Iterator<String> iterator = list.iterator();while (iterator.hasNext()) {String s = iterator.next();if (s.equals("a")) {iterator.remove();}}System.out.println(list);

4.Set 接口

● Set接口继承了Collection接口。
Set中所存储的元素是不重复的,但是是无序的, Set中的元素是没有索引的
● Set接口有两个实现类


● HashSet
HashSet类中的元素不能重复,即彼此调用equals方法比较,都返回false。
底层数据结构是哈希表+链表
哈希表依赖于哈希值存储

public class HashSetDemo1 {public static void main(String[] args) {HashSet<String> hashSet=new HashSet<>();hashSet.add("a");hashSet.add("白色");int a="红色".hashCode();System.out.println(a);hashSet.add("黑色");int a1="种地".hashCode();System.out.println(a1);hashSet.add("c");hashSet.add("d");System.out.println(hashSet);}
}
public class HashSetDemo {public static void main(String[] args) {HashSet<Car> hashSet=new HashSet<>();Car car1= new Car("宝马1",101);Car car5= new Car("宝马1",101);Car car2= new Car("宝马2",102);Car car3= new Car("宝马3",103);Car car4= new Car("宝马4",104);//在Car类中重写了hashcode方法,先对hash值进行比较,在对内容进行比较hashSet.add(car1);hashSet.add(car2);hashSet.add(car3);hashSet.add(car4);hashSet.add(car5);System.out.println(hashSet);}


● TreeSet
可以给Set集合中的元素进行指定方式的排序。存储的对象必须实现Comparable接口。
TreeSet底层数据结构是二叉树(红黑树是一种自平衡的二叉树)。

public class TreeSetDemo {public static void main(String[] args) {TreeSet<Car> treeSet=new TreeSet<>();Car car1= new Car("宝马1",101);Car car5= new Car("宝马1",101);Car car2= new Car("宝马2",102);Car car3= new Car("宝马3",103);Car car4= new Car("宝马4",104);treeSet.add(car1);treeSet.add(car3);treeSet.add(car5);treeSet.add(car2);treeSet.add(car4);System.out.println(treeSet);}

5.Set接口集合的迭代

遍历方式
增强for循环
迭代器遍历

  ArrayList<String> list = new ArrayList<>();list.add("a");list.add("b");list.add("c");list.add("d");ListIterator<String> listIterator=list.listIterator();while(listIterator.hasNext()){String s=listIterator.next();System.out.println(s);}ListIterator<String> listIterator1=list.listIterator(list.size());while(listIterator.hasPrevious()){String s=listIterator.previous();System.out.println(s);}

上文中用到的Car类中重写了一系列方法。

package com.ffyc.collection;public class Car  implements Comparable<Car> {String name;int num;public int compareTo(Car o) {return o.num-this.num;}public Car(String name, int num) {this.name = name;this.num = num;}@Overridepublic boolean equals(Object o) {if (this == o) return true;if (o == null || getClass() != o.getClass()) return false;Car car = (Car) o;if (num != car.num) return false;return name != null ? name.equals(car.name) : car.name == null;}@Overridepublic int hashCode() {int result = name != null ? name.hashCode() : 0;result = 31 * result + num;return result;}@Overridepublic String toString() {return "Car{" +"name='" + name + '\'' +", num=" + num +'}';}}


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

相关文章

Java——集合(超详细超级全)

集合 Java 集合类可以用于存储数量不等的多个对象&#xff0c;还可用于保存具有映射关系的关联数组。 在这里主要讲一些我们平常很常用的一些接口和一些实现类。 Java 集合可分为 Collection 和 Map 两种体系&#xff1a; Collection接口&#xff1a;单列数据&#xff0c;定…

java集合(超详细)

1 - 概述 所有的集合类和集合接口都在java.util包下。 在内存中申请一块空间用来存储数据&#xff0c;在Java中集合就是替换掉定长的数组的一种引用数据类型。 2 - 集合与数组的区别 长度区别 数组长度固定&#xff0c;定义长了造成内存空间的浪费&#xff0c;定义短了不够用…

java创建多线程的方法

Java中是可以创建多个线程的&#xff0c;每个线程都有自己的名字和时间戳。下面我们来看看创建多个线程的方法。 创建多个线程&#xff0c;需要使用到 Thread类中的 create方法。需要注意的是&#xff0c;不是所有的线程都可以使用 create方法来创建&#xff0c;只有当这些线程…

Java创建多线程的五种方法

Java创建多线程的五种方法 Java创建多线程的五种方法&#xff08;一&#xff09;继承Thread类1&#xff0e;实现描述2&#xff0e;具体步骤3&#xff0e;代码实现4&#xff0e;注意事项 &#xff08;二&#xff09;实现Runnable接口1&#xff0e;实现描述2&#xff0e;具体步骤…

Java创建线程(Lambda表达式创建线程)

一、创建线程三种方式 1.1 继承Thread类创建线程类&#xff08;main线程与t线程交替执行&#xff09; 1.2 通过Runnable接口创建线程类 弊端是:不能直接使用Thread中的方法需要先获取到线程对象后,才能得到Thread的方法,代码复杂 上述代码中Thread.currentThread()方法返回当…

java创建线程的四种方法

第一种: 通过继承Thread类创建线程 第二种: 通过实现Runnable接口创建线程 这两种早已烂记于心,这里就不作过多的介绍, 主要介绍其源码 Thread类 implements Runnable thread空线程的run方法 是判断target是否存在实,再执行target实例中的run方法 public void run(){if(th…

Java创建线程

目录 既然说到线程&#xff0c;在这里就给大家普及一下线程。 线程&#xff08;Thread&#xff09;&#xff1a; 那么&#xff0c;进程是什么呢&#xff1f; 接下来&#xff0c;就让我们步入主题&#xff1a; 在 Java 中&#xff0c;是这样说线程的&#xff1a; 创建一个新…

Java创建多线程的8种方式

目录 1、继承Thread类&#xff0c;重写run()方法 2、实现Runnable接口&#xff0c;重写run() 3、匿名内部类的方式 4、带返回值的线程(实现implements Callable<返回值类型>)————以上3种方式&#xff0c;都没有返回值且都无法抛出异常。 5、定时器(java.util.Timer)…

java如何创建线程

java如何创建线程 1. java如何创建线程1.1 通过继承Thread类来创建线程1.2 通过实现Runnable接口来创建线程1.3 通过匿名内部类来创建线程1.4 lambda表达式1.5 通过实现Runnable接口的方式创建线程目标类的优缺点 1. java如何创建线程 一个线程在Java中使用一个Thread实例来描…

Java多线程 - Java创建线程的4种方式

文章目录 1. Java创建线程有哪几种方式&#xff1f;1.1 线程创建方法一&#xff1a;继承Thread类创建线程类1.2 线程创建方法二&#xff1a;实现Runnable接口创建线程目标类1.5 线程创建方法三&#xff1a;使用Callable和FutureTask创建线程1.6 线程创建方法四&#xff1a;通过…

java创建线程的四种方式

1&#xff09;继承Thread类创建线程 如图所示: //继承Thread类 class Aclass extends Thread{//输出100以内的偶数Overridepublic void run() {for (int i 1; i <100; i) {System.out.println(getName()":"i);}} } 测试: Thread t1 new Aclass();t1.setName…

Java创建线程的七种方法,全网最全面总结~

目录 前言 一、继承Thread&#xff0c;重写run方法 二、实现Runnable接口&#xff0c;重写run方法 三、使用匿名内部类创建 Thread 子类对象 四、使用匿名内部类&#xff0c;实现Runnable接口 五、lambda表达式 六、实现Callable接口 七、使用线程池创建线程 前言 属于基…

java创建线程(Thread)的5种方式

java创建线程&#xff08;Thread&#xff09;的5种方式 方式一&#xff1a;继承于Thread类方式二&#xff1a;实现Runnable接口方式三&#xff1a;实现Callable接口方式四&#xff1a;使用线程池方式五&#xff1a;使用匿名类 方式一&#xff1a;继承于Thread类 步骤&#xff1…

前端开发与vscode开发工具介绍

文章目录 1、前端开发2、vscode安装和使用2.1、下载地址2.2、插件安装2.3、设置字体大小2.4、开启完整的Emmet语法支持2.5、创建项目2.6、保存工作区2.7、新建文件夹和网页 1、前端开发 前端工程师“Front-End-Developer”源自于美国。大约从2005年开始正式的前端工程师角色被…

IntelliJ IDE 插件开发指南

作者介绍 洪进锋&#xff0c;字节跳动后端研发工程师&#xff0c;参与过高并发系统&#xff08;百万QPS&#xff09;设计与研发工作。在开源项目方面混过 Sharding-JDBC 的 PR。个人开发的 IntelliJ IDE 插件 Redis Manager&#xff0c;目前在官方插件库中下载量 30K&#xff0…

真的要转到云IDE了吗?VS Code的开源IDE

云IDE产品介绍 云IDE使用教程 免费使用地址&#xff1a;点击【云IDE】&#xff0c;即可开始创建工作空间啦~ 前言 CSDN最新产品【云IDE】来啦&#xff01;【云IDE】将为各位技术er一键秒级构建云开发环境&#xff0c;提升开发效率&#xff01; 1. 什么是IDE&#xff1f; 做…

编辑器和IDE到底有什么区别呢?

其实很多接触了开发的工作人员都会接触以上 两种工具&#xff0c;编辑器&#xff0c;IDE。 其实我最刚开始的时候真的分不清&#xff0c;感觉都是开发的&#xff0c;上班以后呢慢慢就发现了两者的不同。 刚刚看知乎&#xff0c;发现一位哥们说话挺有意思的&#xff0c;比喻也…

初识Node.js之IDE的选择

其实就如同Java一样&#xff0c;Node可以选择的IDE不止一种&#xff0c;常见的比如webstorm&#xff0c;Visual Studio Code&#xff0c;其实都可以应付日常的工作需求&#xff0c;今天我要介绍的IDE&#xff0c;其实就是Visual Studio Code(接下来简称vs code)。怎么评价vs co…

【编辑器】VSCode的Web前端(html,css,JavaScript)开发环境打造

1、安装VScode和浏览器 VScode安装&#xff1a;https://code.visualstudio.com/ Chrome安装&#xff1a;https://www.google.com/intl/zh-CN/chrome/ node.js 安装&#xff1a;https://nodejs.org/zh-cn/download/ Web前端开发主要包括html&#xff0c;css&#xff0c;JavaScr…

IDE集成开发工具-IDEA(一)之IDE的概念

IDE的概念 集成开发环境&#xff08;IDE&#xff0c;Integrated Development Environment &#xff09;是用于提供程序开发环境的应用程序&#xff0c;一般包括代码编辑器、编译器、调试器和图形用户界面等工具。集成了代码编写功能、分析功能、编译功能、调试功能等一体化的开…