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

简介: 【5月更文挑战第21天】本文对比了Java集合框架中的LinkedList和TreeSet。LinkedList是双向链表,实现List接口,适合中间插入删除,但遍历效率低;TreeSet基于红黑树,实现Set接口,保证元素有序且无重复,插入删除速度较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集合框架,提高代码性能。在实际使用中,避免上述问题,可以使代码更加高效和稳定。

目录
相关文章
|
2天前
|
存储 Java 索引
Java LinkedList详解
`LinkedList`是Java集合框架中的一个重要类,实现了`List`、`Deque`和`Cloneable`接口。它基于双向链表,支持动态扩展,允许重复元素。虽然通过索引访问元素的时间复杂度为O(n),但在插入和删除操作上表现优异,时间复杂度为O(1)。常用操作包括创建、添加、获取、删除和查找元素,以及使用迭代器遍历。适用于频繁插入和删除的场景,如队列和栈的实现。
|
1天前
|
存储 算法 安全
深入理解Java中的集合框架
【9月更文挑战第34天】本文将带你走进Java的集合框架,探索其背后的设计哲学和实现细节。我们将从集合的基本概念出发,逐步深入到具体的接口和类的实现,最后通过一个实际的例子来展示如何在Java程序中高效地使用集合。无论你是初学者还是有经验的开发者,这篇文章都将为你提供新的视角和深度理解。
9 1
|
12天前
|
人工智能 开发框架 Java
重磅发布!AI 驱动的 Java 开发框架:Spring AI Alibaba
随着生成式 AI 的快速发展,基于 AI 开发框架构建 AI 应用的诉求迅速增长,涌现出了包括 LangChain、LlamaIndex 等开发框架,但大部分框架只提供了 Python 语言的实现。但这些开发框架对于国内习惯了 Spring 开发范式的 Java 开发者而言,并非十分友好和丝滑。因此,我们基于 Spring AI 发布并快速演进 Spring AI Alibaba,通过提供一种方便的 API 抽象,帮助 Java 开发者简化 AI 应用的开发。同时,提供了完整的开源配套,包括可观测、网关、消息队列、配置中心等。
559 7
|
11天前
|
算法 Java
Java项目不使用框架如何实现限流?
Java项目不使用框架如何实现限流?
20 2
|
11天前
|
存储 安全 Java
Java 常用集合分类
Java 常用集合分类
13 2
|
16天前
|
Kubernetes Java Android开发
用 Quarkus 框架优化 Java 微服务架构的设计与实现
Quarkus 是专为 GraalVM 和 OpenJDK HotSpot 设计的 Kubernetes Native Java 框架,提供快速启动、低内存占用及高效开发体验,显著优化了 Java 在微服务架构中的表现。它采用提前编译和懒加载技术实现毫秒级启动,通过优化类加载机制降低内存消耗,并支持多种技术和框架集成,如 Kubernetes、Docker 及 Eclipse MicroProfile,助力开发者轻松构建强大微服务应用。例如,在电商场景中,可利用 Quarkus 快速搭建商品管理和订单管理等微服务,提升系统响应速度与稳定性。
31 5
|
Java
java中 TreeSet类用法
/* TreeSet的性能比 HashSet差但是我们  在需要排序的时候可以用TreeSet  因为他是 自然排序也就是 升序 下面是TreeSet实现代码  这个类也似只能通过迭代器迭代元素 */ import java.
778 0
|
7天前
|
安全 Java 调度
Java编程时多线程操作单核服务器可以不加锁吗?
Java编程时多线程操作单核服务器可以不加锁吗?
21 2
|
11天前
|
存储 缓存 Java
java线程内存模型底层实现原理
java线程内存模型底层实现原理
java线程内存模型底层实现原理
|
16天前
|
缓存 Java 应用服务中间件
Java虚拟线程探究与性能解析
本文主要介绍了阿里云在Java-虚拟-线程任务中的新进展和技术细节。
下一篇
无影云桌面