当前位置: 首页 > article >正文

Java 中 List、Set、Map 核心实现类解析

Java中List、Set、Map核心实现类解析

在 Java 里,ListSetMap 是集合框架里的关键接口,其中 ArrayListLinkedList 属于 List 接口的常见实现类,HashMapConcurrentHashMap 则是 Map 接口的常用实现类。

1. ArrayList

简介

ArrayList 是基于动态数组实现的 List 类,它允许存储重复元素,并且可以通过索引快速访问元素。

特点

  • 动态扩容:当数组容量不足时,会自动进行扩容。
  • 随机访问快:可以通过索引在 O ( 1 ) O(1) O(1) 的时间复杂度内访问元素。
  • 插入和删除慢:在数组中间或开头插入、删除元素时,需要移动大量元素,时间复杂度为 O ( n ) O(n) O(n)

示例代码

import java.util.ArrayList;
import java.util.List;

public class ArrayListExample {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        list.add("apple");
        list.add("banana");
        list.add("cherry");

        // 通过索引访问元素
        System.out.println(list.get(1)); // 输出: banana

        // 删除元素
        list.remove(0);
        System.out.println(list); // 输出: [banana, cherry]
    }
}

2. LinkedList

简介

LinkedList 是基于双向链表实现的 List 类,同样允许存储重复元素。

特点

  • 插入和删除快:在链表头部、尾部或中间插入、删除元素时,只需修改指针,时间复杂度为 O ( 1 ) O(1) O(1)
  • 随机访问慢:需要从头或尾开始遍历链表,时间复杂度为 O ( n ) O(n) O(n)
  • 可作为栈、队列使用:提供了 push()pop()offer()poll() 等方法。

示例代码

import java.util.LinkedList;
import java.util.List;

public class LinkedListExample {
    public static void main(String[] args) {
        List<String> list = new LinkedList<>();
        list.add("apple");
        list.add("banana");
        list.add("cherry");

        // 在头部插入元素
        ((LinkedList<String>) list).addFirst("date");
        System.out.println(list); // 输出: [date, apple, banana, cherry]

        // 删除尾部元素
        ((LinkedList<String>) list).removeLast();
        System.out.println(list); // 输出: [date, apple, banana]
    }
}

3. HashMap

简介

HashMap 是基于哈希表实现的 Map 类,用于存储键值对,键不能重复。

特点

  • 快速查找:通过哈希函数计算键的哈希值,平均时间复杂度为 O ( 1 ) O(1) O(1) 来查找、插入和删除元素。
  • 无序:不保证元素的插入顺序。
  • 非线程安全:在多线程环境下可能会出现数据不一致的问题。

示例代码

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

public class HashMapExample {
    public static void main(String[] args) {
        Map<String, Integer> map = new HashMap<>();
        map.put("apple", 1);
        map.put("banana", 2);
        map.put("cherry", 3);

        // 获取元素
        System.out.println(map.get("banana")); // 输出: 2

        // 删除元素
        map.remove("apple");
        System.out.println(map); // 输出: {banana=2, cherry=3}
    }
}

4. ConcurrentHashMap

简介

ConcurrentHashMap 也是基于哈希表实现的 Map 类,是线程安全的,适合在多线程环境下使用。

特点

  • 线程安全:采用分段锁或 CAS(Compare-And-Swap)机制保证线程安全,并发性能高。
  • 高效并发操作:不同的段可以同时进行读写操作,提高了并发处理能力。
  • 无序:不保证元素的插入顺序。

示例代码

import java.util.concurrent.ConcurrentHashMap;
import java.util.Map;

public class ConcurrentHashMapExample {
    public static void main(String[] args) {
        Map<String, Integer> map = new ConcurrentHashMap<>();
        map.put("apple", 1);
        map.put("banana", 2);
        map.put("cherry", 3);

        // 获取元素
        System.out.println(map.get("banana")); // 输出: 2

        // 删除元素
        map.remove("apple");
        System.out.println(map); // 输出: {banana=2, cherry=3}
    }
}

总结

  • 若需要快速随机访问元素,可选择 ArrayList
  • 若频繁进行插入和删除操作,LinkedList 是更好的选择。
  • 单线程环境下,使用 HashMap 存储键值对。
  • 多线程环境下,使用 ConcurrentHashMap 确保线程安全。

http://www.kler.cn/a/554187.html

相关文章:

  • Linux firewalld 开放端口
  • 【图像去噪】论文精读:PromptIR: Prompting for All-in-One Blind Image Restoration
  • Redis过期机制
  • 从线程池到负载均衡:高并发场景下的系统优化实战
  • DeepSeek赋能智慧城市:多场景应用,打造感知-决策-执行的闭环解决方案架构
  • MySQL 的存储引擎有哪些?它们之间有什么区别? MySQL InnoDB 引擎中的聚簇索引和非聚簇索引有什么区别? MySQL 的索引类型有哪些?
  • 青龙圣者的训练脚本训练 Flux lora
  • 基于 Spring Boot + 微信小程序的短文写作竞赛管理系统设计与实现(源码+文档)
  • 力扣-二叉树-236 二叉树的最近公共祖先
  • 基于微信小程序的家政服务预约系统的设计与实现(php论文源码调试讲解)
  • 开源语音克隆项目 OpenVoice V2 本地部署
  • umi react+antd 判断渲染消息提示、input搜索、多选按钮组
  • 使用Java爬虫获取1688店铺所有商品信息(item_search_shop API接口)
  • 前端自动化部署的极简方案
  • 985本硕,网络安全方向,走算法还是走开发?
  • 软件测试面试题精选33道,附答案+文档
  • 前端函数在开发环境与生产环境中处理空字符串的差异及解决方案
  • RMSNorm算子的CUDA实现
  • AI前端开发技能提升与ScriptEcho:拥抱智能时代的新机遇
  • 【C++】 Flow of Control