Java 集合概述

Java 集合框架是 Java 提供的一组用于存储和操作数据的类和接口。集合框架可以方便地进行数据存储、查询、插入和删除等操作。它提供了一些接口和实现类,使得开发者能够灵活处理数据结构。

Java 集合框架的核心接口包括:Collection, Set, List, Queue, Map 等。每个接口有多个具体实现类,如 ArrayList, HashSet, LinkedList, HashMap 等。

1. Collection 接口

Collection 是 Java 集合框架的根接口,所有的集合类都直接或间接地实现了它。Collection 接口有两种常见的子接口:ListSet,分别用于有序集合和无序集合。

2. List 接口

List 是有序集合,允许重复元素。List 中的元素可以按照插入的顺序进行访问。

2.1 常见实现类:

  • ArrayList:基于动态数组实现,查询效率高,插入和删除效率低。
  • LinkedList:基于双向链表实现,插入和删除效率高,查询效率低。
  • Vector:与 ArrayList 类似,但它是线程安全的,性能相对较低。

2.2 示例:使用 ArrayList

import java.util.*;

public class ListExample {
    public static void main(String[] args) {
        // 创建一个 ArrayList
        List<String> list = new ArrayList<>();

        // 添加元素
        list.add("Apple");
        list.add("Banana");
        list.add("Cherry");

        // 遍历列表
        for (String item : list) {
            System.out.println(item);
        }

        // 根据索引获取元素
        System.out.println("Element at index 1: " + list.get(1));

        // 删除元素
        list.remove("Banana");
        System.out.println("After removal: " + list);

        // 获取元素的索引
        int index = list.indexOf("Cherry");
        System.out.println("Index of 'Cherry': " + index);
    }
}

在这个例子中,ArrayList 用于存储字符串,并演示了常见的操作,如添加、获取、删除和查找元素。

3. Set 接口

Set 是无序集合,不允许重复元素。常见的实现类有 HashSet, LinkedHashSet, TreeSet 等。

3.1 常见实现类:

  • HashSet:基于哈希表实现,元素无序,查找速度快,不允许重复元素。
  • LinkedHashSet:与 HashSet 类似,但保留元素的插入顺序。
  • TreeSet:基于红黑树实现,元素按自然顺序排序。

3.2 示例:使用 HashSet

import java.util.*;

public class SetExample {
    public static void main(String[] args) {
        // 创建一个 HashSet
        Set<String> set = new HashSet<>();

        // 添加元素
        set.add("Apple");
        set.add("Banana");
        set.add("Cherry");

        // 尝试添加重复元素
        set.add("Apple");

        // 遍历集合
        for (String item : set) {
            System.out.println(item);
        }

        // 判断元素是否存在
        boolean contains = set.contains("Banana");
        System.out.println("Contains 'Banana': " + contains);

        // 删除元素
        set.remove("Cherry");
        System.out.println("After removal: " + set);
    }
}

在这个示例中,HashSet 存储了多个水果名称,并演示了集合的添加、查找和删除操作。注意,重复元素 "Apple" 被自动忽略。

4. Map 接口

Map 是一个键值对集合,不同于 Collection 接口,Map 存储的是键值对(key-value)。Map 中的每个键都是唯一的,但值可以重复。

4.1 常见实现类:

  • HashMap:基于哈希表实现,键值对存储无序,查找速度快。
  • LinkedHashMap:与 HashMap 类似,但按照插入顺序保留键值对。
  • TreeMap:基于红黑树实现,键值对按键的自然顺序排序。

4.2 示例:使用 HashMap

import java.util.*;

public class MapExample {
    public static void main(String[] args) {
        // 创建一个 HashMap
        Map<String, Integer> map = new HashMap<>();

        // 添加键值对
        map.put("Apple", 1);
        map.put("Banana", 2);
        map.put("Cherry", 3);

        // 获取值
        System.out.println("Apple's value: " + map.get("Apple"));

        // 遍历 Map
        for (Map.Entry<String, Integer> entry : map.entrySet()) {
            System.out.println(entry.getKey() + ": " + entry.getValue());
        }

        // 删除键值对
        map.remove("Banana");
        System.out.println("After removal: " + map);

        // 判断 Map 中是否包含特定的键
        boolean containsKey = map.containsKey("Cherry");
        System.out.println("Contains 'Cherry' key: " + containsKey);
    }
}

在这个例子中,HashMap 用于存储水果名称和对应的数量,并展示了常见的操作,如插入、获取、遍历和删除键值对。

5. Queue 接口

Queue 是一个用于存储元素的集合,遵循 FIFO(先入先出)原则。常见的实现类有 LinkedList, PriorityQueue 等。

5.1 常见实现类:

  • LinkedList:基于双向链表实现,支持队列操作(offer(), poll(), peek())。
  • PriorityQueue:基于优先级队列实现,元素按自然顺序或自定义排序。

5.2 示例:使用 LinkedList 实现 Queue

import java.util.*;

public class QueueExample {
    public static void main(String[] args) {
        // 创建一个 LinkedList 作为 Queue
        Queue<String> queue = new LinkedList<>();

        // 添加元素
        queue.offer("Apple");
        queue.offer("Banana");
        queue.offer("Cherry");

        // 获取并移除队首元素
        System.out.println("Poll: " + queue.poll());

        // 查看队首元素
        System.out.println("Peek: " + queue.peek());

        // 遍历队列
        System.out.println("Queue contents: ");
        for (String item : queue) {
            System.out.println(item);
        }
    }
}

在这个例子中,LinkedList 被用作队列,演示了队列的基本操作,包括元素的添加、查看和删除。

6. 常见操作:

6.1 判断集合是否为空

Set<String> set = new HashSet<>();
if (set.isEmpty()) {
    System.out.println("Set is empty.");
}

6.2 获取集合的大小

List<String> list = new ArrayList<>();
list.add("Apple");
list.add("Banana");
System.out.println("List size: " + list.size());

6.3 清空集合

Set<String> set = new HashSet<>();
set.add("Apple");
set.add("Banana");
set.clear();  // 清空集合
System.out.println("Set after clear: " + set);

7. 总结

Java 集合框架提供了多种不同类型的集合接口和实现类,开发者可以根据实际需求选择最合适的集合类。集合框架不仅支持常见的增、删、查、改等操作,还为性能优化、线程安全、排序等场景提供了不同的解决方案。

  • List:有序集合,允许重复元素。常用实现:ArrayList, LinkedList
  • Set:无序集合,不允许重复元素。常用实现:HashSet, LinkedHashSet, TreeSet
  • Map:键值对集合,键唯一,值可重复。常用实现:HashMap, LinkedHashMap, TreeMap
  • Queue:遵循 FIFO(先入先出)原则的集合。常用实现:LinkedList, PriorityQueue

选择合适的集合类,可以让代码更加高效、简洁。

Java碎碎念 文章被收录于专栏

来一杯咖啡,聊聊Java的碎碎念呀

全部评论

相关推荐

关于我大学本科四年,想了很多,但还是不知道该怎么动笔&nbsp;“大学四年,是我从懵懂少年走向职场青年的转折期。这一路跌跌撞撞,有迷茫,有遗憾,也有成长和决心。”&nbsp;大一刚进来时仍然有高中那股学习劲,经常一个人去图书馆学高等数学,但后面劲头一过便开始在宿舍开启躺平生活(现在想想那段时间真的很爽,无忧无虑)。由于大一担任班干部,所以经常要跟其他班的班干部交流,在此期间认识了隔壁班的一位女生,短发而很可爱,因为很多团建还有比赛都是我们两班一起参加的,而且我和她都是负责人,所以交集很多,后面慢慢地彼此对产生了好感,所以在大一刚开学的2个月后,我们在一起了,彼此之前都是初恋。但当时我真的是太太太直男了,对感情的想...
真烦好烦真烦:骗哥们可以,别把你自己也骗到了就行。哥们被你骗了真无所谓的,打个哈哈就过了。但希望你打完这段话后擦一下眼角,别让眼泪掉在手机屏幕上了就行。你说的这些话,哥们信一下也是没什么的。还能让你有个心里安慰,但这种话说出来骗骗兄弟就差不多得了,哥们信你一下也不会少块肉,但是你别搞得自己也当真了就行。哥们被你骗一下是真无所谓的,兄弟笑笑也就过去了。真不是哥们想要破你防,你擦擦眼泪好好想想,除了兄弟谁还会信你这些话?
点赞 评论 收藏
分享
点赞 评论 收藏
分享
真烦好烦真烦:牛友太有实力了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务