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

Java常用数据结构操作方法全面总结

目录

  • 一、List接口及其实现类
  • 二、Set接口及其实现类
  • 三、Map接口及其实现类
  • 四、Queue/Deque队列
  • 五、Stack栈
  • 六、树形结构
  • 七、注意事项与最佳实践
  • 总结

一、List接口及其实现类

核心实现类

  • ArrayList:基于动态数组
  • LinkedList:基于双向链表

常用操作方法

List<String> list = new ArrayList<>();

// 增
list.add("元素");         // 末尾添加
list.add(0, "首位插入"); // 指定位置插入

// 删
list.remove(0);         // 按索引删除
list.remove("元素");    // 按对象删除

// 查
String element = list.get(0);       // 按索引获取
int index = list.indexOf("元素");   // 获取元素索引

// 改
list.set(0, "新值");     // 修改指定位置

// 遍历
for (String s : list) { /*...*/ }
list.forEach(System.out::println);

特点对比

  • ArrayList:随机访问O(1),插入删除O(n)
  • LinkedList:随机访问O(n),头尾操作O(1)

二、Set接口及其实现类

主要实现类

  • HashSet:无序存储
  • LinkedHashSet:保持插入顺序
  • TreeSet:自动排序

常用操作

Set<Integer> set = new HashSet<>();

// 增
set.add(10);        // 成功返回true

// 删
set.remove(10);     // 成功返回true

// 查
boolean exists = set.contains(10);

// 遍历
Iterator<Integer> it = set.iterator();
set.forEach(e -> System.out.println(e));

特殊方法

// TreeSet专属方法
TreeSet<Integer> sortedSet = new TreeSet<>();
sortedSet.first();        // 获取最小元素
sortedSet.tailSet(50);    // 获取≥50的子集

三、Map接口及其实现类

主要实现类

  • HashMap:快速查找
  • LinkedHashMap:保持插入顺序
  • TreeMap:键值排序

基础操作

Map<String, Integer> map = new HashMap<>();

// 增/改
map.put("key", 100);      // 返回旧值或null

// 删
map.remove("key");        // 返回被删值

// 查
int value = map.get("key"); // 不存在返回null

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

Java8+增强方法

map.getOrDefault("key", 0);     // 安全获取
map.putIfAbsent("key", 100);    // 不存在时插入
map.compute("key", (k,v) -> v+1); // 计算新值

四、Queue/Deque队列

常用实现类

  • LinkedList:双端队列
  • PriorityQueue:优先级队列

队列操作

Queue<String> queue = new LinkedList<>();

// 入队
queue.offer("元素");     // 推荐使用
queue.add("元素");       // 可能抛异常

// 出队
String head = queue.poll(); // 返回并移除头元素
String peek = queue.peek(); // 仅查看不移除

双端队列操作

Deque<String> deque = new ArrayDeque<>();
deque.offerFirst("头插");
deque.offerLast("尾插");
deque.pollFirst();
deque.pollLast();

五、Stack栈

推荐实现方式

Deque<Integer> stack = new ArrayDeque<>();

// 入栈
stack.push(1);       // 等效addFirst()

// 出栈
int top = stack.pop(); // 等效removeFirst()

六、树形结构

TreeMap特殊方法

TreeMap<Integer, String> treeMap = new TreeMap<>();

// 范围查询
Map.Entry<Integer, String> lower = treeMap.lowerEntry(50); // 最大key<50的条目
SortedMap<Integer, String> subMap = treeMap.subMap(20, 80); // [20,80)区间

七、注意事项与最佳实践

  1. 线程安全

    • 多线程环境使用ConcurrentHashMapCopyOnWriteArrayList
    • Collections.synchronizedList()包装非线程安全集合
  2. 性能考量

    • 随机访问:优先ArrayList
    • 频繁插入删除:考虑LinkedList
    • 大数据量去重:使用HashSet
  3. 遍历删除陷阱

    // 错误方式:会抛ConcurrentModificationException
    for (String s : list) {
        if(s.equals("del")) list.remove(s);
    }
    
    // 正确方式:使用迭代器
    Iterator<String> it = list.iterator();
    while(it.hasNext()){
        if(it.next().equals("del")) it.remove();
    }
    
  4. 空值处理

    • HashMap允许null键/值
    • TreeMap不允许null键
    • ConcurrentHashMap完全禁止null

相关文章:

  • 二:python基础(黑马)
  • 国家重点研发计划申报答辩PPT设计制作美化ppt模板下载
  • Linux | I.MX6ULL开发板固件烧录所需文件详述(9)
  • BGP路由协议之选路原则
  • 【算法】一维前缀和与二维前缀和
  • Pod的调度
  • foobar2000 VU Meter Visualisation 插件汉化版 VU表
  • 【HFP】蓝牙Hands-Free Profile(HFP)核心技术解析
  • 20250405周赛-S
  • zookeeper基本概念和核心作用
  • Apache Arrow 使用
  • C++ atomic 原子操作
  • Superset 问题
  • 第十章: 可观测性_《凤凰架构:构建可靠的大型分布式系统》
  • 从数据流程梳理简单GPT模型各部分结构
  • [DP]多重背包
  • 【征程 6】工具链 VP 示例中日志打印解读
  • LeetCode hot 100—删除链表的倒数第N个节点
  • 基于kotlin native的C与kotlin互相调用
  • 数值稳定性