Java-集合框架-List,Set,Map,队列

文章目录

Java集合框架:List,Set,Map,队列

Java集合框架是什么?

Java集合框架是一组用于存储和操作数据的类和接口。它提供了不同类型的集合,如List,Set,Map和队列,以满足不同的需求。

  • List:有序的集合,允许重复的元素。
  • Set:无序的集合,不允许重复的元素。
  • Map:键值对的集合,每个元素都包含一个键和一个值。
  • 队列:先进先出(FIFO)的集合,用于处理按顺序排列的元素。

如何使用?

List

List接口的常用实现类有ArrayList和LinkedList。可以使用以下步骤使用List集合:

  1. 导入List类和实现类的包:import java.util.List;import java.util.ArrayList;
  2. 创建List对象:List<String> list = new ArrayList<>();
  3. 添加元素:list.add("元素1");
  4. 访问元素:String element = list.get(0);
  5. 遍历集合:使用for循环或者迭代器遍历集合。

Set

Set接口的常用实现类有HashSet和TreeSet。可以使用以下步骤使用Set集合:

  1. 导入Set类和实现类的包:import java.util.Set;import java.util.HashSet;
  2. 创建Set对象:Set<String> set = new HashSet<>();
  3. 添加元素:set.add("元素1");
  4. 判断元素是否存在:boolean contains = set.contains("元素1");
  5. 遍历集合:使用for-each循环遍历集合。

Map

Map接口的常用实现类有HashMap和TreeMap。可以使用以下步骤使用Map集合:

  1. 导入Map类和实现类的包:import java.util.Map;import java.util.HashMap;
  2. 创建Map对象:Map<String, Integer> map = new HashMap<>();
  3. 添加键值对:map.put("键1", 1);
  4. 获取值:int value = map.get("键1");
  5. 遍历集合:使用for-each循环遍历键或值。

队列

队列接口的常用实现类有LinkedList和PriorityQueue。可以使用以下步骤使用队列:

  1. 导入队列类和实现类的包:import java.util.Queue;import java.util.LinkedList;
  2. 创建队列对象:Queue<String> queue = new LinkedList<>();
  3. 添加元素:queue.add("元素1");
  4. 获取并删除队列头部的元素:String element = queue.poll();
  5. 遍历队列:使用迭代器遍历队列。

什么场景使用?

  • List:适用于需要按照元素的插入顺序进行操作的场景,可以包含重复的元素。
  • Set:适用于需要保持唯一性的元素集合,不允许重复的元素。
  • Map:适用于需要通过键值对进行操作的场景,每个键都是唯一的。
  • 队列:适用于需要按照先进先出顺序处理元素的场景。

优缺点是什么?

List

优点:

  • 可以按照插入顺序访问元素。
  • 可以包含重复的元素。

缺点:

  • 在大型数据集合中查找元素的效率较低。

Set

优点:

  • 元素不重复,保持唯一性。
  • 查找元素的效率较高。

缺点:

  • 无序,不能按照插入顺序访问元素。

Map

优点:

  • 可以通过键值对进行操作,便于查找和修改元素。
  • 键是唯一的,保持唯一性。

缺点:

  • 无序,不能按照插入顺序访问元素。

队列

优点:

  • 按照先进先出的顺序处理元素。

缺点:

  • 无法在中间插入或删除元素。

Java示例

List示例

java 复制代码
import java.util.List;
import java.util.ArrayList;

public class ListExample {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        
        list.add("元素1");
        list.add("元素2");
        list.add("元素3");
        
        for (String element : list) {
            System.out.println(element);
        }
    }
}

Set示例

java 复制代码
import java.util.Set;
import java.util.HashSet;

public class SetExample {
    public static void main(String[] args) {
        Set<String> set = new HashSet<>();
        
        set.add("元素1");
        set.add("元素2");
        set.add("元素3");
        
        for (String element : set) {
            System.out.println(element);
        }
    }
}

Map示例

java 复制代码
import java.util.Map;
import java.util.HashMap;

public class MapExample {
    public static void main(String[] args) {
        Map<String, Integer> map = new HashMap<>();
        
        map.put("键1", 1);
        map.put("键2", 2);
        map.put("键3", 3);
        
        for (String key : map.keySet()) {
            int value = map.get(key);
            System.out.println(key + ": " + value);
        }
    }
}

队列示例

java 复制代码
import java.util.Queue;
import java.util.LinkedList;

public class QueueExample {
    public static void main(String[] args) {
        Queue<String> queue = new LinkedList<>();
        
        queue.add("元素1");
        queue.add("元素2");
        queue.add("元素3");
        
        while (!queue.isEmpty()) {
            String element = queue.poll();
            System.out.println(element);
        }
    }
}

以上示例分别展示了List,Set,Map和队列的基本用法。根据具体需求选择合适的集合类型,以提高代码的效率和可读性。

对比

维度 List Set Map 队列
实现类 ArrayList、LinkedList、Vector等 HashSet、LinkedHashSet、TreeSet等 HashMap、LinkedHashMap、TreeMap等 LinkedList、PriorityQueue等
元素 有序的、可重复的 无序的、不可重复的 以键值对的形式存储、键不可重复、值可重复的数据结构 先进先出的数据结构、支持插入、删除、查找等操作
存储 按索引顺序存储 无序存储 以键值对的形式存储 按插入顺序存储
访问 可以通过索引值对列表进行访问和修改 不能直接访问、可以通过迭代器进行访问 可以通过键值对进行访问和修改 可以通过队列头和队列尾进行访问和修改
性能 读取速度快,添加和删除速度较慢 添加和删除速度快,读取速度较慢 读取速度快,添加和删除速度较慢 添加和删除速度快,读取速度较慢
应用 适用于需要按索引顺序访问的情况 适用于需要去重的情况 适用于需要以键值对形式存储数据的情况 适用于先进先出的数据操作的情况
相关推荐
超级大只老咪4 小时前
数组相邻元素比较的循环条件(Java竞赛考点)
java
hh随便起个名4 小时前
力扣二叉树的三种遍历
javascript·数据结构·算法·leetcode
小浣熊熊熊熊熊熊熊丶4 小时前
《Effective Java》第25条:限制源文件为单个顶级类
java·开发语言·effective java
毕设源码-钟学长4 小时前
【开题答辩全过程】以 公交管理系统为例,包含答辩的问题和答案
java·eclipse
啃火龙果的兔子4 小时前
JDK 安装配置
java·开发语言
星哥说事4 小时前
应用程序监控:Java 与 Web 应用的实践
java·开发语言
派大鑫wink4 小时前
【JAVA学习日志】SpringBoot 参数配置:从基础到实战,解锁灵活配置新姿势
java·spring boot·后端
xUxIAOrUIII5 小时前
【Spring Boot】控制器Controller方法
java·spring boot·后端
Dolphin_Home5 小时前
从理论到实战:图结构在仓库关联业务中的落地(小白→中级,附完整代码)
java·spring boot·后端·spring cloud·database·广度优先·图搜索算法
醇氧5 小时前
org.jetbrains.annotations的@Nullable 学习
java·开发语言·学习·intellij-idea