Java集合(Collection、Iterator、Map、Collections)介绍与使用

前言

本讲我们将继续来讲解Java的其他重要知识点------Java集合。Java集合框架是Java编程语言中一个重要的部分,它提供了一套预定义的类和接口,供程序员使用数据结构来存储和操作一组对象。Java集合框架主要包括两种类型:一种是集合(Collection),存储一个元素列表,另一种是图(Map),存储键/值对映射。 我们之前讲解了数组,数组的大小长度是固定的,后期无法动态扩展,所以在项目开发中我们基本会用集合来存储数据,Java 集合就像一种容器,可以动态地把多个对象的引用放入容器中。Java集合框架的应用非常广泛,几乎在任何涉及到数据处理的场景中都可以使用。例如,你可以使用List来存储用户的输入,使用Set来消除重复的元素,使用Map来存储用户的姓名和邮箱地址等。

一、Collection

Collection接口:它是集合框架的根接口,所有的集合类都实现这个接口或者其子接口。它定义了集合的基本操作,如添加元素、删除元素、遍历元素等。

关于Collection的类关系结构图如下:

1.List接口

创建结构:

javascript 复制代码
List<T> list = new 子类<>();

这是Collection接口的子接口,代表一个有序、可重复的集合。List接口提供了一些方法来处理元素列表,如添加元素到列表的特定位置,获取指定位置的元素等。

javascript 复制代码
import java.util.ArrayList;  
import java.util.List;  
  
public class ListExample {  
    public static void main(String[] args) {  
        List<String> list = new ArrayList<>();  
        list.add("Apple");  
        list.add("Banana");  
        list.add("Cherry");  
        System.out.println(list);  // prints [Apple, Banana, Cherry]  
    }  
}

运行结果:

2.Set接口

创建结构:

javascript 复制代码
Set<T> set = new 子类<>(); 

这也是Collection接口的子接口,代表一个无序、不可重复的集合。Set接口提供了一些方法来处理元素集合,如检查集合是否包含特定元素,获取集合的大小等

javascript 复制代码
import java.util.HashSet;  
import java.util.Set;  
  
public class SetExample {  
    public static void main(String[] args) {  
        Set<String> set = new HashSet<>();  
        set.add("Apple");  
        set.add("Apple");  
        set.add("Banana");  
        set.add("Cherry");  
        System.out.println(set);  // prints [Apple, Banana, Cherry] (order may vary)  
    }  
}

运行结果,可以看到Set去重了,只有一个Apple

​编辑

3.Iterator迭代器接口

iterator迭代器接口在Java集合框架中起着非常重要的作用,它提供了一种方法,允许程序员顺序访问聚合对象中的每个元素,而无需暴露该对象的内部表示。

迭代器模式是一种设计模式,它提供了一种方法,可以以一致的方式遍历一个聚合对象中的元素,而无需暴露该对象的底层表示。迭代器模式包括三个角色:迭代器(Iterator)、聚合对象(Aggregate)和客户端(Client)。

在Java中,迭代器模式是通过Iterator接口和Collection接口实现的。Collection接口定义了遍历集合的基本操作,而Iterator接口定义了遍历元素的方法。

Iterator接口具有以下方法:

  • boolean hasNext():返回一个布尔值,表示是否还有下一个元素可以遍历。
  • E next():返回当前遍历到的元素,并将迭代器的位置向前移动一个位置。
  • void remove():删除当前遍历到的元素。

代码案例:

javascript 复制代码
import java.util.ArrayList;  
import java.util.Iterator;  
  
public class IteratorExample {  
    public static void main(String[] args) {  
        // 创建一个ArrayList  
        ArrayList<String> list = new ArrayList<String>();  
        list.add("Apple");  
        list.add("Banana");  
        list.add("Cherry");  
        list.add("Date");  
        list.add("Elderberry");  
  
        // 获取Iterator对象  
        Iterator<String> it = list.iterator();  
  
        // 使用hasNext()方法检查是否还有下一个元素  
        while(it.hasNext()){  
            // 使用next()方法获取下一个元素  
            String fruit = it.next();  
            System.out.println(fruit);  
        }  
    }  
}

二、Map

javascript 复制代码
    Map是一个独立于Collection接口的接口,代表一个具有**键值对**的映射。Map接口提供了一些方法来处理键值对,如根据键获取值,根据键添加或更新值等

1.Map类结构

Map接口是Java集合框架中的一部分,它提供了许多方法来操作键值对,一般我们使用Map的子类HashMap。以下是Map的一些常用方法:

  1. put(K key, V value):将一个键值对添加到Map中。如果键已经存在,则更新对应的值。
  2. get(Object key):根据指定的键从Map中获取对应的值。
  3. remove(Object key):从Map中删除指定的键值对。
  4. containsKey(Object key):检查Map中是否包含指定的键。
  5. containsValue(Object value):检查Map中是否包含指定的值。
  6. size():返回Map中的键值对数量。
  7. clear():从Map中删除所有的键值对。
javascript 复制代码
import java.util.HashMap;  
import java.util.Map;  
  
public class MapExample {  
    public static void main(String[] args) {  
        // 创建一个HashMap实例  
        Map<String, Integer> map = new HashMap<>();  
  
        // 添加键值对到Map中  
        map.put("apple", 1);  
        map.put("banana", 2);  
        map.put("orange", 3);  
  
        // 获取指定键的值  
        int value = map.get("banana");  
        System.out.println("Banana value: " + value);  
  
        // 检查Map中是否包含指定的键和值  
        boolean containsKey = map.containsKey("orange");  
        boolean containsValue = map.containsValue(2);  
        System.out.println("Contains key 'orange': " + containsKey);  
        System.out.println("Contains value 2: " + containsValue);  
  
        // 删除指定的键值对  
        map.remove("apple");  
        System.out.println("After removing 'apple': " + map);  
  
        // 获取Map中的键值对数量  
        int size = map.size();  
        System.out.println("Size of map: " + size);  
  
        // 清空Map中的所有键值对  
        map.clear();  
        System.out.println("After clearing map: " + map);  
    }  
}

三、Collections工具类

Collections工具类是一个位于java.util包下的操作Set、List和Map等集合的实用程序类。这个类提供了一系列静态的方法对集合的元素进行排序、查询和修改等操作。

例如,它提供了一个静态的binarySearch方法,这个方法可以在一个已排序的列表中搜索一个元素,如果找到了就返回该元素的索引,如果没找到就返回-1。此外,Collections类也提供了一些其他的方法,例如shuffle方法可以将一个列表的元素随机排序,sort方法可以对一个列表的元素进行排序等。

如果你想让你的集合对象变得线程安全,你可以使用Collections类提供的synchronizedList、synchronizedMap等方法。这些方法返回的集合对象是线程安全的,可以在多线程环境下使用。

举例来说:

排序集合元素:

javascript 复制代码
List<Integer> numbers = Arrays.asList(3, 1, 4, 1, 5, 9);  
Collections.sort(numbers);  
System.out.println(numbers); // 输出:[1, 1, 3, 4, 5, 9]

查找集合中的最大值和最小值:

javascript 复制代码
List<Integer> numbers = Arrays.asList(3, 1, 4, 1, 5, 9);  
int max = Collections.max(numbers);  
int min = Collections.min(numbers);  
System.out.println("Max: " + max); // 输出:Max: 9  
System.out.println("Min: " + min); // 输出:Min: 1

反转集合中的元素顺序:

javascript 复制代码
List<Integer> numbers = Arrays.asList(3, 1, 4, 1, 5, 9);  
Collections.reverse(numbers);  
System.out.println(numbers); // 输出:[9, 5, 1, 4, 1, 3]

随机打乱集合中的元素顺序:

javascript 复制代码
List<Integer> numbers = Arrays.asList(3, 1, 4, 1, 5, 9);  
Collections.shuffle(numbers);  
System.out.println(numbers); // 输出:[1, 5, 3, 9, 4, 1](每次运行结果不同)

总结

Java集合类提供了一组强大的、灵活的、高效的工具,使得程序员可以更加轻松和高效地处理数据。Java集合类提供了一组统一的接口,如Collection、List、Set和Map等,这些接口定义了一些公共的操作方法,使得不同的集合类可以使用相同的代码进行操作。在实际开发中,我们也是经常使用

相关推荐
落尘29812 分钟前
Bean 的作用域和生命周期
后端
是店小二呀13 分钟前
处理Linux下磁盘空间不足问题的实用指南
后端
落尘29814 分钟前
如何通过 JWT 来解决登录认证问题
后端
是店小二呀14 分钟前
处理Linux下内存泄漏问题的诊断与解决方法
后端
倚栏听风雨21 分钟前
IDEA 插件开发 对文件夹下的类进行 语法检查
后端
郝同学的测开笔记26 分钟前
云原生探索系列(十七):Go 语言sync.Cond
后端·云原生·go
uhakadotcom27 分钟前
持续写作的“农耕思维”:如何像农民一样播种,收获稳定成长与收入
后端·面试·github
Java中文社群44 分钟前
国内首个「混合推理模型」Qwen3深夜开源,盘点它的N种对接方式!
java·人工智能·后端
JohnYan1 小时前
工作笔记 - ASN.1密钥结构和编码研究
javascript·后端·安全
学习OK呀1 小时前
日常docker的实操命令场景
后端