Java集合框架是面试和开发中高频考点,很多新手分不清List、Set、Map的区别,不知道什么时候该用ArrayList、LinkedList,什么时候该用HashSet、TreeSet。

今天用一张表+代码示例,把Java集合的核心知识点讲透,新手看完就能选型~

一、集合框架整体结构

Collection(根接口)
├─ List(有序、可重复)
│  ├─ ArrayList(数组实现,查询快、增删慢)
│  ├─ LinkedList(链表实现,增删快、查询慢)
│  └─ Vector(线程安全,低效,不推荐)
└─ Set(无序、不可重复)
   ├─ HashSet(哈希表实现,无序、唯一)
   ├─ TreeSet(红黑树实现,有序、唯一)
   └─ LinkedHashSet(哈希表+链表,插入有序)

Map(键值对,键不可重复)
├─ HashMap(哈希表实现,无序、键唯一)
├─ TreeMap(红黑树实现,按键有序)
├─ LinkedHashMap(哈希表+链表,插入有序)
└─ Hashtable(线程安全,低效,不推荐)

二、核心接口对比

接口 有序性 重复性 底层实现 典型场景
List 有序(插入顺序) 可重复 数组/链表 有序列表、队列
Set 无序/有序 不可重复 哈希表/红黑树 去重、集合运算
Map 无序/有序 键不可重复 哈希表/红黑树 键值对存储、字典

三、List接口实战

1. ArrayList(最常用)
import java.util.ArrayList;
import java.util.List;

public class ListDemo {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        // 添加元素
        list.add("张三");
        list.add("李四");
        list.add("张三"); // 可重复
        // 遍历
        for (String name : list) {
            System.out.println(name);
        }
        // 获取元素
        System.out.println(list.get(0)); // 张三
        // 删除元素
        list.remove(1);
    }
}
2. LinkedList
import java.util.LinkedList;

public class LinkedListDemo {
    public static void main(String[] args) {
        LinkedList<String> queue = new LinkedList<>();
        // 队列操作(先进先出)
        queue.addLast("A");
        queue.addLast("B");
        System.out.println(queue.removeFirst()); // A
    }
}

四、Set接口实战

1. HashSet(去重)
import java.util.HashSet;
import java.util.Set;

public class SetDemo {
    public static void main(String[] args) {
        Set<Integer> set = new HashSet<>();
        set.add(1);
        set.add(2);
        set.add(1); // 自动去重
        System.out.println(set.size()); // 2
    }
}
2. TreeSet(排序)
import java.util.TreeSet;

public class TreeSetDemo {
    public static void main(String[] args) {
        TreeSet<Integer> set = new TreeSet<>();
        set.add(3);
        set.add(1);
        set.add(2);
        System.out.println(set); // [1,2,3](自动升序)
    }
}

五、Map接口实战

import java.util.HashMap;
import java.util.Map;

public class MapDemo {
    public static void main(String[] args) {
        Map<String, Integer> score = new HashMap<>();
        // 存储键值对
        score.put("张三", 90);
        score.put("李四", 85);
        // 获取值
        System.out.println(score.get("张三")); // 90
        // 遍历
        for (Map.Entry<String, Integer> entry : score.entrySet()) {
            System.out.println(entry.getKey() + ": " + entry.getValue());
        }
    }
}

六、选型指南

  • 需要有序列表、频繁查询 → 用ArrayList

  • 需要频繁增删、队列/栈结构 → 用LinkedList

  • 需要去重、无序存储 → 用HashSet

  • 需要去重+排序 → 用TreeSet

  • 需要键值对存储、无序 → 用HashMap

  • 需要键值对+排序 → 用TreeMap

总结

Java集合框架的核心是“接口定义规范,实现类提供具体功能”,新手先掌握List/Set/Map的区别和常用实现类,再深入理解底层数据结构(数组、链表、哈希表、红黑树)。

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐