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

本文涉及的产品
实时计算 Flink 版,5000CU*H 3个月
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
大数据开发治理平台 DataWorks,不限时长
简介: 【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集合框架,提高代码性能。在实际使用中,避免上述问题,可以使代码更加高效和稳定。

目录
相关文章
|
1天前
|
XML 存储 测试技术
《手把手教你》系列基础篇(七十四)-java+ selenium自动化测试-框架设计基础-TestNG实现DDT - 上篇(详解教程)
【6月更文挑战第15天】本文介绍了TestNG的数据驱动测试(Data Driven Testing, DDT)概念和好处,并提供了两个实战示例。数据驱动测试允许使用不同的测试数据执行相同的测试用例,这些数据可以从外部文件或数据库获取。这种方法提高了测试效率,减少了冗余代码,并便于应对应用程序变更。
8 0
|
1天前
|
Java
java集合
摘要:使用`equals`方法可直接比较两个集合是否完全相同,因Java集合类已重写该方法。快速创建集合可采用`Lists.newArrayList()`。
8 3
|
2天前
|
存储 算法 安全
[笔记] 疯狂JAVA讲义(第3版)第8章 Java集合(二)
[笔记] 疯狂JAVA讲义(第3版)第8章 Java集合(二)
|
2天前
|
存储 算法 Java
[笔记] 疯狂JAVA讲义(第3版)第8章 Java集合(一)
[笔记] 疯狂JAVA讲义(第3版)第8章 Java集合(一)
|
2天前
|
前端开发 JavaScript Java
计算机java项目|springboot基于spring框架的电影订票系统
计算机java项目|springboot基于spring框架的电影订票系统
|
2天前
|
存储 安全 Java
详解 Spring Security:全面保护 Java 应用程序的安全框架
详解 Spring Security:全面保护 Java 应用程序的安全框架
5 1
|
2天前
|
存储 安全 Java
全面详解Java并发编程:从基础到高级应用
全面详解Java并发编程:从基础到高级应用
9 1
|
2天前
|
Java API
深入探讨 Java 8 集合操作:全面解析 Stream API 的强大功能
深入探讨 Java 8 集合操作:全面解析 Stream API 的强大功能
9 2
|
2天前
|
Web App开发 XML 安全
《手把手教你》系列基础篇(七十三)-java+ selenium自动化测试-框架设计基础-TestNG实现启动不同浏览器(详解教程)
【6月更文挑战第14天】本文介绍了如何使用TestNg进行自动化测试,特别是通过变量参数启动不同浏览器的步骤。
14 5
|
1月前
|
存储 安全 Java
java集合框架及其特点(List、Set、Queue、Map)
java集合框架及其特点(List、Set、Queue、Map)

热门文章

最新文章