Java一分钟之-高级集合框架:LinkedList与TreeSet

本文涉及的产品
RDS DuckDB + QuickBI 企业套餐,8核32GB + QuickBI 专业版
简介: 【5月更文挑战第17天】这篇博客对比了Java集合框架中的LinkedList和TreeSet。LinkedList是双向链表,适合中间插入删除,但遍历效率低且占用空间大;TreeSet基于红黑树,保证元素有序且不重复,插入删除速度较LinkedList慢但查找快。选择时需根据操作需求和性能考虑。

Java集合框架提供了丰富的数据结构,其中LinkedList和TreeSet是两种常用但性质不同的容器。在这篇博客中,我们将探讨这两个类的特性、常见问题和易错点,并通过代码示例来加深理解。
image.png

1. LinkedList

定义

LinkedList是一种双向链表,它实现了List接口,允许在列表中间插入和删除元素,而不必移动元素。

常见问题与易错点

  • 遍历效率:LinkedList的随机访问效率低,因为需要从头或尾开始遍历。
  • 空间消耗:每个元素需要额外存储前一个和后一个元素的引用,所以空间消耗比ArrayList大。

代码示例

import java.util.LinkedList;

public class LinkedListExample {
   
   
    public static void main(String[] args) {
   
   
        LinkedList<String> linkedList = new LinkedList<>();
        linkedList.addFirst("First");
        linkedList.addLast("Last");
        linkedList.add(1, "Second");

        for (String item : linkedList) {
   
   
            System.out.println(item);
        }
    }
}

2. TreeSet

定义

TreeSet是一个基于红黑树实现的有序集合,它实现了Set接口,保证元素无重复且按特定顺序排列。

常见问题与易错点

  • 排序规则:默认按照自然排序,自定义对象需实现Comparable接口,否则需要传入Comparator。
  • 性能影响:插入和删除操作的时间复杂度为O(log n),比LinkedList慢,但比LinkedList的随机访问快。

代码示例

import java.util.TreeSet;

class CustomObject implements Comparable<CustomObject> {
   
   
    private int value;

    public CustomObject(int value) {
   
   
        this.value = value;
    }

    @Override
    public int compareTo(CustomObject other) {
   
   
        return Integer.compare(this.value, other.value);
    }

    @Override
    public String toString() {
   
   
        return "Value: " + value;
    }
}

public class TreeSetExample {
   
   
    public static void main(String[] args) {
   
   
        TreeSet<CustomObject> treeSet = new TreeSet<>();
        treeSet.add(new CustomObject(3));
        treeSet.add(new CustomObject(1));
        treeSet.add(new CustomObject(2));

        for (CustomObject obj : treeSet) {
   
   
            System.out.println(obj);
        }
    }
}

在选择LinkedList或TreeSet时,要考虑以下因素:

  • 如果需要频繁进行中间插入和删除操作,LinkedList是更好的选择。
  • 对于有序集合且不关心插入/删除性能,TreeSet能提供快速的查找和排序。

了解这两个容器的特性和适用场景,可以帮助我们更有效地利用Java集合框架,提高代码性能。在实际使用中,避免上述问题,可以使代码更加高效和稳定。

目录
相关文章
|
8月前
|
Java 大数据 API
Java Stream API:现代集合处理与函数式编程
Java Stream API:现代集合处理与函数式编程
385 100
|
8月前
|
Java API 数据处理
Java Stream API:现代集合处理新方式
Java Stream API:现代集合处理新方式
376 101
|
7月前
|
安全 前端开发 Java
《深入理解Spring》:现代Java开发的核心框架
Spring自2003年诞生以来,已成为Java企业级开发的基石,凭借IoC、AOP、声明式编程等核心特性,极大简化了开发复杂度。本系列将深入解析Spring框架核心原理及Spring Boot、Cloud、Security等生态组件,助力开发者构建高效、可扩展的应用体系。(238字)
|
7月前
|
消息中间件 缓存 Java
Spring框架优化:提高Java应用的性能与适应性
以上方法均旨在综合考虑Java Spring 应该程序设计原则, 数据库交互, 编码实践和系统架构布局等多角度因素, 旨在达到高效稳定运转目标同时也易于未来扩展.
658 8
|
7月前
|
存储 安全 Java
《数据之美》:Java集合框架全景解析
Java集合框架是数据管理的核心工具,涵盖List、Set、Map等体系,提供丰富接口与实现类,支持高效的数据操作与算法处理。
|
7月前
|
存储 算法 安全
Java集合框架:理解类型多样性与限制
总之,在 Java 题材中正确地应对多样化与约束条件要求开发人员深入理解面向对象原则、范式编程思想以及JVM工作机理等核心知识点。通过精心设计与周密规划能够有效地利用 Java 高级特征打造出既健壮又灵活易维护系统软件产品。
206 7
|
存储 安全 Java
java集合框架及其特点(List、Set、Queue、Map)
java集合框架及其特点(List、Set、Queue、Map)
|
存储 安全 Java
【Java集合类面试二十五】、有哪些线程安全的List?
线程安全的List包括Vector、Collections.SynchronizedList和CopyOnWriteArrayList,其中CopyOnWriteArrayList通过复制底层数组实现写操作,提供了最优的线程安全性能。
【Java集合类面试二十三】、List和Set有什么区别?
List和Set的主要区别在于List是一个有序且允许元素重复的集合,而Set是一个无序且元素不重复的集合。
|
安全 Java 程序员
深入Java集合框架:解密List的Fail-Fast与Fail-Safe机制
本文介绍了 Java 中 List 的遍历和删除操作,重点讨论了快速失败(fail-fast)和安全失败(fail-safe)机制。通过普通 for 循环、迭代器和 foreach 循环的对比,详细解释了各种方法的优缺点及适用场景,特别是在多线程环境下的表现。最后推荐了适合高并发场景的 fail-safe 容器,如 CopyOnWriteArrayList 和 ConcurrentHashMap。
387 5