前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java集合(Collection、Iterator、Map、Collections)介绍与使用

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

原创
作者头像
小明爱吃火锅
发布2023-09-18 21:04:28
3240
发布2023-09-18 21:04:28
举报
文章被收录于专栏:小明说Java小明说Java

前言

本讲我们将继续来讲解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

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等,这些接口定义了一些公共的操作方法,使得不同的集合类可以使用相同的代码进行操作。在实际开发中,我们也是经常使用

?

我正在参与2023腾讯技术创作特训营第二期有奖征文,瓜分万元奖池和键盘手表

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 一、Collection
    • 1.List接口
      • 2.Set接口
      • 二、Map
        • 1.Map类结构
        • 三、Collections工具类
        • 总结
        相关产品与服务
        容器服务
        腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
        http://www.vxiaotou.com