Java中的集合 简述

article/2025/11/7 23:50:12

目录

          前言

        一、创建集合对象

        1、接口怎么创建集合对象

        2、实现类怎么创建集合对象

        二、不同集合对象的遍历

        1、Collection集合的遍历方式之一:Iterator迭代器 

        2、Set集合的遍历 —— 增强for

         3、Map集合的遍历方式一:键找值

         4、Map集合的遍历方式二:键值对对象找键和值

         三、Collection框架中实现比较要实现什么接口


          前言

Java中的集合框架
  1. Collection:这是个接口。单列集合接口。
    1. List:元素可重复的、有序的集合接口。
      1.  ArrayList:是底层为数组,查询效率高的实现类。
      2.  LinkedList:是底层为链表,增删效率高的实现类。
    2. Set:元素不可重复、无序的、没有带索引的方法的集合接口。
      1.  HashSet:是底层为哈希表,元素不可重复,且存入和读取元素顺序不一致(即无序)的实现类。
      2.  TreeSet:是底层为红黑树,元素不可重复,可以用自然排序Comparable 或者排序器Comparator 给元素排序的实现类。
  2. Map:也是个接口。双列集合接口。
    1.  HashMap:是底层为哈希表,key不能重复且无序的实现类。
    2.  TreeMap:是底层为红黑树,key不能重复,可以用自然排序 / 排序器实现元素排序的实现类。

        一、创建集合对象

        1、接口怎么创建集合对象

        采用多态的方式通过具体实现类创建对象。

        比如:

CollectionCollection<String> collection = new ArrayList<String>();
ListList<String> list = new ArrayList<>();
SetSet<String> set = new HashSet<>();
MapMap<String, String> map = new HashMap<String, String>();

        2、实现类怎么创建集合对象

        用new创建。

        比如:

ArrayListArrayList<String> arrayList = new ArrayList<>();
LinkedListLinkedList<String> linkedList = new LinkedList<>();
HashSetHashSet<String> hs = new HashSet<>();
TreeSetTreeSet<Integer> ts = new TreeSet<Integer>();
HashMapHashMap<String, String> hashMap = new HashMap<String, String>();
TreeMapTreeMap<String, String> treeMap= new TreeMap<String, String>();

        二、不同集合对象的遍历

        一般我们都是用普通for循环遍历访问元素,但在这里如果仍旧使用普通for循环遍历,会出现一些问题:效率不高、集合对象没有索引方法等等。下面就来讲讲不同集合对象怎么遍历访问元素。

        1、Collection集合的遍历方式之一:Iterator迭代器 

        Iterator迭代器是集合的专用的遍历方式。通过集合的iterator​() 方法得到,所有我们说它是依赖于集合而存在的。

         Iterator<E> iterator​() ,返回此集合中元素的迭代器。

        1.1  Iterator 中的常用方法

E next​() 返回迭代中的下一个元素。 
boolean hasNext​() 如果迭代具有更多元素,则返回 true 。 

        1.2  代码示例

//创建集合对象
Collection<String> c = new ArrayList<String>();//添加元素
c.add("hello");
c.add("world");
c.add("java");//Iterator<E> iterator():返回此集合中元素的迭代器,通过集合的iterator()方法得到
Iterator<String> it = c.iterator();//用while循环判断
while (it.hasNext()) {String s = it.next();System.out.println(s);
}
运行结果

其他遍历Collection 集合的方法:普通for循环、增强for。

        2、Set集合的遍历 —— 增强for

        由于Set 集合中没有带索引的方法,所以不能用普通的for循环遍历,可以使用Iterator迭代器或者增强for。前面已经讲解了Iterator迭代器的使用,这里就举个增强for的例子遍历Set 集合。

//创建Set集合对象
Set<String> set = new HashSet<>();//添加元素
set.add("hello,");
set.add("world!");//遍历集合
for (String s : set){System.out.println(s);
}
运行结果

         3、Map集合的遍历方式一:键找值

  1. 获取所有键的集合。用keySet()方法实现
  2. 遍历键的集合,获取到每一个键。用增强for实现
  3. 根据键去找值。用get(Object key)方法实现
//创建集合对象
Map<String, String> map = new HashMap<String, String>();//添加元素
map.put("牛奶", "奶牛");
map.put("蜜蜂", "蜂蜜");
map.put("上海", "海上");//获取所有键的集合。用keySet()方法实现
Set<String> keySet = map.keySet();
//遍历键的集合,获取到每一个键。用增强for实现
for (String key : keySet) {//根据键去找值。用get(Object key)方法实现String value = map.get(key);System.out.println(key + "," + value);
}
运行结果

         4、Map集合的遍历方式二:键值对对象找键和值

  1. 获取所有键值对对象的集合
    1. Set<Map.Entry<K,V>> entrySet():获取所有键值对对象的集合
  2. 遍历键值对对象的集合,得到每一个键值对对象
    • 用增强for实现,得到每一个Map.Entry
  3. 根据键值对对象获取键和值
    • 用getKey()得到键
    • 用getValue()得到值
//创建集合对象
Map<String, String> map = new HashMap<String, String>();//添加元素
map.put("张无忌", "赵敏");
map.put("郭靖", "黄蓉");
map.put("杨过", "小龙女");//获取所有键值对对象的集合
Set<Map.Entry<String, String>> entrySet = map.entrySet();
//遍历键值对对象的集合,得到每一个键值对对象
for (Map.Entry<String, String> me : entrySet) {//根据键值对对象获取键和值String key = me.getKey();String value = me.getValue();System.out.println(key + "," + value);
}
运行结果

         三、Collection框架中实现比较要实现什么接口

        要实现比较有两种方式:

        第一种,实体类实现Comparable<T>接口,并实现 compareTo(T t) 方法,我们称为内部比较器、自然排序。

        示例:直接在学生类中实现Comparable<T>接口,并重写compareTo(T t)方法。

public class Student implements Comparable<Student> {private String name;private int age;//有参/无参构造方法……//getter and setter方法……@Overridepublic int compareTo(Student o) {//年龄从小到大排序int num = this.age - o.age;//升序//int num = o.age - this.age;//降序//年龄相同时,按照姓名的字母顺序排序int num2 = num == 0?this.name.compareTo(o.name):num;return num2;}
}

        第二种,创建一个外部比较器,这个外部比较器要实现Comparator接口的 compare(T t1, T t2)。

        示例:在创建对象时使用匿名内部类实现Comparator接口,并重写compare(T t1, T t2)方法。

public class Student {private String name;private int age;//有参/无参构造方法……//getter and setter方法……
}
TreeSet<Student> ts = new TreeSet<>(new Comparator<Student>() {@Overridepublic int compare(Student o1, Student o2) {//年龄从小到大排序int num = o1.getAge() - o2.getAge();//年龄相同时,按照姓名的字母顺序排序int num2 = num==0?o1.getName().compareTo(o2.getName()):num;return num2;}
});

        集合没什么好讲的,主要就是了解各种集合对象的特点,根据不同的需求使用不同的集合对象。当然如果面试的时候被问到了集合,你需要关注了解的不单单是它们的特点,更多的是它们的底层和原理。Java集合的面试题,大家可以自行百度搜索。

 


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

相关文章

Java中List集合的介绍

List 是什么 JavaList集合是指由JavaList接口以及List接口的所有实现类组成的集合。 List集合中的元素允许重复,各元素的顺序放是对象插入的顺序.类似Java中的数组,用户可通过使用索引(元素在集合中的位置)来访问集合中的元素. 1.Java集合介绍 Java集合就像一个容器&#xff0…

java中的集合 最全面的集合讲解

集合只能存储对象&#xff0c;长度可变的数据结构 Collection是一个接口&#xff0c;没有办法创建对象&#xff0c;所以需要它的子类来创建对象&#xff0c;创建对象的时候可以使用多态。 一、Collection中通用的方法 方法&#xff1a; 创建集合对象&#xff0c;会自动重写t…

Java中List集合与Set集合

目录 一、List 集合 1、List 接口特点 2、List 接口中常用的方法 3、List 集合存储数据结构 4、ArrayList 集合ArrayList 集合是最常用的集合&#xff0c;是用存储数据结构&#xff0c;元素增删慢&#xff0c;查找快。 5、LinkedList 集合 6、Vector 集合 二、Set 接口…

Java中的集合类

Java中所有的类都位于java.util包下&#xff0c;主要由两个接口派生出来。分别是Collection&#xff08;集合&#xff09;和Map.Collection&#xff08;映射集合&#xff09;&#xff0c;包含了List和Set两大分支。Map是一个映射接口。Set、Map、List&#xff08;集&#xff0c…

java中的集合详解

Collection接口和Map接口 1 Collection集合 1.1 集合概述 集合&#xff1a;集合是java中提供的一种容器&#xff0c;可以用来存储多个数据。集合和数组既然都是容器&#xff0c;它们有啥区别呢&#xff1f; 数组的长度是固定的。集合的长度是可变的。 数组中存储的是同一类型的…

java中的集合

1.集合概述 Java的集合框架是由很多接口、抽象类、具体类组成的&#xff0c;都位于java.util包中。 2.Collection接口 Collection 接口&#xff0d;定义了存取一组对象的方法&#xff0c;其子接口Set和List分别定义了存储方式。Set 中的数据对象没有顺序且不可以重复。 List…

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年开始正式的前端工程师角色被…