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集合框架,提高代码性能。在实际使用中,避免上述问题,可以使代码更加高效和稳定。

目录
相关文章
|
7天前
|
人工智能 前端开发 Java
基于开源框架Spring AI Alibaba快速构建Java应用
本文旨在帮助开发者快速掌握并应用 Spring AI Alibaba,提升基于 Java 的大模型应用开发效率和安全性。
基于开源框架Spring AI Alibaba快速构建Java应用
|
2天前
|
存储 Java
判断一个元素是否在 Java 中的 Set 集合中
【10月更文挑战第30天】使用`contains()`方法可以方便快捷地判断一个元素是否在Java中的`Set`集合中,但对于自定义对象,需要注意重写`equals()`方法以确保正确的判断结果,同时根据具体的性能需求选择合适的`Set`实现类。
|
6天前
|
存储 Java 索引
Java中的数据结构:ArrayList和LinkedList的比较
【10月更文挑战第28天】在Java编程世界中,数据结构是构建复杂程序的基石。本文将深入探讨两种常用的数据结构:ArrayList和LinkedList,通过直观的比喻和实例分析,揭示它们各自的优势与局限,帮助你在面对不同的编程挑战时做出明智的选择。
|
2天前
|
存储 Java 开发者
在 Java 中,如何遍历一个 Set 集合?
【10月更文挑战第30天】开发者可以根据具体的需求和代码风格选择合适的遍历方式。增强for循环简洁直观,适用于大多数简单的遍历场景;迭代器则更加灵活,可在遍历过程中进行更多复杂的操作;而Lambda表达式和`forEach`方法则提供了一种更简洁的函数式编程风格的遍历方式。
|
2天前
|
Java 开发者
|
2天前
|
存储 Java 开发者
Java中的集合框架深入解析
【10月更文挑战第32天】本文旨在为读者揭开Java集合框架的神秘面纱,通过深入浅出的方式介绍其内部结构与运作机制。我们将从集合框架的设计哲学出发,探讨其如何影响我们的编程实践,并配以代码示例,展示如何在真实场景中应用这些知识。无论你是Java新手还是资深开发者,这篇文章都将为你提供新的视角和实用技巧。
6 0
|
6月前
|
存储 安全 Java
java集合框架及其特点(List、Set、Queue、Map)
java集合框架及其特点(List、Set、Queue、Map)
|
存储 缓存 安全
Java集合框架(Map篇)
在这个示例代码中,首先定义了一个数组和一个集合,并使用Arrays.asList()方法将数组转换成集合。接着对数组和集合分别进行排序,使用binarySearch()方法查找元素位置,使用copyOf()和copy()方法复制数组和集合,最后输出结果。可以看到,Arrays和Collections提供的方法可以方便地对数组和集合进行操作,节省开发者的时间和精力。
|
6月前
|
Java 程序员
Java集合框架:List、Set、Map类型及泛型详解
Java集合框架:List、Set、Map类型及泛型详解
|
3月前
|
存储 安全 Java
java集合框架复习----(4)Map、List、set
这篇文章是Java集合框架的复习总结,重点介绍了Map集合的特点和HashMap的使用,以及Collections工具类的使用示例,同时回顾了List、Set和Map集合的概念和特点,以及Collection工具类的作用。
java集合框架复习----(4)Map、List、set