Java基础快速入门: Set集合与TreeSet详解

【Java集合】Set 接口 —— HashSet 与 TreeSet 详解 本文详细介绍了 Java 中 Set 接口及其两个主要实现类 HashSet 和 TreeSet。Set 接口继承自 Collection 接口,与 Collection 接口方法基本一致但更严格,保证元素不重复且 HashSet 中元素无序,TreeSet 以二叉树方式存储元素可实现排序。HashSet 根据对象哈希值确定存储位置,通过 hashCode () 和 equals () 方法确保元素不重复。TreeSet 内部采用平衡二叉树存储元素,有多个特有方法如 first ()、last () 等。 阅读详情

本文纲要

  1. Set 集合概述
  2. Set 集合的基本使用
  3. TreeSet 基本使用
  4. TreeSet 自然排序
    自然排序步骤
    主要条件与次要条件
    compareTo 方法原理
  5. 比较器排序
  6. 两种排序方式对比与练习
  7. 综合练习:按总分排序

Set 集合概述

在 Java 集合框架中,单列集合的顶层接口是 Collection,它派生出两大类:

  • List集合:元素可以重复,有索引。常见实现类:ArrayList(底层数组,查询快增删慢)、LinkedList(底层链表,查询慢增删快)。
  • Set集合:元素不可重复,无索引。常见实现类:HashSet、TreeSet

本文主要学习 Set 接口及其实现类 TreeSet 的用法,包括自然排序与比较器排序。

项目代码结构如下(包:com.wb):

src 
 └─ com.wb 
     ├─ myset 
     │    └─ MySet1.java 
     ├─ mytreeset 
     │    ├─ Student.java 
     │    ├─ Teacher.java 
     │    ├─ MyTreeSet1.java 
     │    ├─ MyTreeSet2.java 
     │    ├─ MyTreeSet3.java 
     │    ├─ MyTreeSet4.java 
     │    └─ MyTreeSet5.java 
     └─ treesettest 
          ├─ Student.java 
          └─ TreeSetTest.java 

Set 集合的基本使用

Set 集合的特点:

  1. 不可重复:添加重复元素时只会保留一个。
  2. 存取顺序不一致:存入顺序与遍历顺序不一定相同。
  3. 没有带索引的方法:不能使用普通 for 循环按索引遍历,也不支持通过索引获取/删除元素。

遍历方式只能使用迭代器或增强 for 循环

代码示例:存储字符串并遍历

package com.wb.myset;
 
import java.util.Iterator;
import java.util.Set;
import java.util.TreeSet;
 
/*
Set集合的基本使用 
 */
public class MySet1 {
    public static void main(String[] args) {
        Set<String> set = new TreeSet<>();
        set.add("ccc");
        set.add("aaa");
        set.add("aaa");   // 重复元素,只会保留一个 
        set.add("bbb");
 
        // 不能使用普通 for 循环,因为 Set 没有索引 
        // for (int i = 0; i < set.size(); i++) {
        //     // Set集合是没有索引的,所以不能使用通过索引获取元素的方法 
        // }
 
        // 迭代器遍历 
        Iterator<String> it = set.iterator();
        while (it.hasNext()) {
            String s = it.next();
            System.out.println(s);
        }
        System.out.println("-----------------------------------");
 
        // 增强 for 遍历 
        for (String s : set) {
            System.out.println(s);
        }
    }
}

运行结果:

aaa 
bbb 
ccc 
-----------------------------------
aaa 
bbb 
ccc 

可以看到:重复的 "aaa" 只保留了一个,且最终顺序是按字典序排列的,与原插入顺序 "ccc","aaa","bbb" 不一致,体现了 Set 的特点

TreeSet 基本使用

TreeSet 是 Set 接口的一个实现类,其特点:

  • 不包含重复元素(Set 基本特性)。
  • 没有带索引的方法。
  • 可以对元素进行排序(自然顺序或自定义规则)。
  • 存取顺序不一定一致,但最终按排序规则输出。

示例:存储 Integer 类型

package com.wb.mytreeset;
 
import java.util.TreeSet;
 
/
TreeSet集合来存储Integer类型 
 */
public class MyTreeSet1 {
    public static void main(String[] args) {
        TreeSet<Integer> ts = new TreeSet<>();
        ts.add(5);
        ts.add(3);
        ts.add(4);
        ts.add(1);
        ts.add(2);
 
        System.out.println(ts);
    }
}

输出:[1, 2, 3, 4, 5]

虽然插入顺序是 5,3,4,1,2,但 TreeSet 自动按升序排序。

存储自定义对象报错的原因

如果直接存储未实现排序规则的自定义类,会抛出异常。
例如直接使用以下 Student 类:

// 未实现Comparable接口的Student 
public class Student {
    private String name;
    private int age;
    // ... 构造器、getter、setter、toString 
}
TreeSet<Student> ts = new TreeSet<>();
ts.add(new Student("xiaohua", 27));
// ❌ 运行时抛出 ClassCastException 

原因是 TreeSet 需要知道按什么规则排序,而自定义类没有指定排序规则,因此必须显式指定。

TreeSet 自然排序

自然排序步骤

  1. 使用 TreeSet 的空参构造创建集合。
  2. 自定义类实现 Comparable 接口,泛型与集合元素类型一致。
  3. 重写 compareTo 方法,在方法内定义排序逻辑。

代码实现:让学生按年龄排序

Student 类实现 Comparable:

package com.wb.mytreeset;
 
public class Student implements Comparable<Student> {
    private String name;
    private int age;
 
    public Student() {}
    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }
    // getter、setter、toString 省略 ...
 
    @Override 
    public int compareTo(Student o) {
        // 按照对象的年龄进行排序 
        // 主要判断条件 
        int result = this.age - o.age;
        // 次要判断条件:年龄相同时按姓名比较 
        result = result == 0 ? this.name.compareTo(o.getName()) : result;
        return result;
    }
}

测试类:

package com.wb.mytreeset;
 
import java.util.TreeSet;
 
/*
TreeSet集合来存储Student类型 
 */
public class MyTreeSet2 {
    public static void main(String[] args) {
        TreeSet<Student> ts = new TreeSet<>();
 
        Student s1 = new Student("zhangsan", 28);
        Student s2 = new Student("lisi", 27);
        Student s3 = new Student("wangwu", 29);
        Student s4 = new Student("zhaoliu", 28);
        Student s5 = new Student("qianqi", 30);
 
        ts.add(s1);
        ts.add(s2);
        ts.add(s3);
        ts.add(s4);
        ts.add(s5);
 
        System.out.println(ts);
    }
}

输出:

[Student{name='lisi', age=27}, Student{name='zhangsan', age=28}, 
 Student{name='zhaoliu', age=28}, Student{name='wangwu', age=29}, 
 Student{name='qianqi', age=30}]

年龄相同的 zhangsan 和 zhaoliu,按姓名字典序排列(zhangsan 在 zhaoliu 前)

主要条件与次要条件

在 compareTo 方法中:

  • 主要条件:优先比较的属性,如年龄。
  • 次要条件:当主要条件相同时才使用的比较,如姓名。
    • 次要条件通常写在 result == 0 的判断体内,避免无效比较。

compareTo 方法原理

TreeSet 底层在添加元素时,会调用 compareTo 方法将新元素与已有元素比较。

  • 返回负数:当前元素较小,放在左子树。
  • 返回零:视为重复,不存入。
  • 返回正数:当前元素较大,放在右子树。

插入过程示意(以年龄为例):

<0 负数

=0 零

>0 正数

插入新元素: this, 已有元素: o

this.age - o.age

当前元素较小,放左子树

元素重复,不存入

当前元素较大,放右子树

若首次插入直接作为根节点;后续插入会与根节点及子树节点依此规则比较,最终形成排序树结构。

比较器排序

当无法修改自定义类的源码(如 String、Integer 已固定实现),或默认自然排序不满足需求时,可使用比较器排序

步骤

  1. 创建 TreeSet 时传入 Comparator 对象。
  2. 实现 compare 方法定义排序规则。
  3. 比较的规则(负数/零/正数)与自然排序一致。

示例:Teacher 类使用比较器排序

Teacher 类不必实现 Comparable:

package com.wb.mytreeset;
 
public class Teacher {
    private String name;
    private int age;
    // 构造器、getter、setter、toString ...
}

使用匿名内部类方式:

package com.wb.mytreeset;
 
import java.util.Comparator;
import java.util.TreeSet;
 
public class MyTreeSet4 {
    public static void main(String[] args) {
        TreeSet<Teacher> ts = new TreeSet<>(new Comparator<Teacher>() {
            @Override 
            public int compare(Teacher o1, Teacher o2) {
                // o1 表示现在要存入的那个元素 
                // o2 表示已经存入到集合中的元素 
 
                // 主要条件:按年龄 
                int result = o1.getAge() - o2.getAge();
                // 次要条件:年龄相同时按姓名排序 
                result = result == 0 ? o1.getName().compareTo(o2.getName()) : result;
                return result;
            }
        });
 
        Teacher t1 = new Teacher("zhangsan", 23);
        Teacher t2 = new Teacher("lisi", 22);
        Teacher t3 = new Teacher("wangwu", 24);
        Teacher t4 = new Teacher("zhaoliu", 24);
 
        ts.add(t1);
        ts.add(t2);
        ts.add(t3);
        ts.add(t4);
 
        System.out.println(ts);
    }
}

输出:

[Teacher{name='lisi', age=22}, Teacher{name='zhangsan', age=23}, 
 Teacher{name='wangwu', age=24}, Teacher{name='zhaoliu', age=24}]

年龄相同的 wangwu 和 zhaoliu 按首字母排序。

也可以使用 Lambda 表达式简化

两种排序方式对比与练习

方式实现适用场景
自然排序类实现 Comparable,重写 compareTo可修改类源码,且排序规则唯一
比较器排序创建 Comparator,重写 compare不能修改类源码(如String),或需要多种排序规则

练习:按照字符串长度排序

  • 要求:存储字符串 "c"、"ab"、"df"、"qwer",按长度升序,长度相同则按字典序。
  • 分析:String 类已经实现了 Comparable,按字典序排序,不满足长度需求,所以必须使用比较器。

匿名内部类实现:

TreeSet<String> ts = new TreeSet<>(new Comparator<String>() {
    @Override 
    public int compare(String o1, String o2) {
        int result = o1.length() - o2.length();          // 主要条件:长度 
        result = result == 0 ? o1.compareTo(o2) : result;// 次要条件:字典序 
        return result;
    }
});

Lambda 表达式实现(更简洁):

package com.wb.mytreeset;
 
import java.util.Comparator;
import java.util.TreeSet;
 
public class MyTreeSet5 {
    public static void main(String[] args) {
        TreeSet<String> ts = new TreeSet<>(
            (String o1, String o2) -> {
                int result = o1.length() - o2.length();
                result = result == 0 ? o1.compareTo(o2) : result;
                return result;
            }
        );
 
        ts.add("c");
        ts.add("ab");
        ts.add("df");
        ts.add("qwer");
 
        System.out.println(ts);
    }
}

输出:[c, ab, df, qwer](长度分别为1,2,2,4,ab和df字典序ab在前)

补充:String 的 compareTo 示例

String 类实现了 Comparable,其 compareTo 按字典顺序比较:

package com.wb.mytreeset;
 
public class MyTreeSet3 {
    public static void main(String[] args) {
        String s1 = "aaa";
        String s2 = "ab";
 
        System.out.println(s1.compareTo(s2));  // 输出 -1 
        // 比较过程:先比较第一个字符 'a' vs 'a'(相等)
        // 再比较第二个字符 'a' vs 'b','a' Unicode值97,'b' 98 => 97-98 = -1 
    }
}

综合练习:按总分排序

以下练习展示自然排序的更复杂应用:按总分降序排列,若总分相同则依次比较语文、数学、英语成绩,全部相同再比较姓名。

Student 类(实现了 Comparable):

package com.wb.treesettest;
 
public class Student implements Comparable<Student> {
    private String name;
    private int chinese;
    private int math;
    private int english;
 
    // 构造器、getter、setter 略 ...
 
    @Override 
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", chinese=" + chinese +
                ", math=" + math +
                ", english=" + english +
                '}' + "总分为" + getSum();
    }
 
    public int getSum() {
        return chinese + math + english;
    }
 
    @Override 
    public int compareTo(Student o) {
        // 按照总分从高到低排序(降序)
        int result = o.getSum() - this.getSum();
        // 总分一样,比较语文成绩(也降序)
        result = result == 0 ? o.getChinese() - this.getChinese() : result;
        // 语文一样,比较数学 
        result = result == 0 ? o.getMath() - this.getMath() : result;
        // 数学一样,比较英语 
        result = result == 0 ? o.getEnglish() - this.getEnglish() : result;
        // 全部相同,按姓名字典序 
        result = result == 0 ? o.getName().compareTo(this.getName()) : result;
        return result;
    }
}

测试类:

package com.wb.treesettest;
 
import java.util.TreeSet;
 
/*
键盘录入3个学生信息,属性为(姓名,语文成绩,数学成绩,英语成绩),按照总分从低到高输出到控制台 
本示例直接硬编码演示 
 */
public class TreeSetTest {
    public static void main(String[] args) {
        TreeSet<Student> ts = new TreeSet<>();
 
        Student s1 = new Student("dahei", 80, 80, 80);
        Student s2 = new Student("erhei", 90, 90, 90);
        Student s3 = new Student("xiaohei", 100, 100, 100);
 
        ts.add(s1);
        ts.add(s2);
        ts.add(s3);
 
        for (Student student : ts) {
            System.out.println(student);
        }
    }
}

输出(总分从低到高):

Student{name='dahei', chinese=80, math=80, english=80}总分为240 
Student{name='erhei', chinese=90, math=90, english=90}总分为270 
Student{name='xiaohei', chinese=100, math=100, english=100}总分为300 

此练习体现了多级排序条件的链式处理。

总结

我们来回顾一下上述知识结构:

  • ·Set 集合概述:介绍了单列集合体系、Set 与 List 的区别
  • Set 基本使用:遍历方式(迭代器、增强 for)
  • TreeSet 基本使用:Integer 自动排序、自定义对象报错原因
  • 自然排序:Comparable 接口、compareTo 方法、主要/次要条件、原理图解
  • 比较器排序:Comparator 匿名内部类、Lambda 表达式
  • 两种方式对比与练习:字符串长度排序案例
  • 综合练习:多条件总分排序
晶体管-二极管三极管MOS管选型参数总结 二极管三极管和MOS管,是电路中常用的控制电流电压的基本电子元器件。电路世界中晶体管的选型,需要考虑的参数多种多样,这些参数的选择会直接影响到电路的性能、稳定性、成本等多个方面。本文对二极管三极管和MOS管的选型参数进行详细介绍并总结。 阅读详情

相关推荐

SAP BSP网页开发入门:从SE80创建到MVC实战(附成品展示)

本文详细介绍了SAP BSP网页开发的入门与实战,从SE80环境搭建到MVC架构实现的全流程。通过具体案例和代码示例,帮助开发者掌握业务服务器页面(BSP)技术,提升SAP Web化转型中的开发效率,适用于需要扩展SAP功能的企业场景。

x1y2z的博客 1万+

java基础——java集合set详解

本文深入探讨了Java中的Set接口及其主要实现类,包括HashSet、LinkedHashSet和TreeSet。Set接口的核心特性是元素唯一性,适用于数据去重、成员检查等场景。文章详细介绍了Set的常用方法,如add、remove、contains等,并通过代码示例展示了如何使用这些方法。此外,文章还对比了不同Set实现类的特点和使用场景:HashSet适用于快速查找和插入,LinkedHashSet保持插入顺序,TreeSet则支持自动排序和范围查询。最后,文章总结了Set的三种主要遍历方式(增强型

qq_47980550的博客 4584

深度学习PyTorch代码模板——模型训练框架、数据处理、绘图…

个人用深度学习代码模板:模型训练框架、数据处理、绘图等。待补充。

https://www.hyperplasma.top 1908

java中的各种集合排序之set中TreeSet集合排序

一、背景 1.软件开发过程中集合排序是比较强大的功能,会使用集合Map、Set、List实现排序功能,知道匿名内部类Comparator很关键,搞清楚集合排序的性能开销,排序遇到的坑以及解决的方法,注意下面的例子都是JDK1.8的用法。 二、Set集合排序 1.UML类图 三、注意点 1.我们先来说下集合的各个特点: 2.List的主要特点以及用法 2.1.可以允许存储重复的对象...

码农小默 1万+

fastjson1.2.83反序列化漏洞

【代码】fastjson1.2.83反序列化漏洞。

Coder的博客 1万+

STM32串口调试踩坑记:HAL_UART_ErrorCallback里不先解锁,你的中断接收就废了

本文深入分析了STM32串口调试中HAL_UART_ErrorCallback的锁机制陷阱,指出在错误回调中不先解锁会导致中断接收失效的问题。通过解析HAL库源码,提出了正确的错误处理实现方法,并分享了预防措施与最佳实践,帮助开发者提升串口通信的可靠性。

weixin_33733810的博客 516

Java—Set集合(HashSet、TreeSet)

今天来看看Java集合中的Set集合,为什么Set集合中元素不能重复?为什么Set集合是无序的?我们来共同交流交流 目录 Set集合的概述 特点 继承和实现情况 实际应用 HashSet 有什么特点吗? 方法有哪些? 实战演练 TreeSet 有什么特征吗? 方法有哪些? 实战演练 自然排序 定制排序 Set集合的概述 特点 元素不可重复(相同内容不会被加入,没有下标) 无序(存进去是这个顺序,取出来就不一定是这个顺序)(Set容器可以与数学中的“集合

一起加油吧~ 9790

别再只看K线了!用Python自制筹码分布图,可视化Winner函数帮你判断支撑压力

本文详细介绍了如何用Python自制筹码分布图,通过数据清洗、算法实现和动态可视化,帮助投资者更准确地判断股票支撑压力位。文章重点讲解了Winner函数的应用,结合筹码分布与交易策略,提升交易决策的精准度。

weixin_42520796的博客 316

Java集合Set详解:从入门到精通

本文是一篇关于Java Set集合框架的深度解析指南,主要内容包括: 1️⃣ Set集合概述:介绍Set的特点(元素唯一性)及其与List的区别,展示Java Set体系结构(HashSet、LinkedHashSet、TreeSet等)。 2️⃣ 三大Set实现详解: HashSet:基于HashMap实现的无序集合,通过hashCode()和equals()保证唯一性 LinkedHashSet:保留元素插入顺序的有序集合 TreeSet:基于TreeMap实现的有序集合(自然排序或定制排序) 3️⃣

2301_79751930的博客 1347

C#粘包和分包问题及解决方法

一:通过图解法来描述一下分包和粘包,这样客户更清晰直观的了解:  下面对上面的图进行解释:  1.正常情况:如果Socket Client 发送的数据包,在Socket Server端也是一个一个完整接收的,那个就不会出现粘包和分包情况,数据正常读取。  2.粘包情况:Socket Client发送的数据包,在客户端发送和服务器接收的情况下都有可能发送,因为客户端发送的数据都是发送的一个缓冲...

weixin_42033401的博客 7767

win10安装openvpn客户端

进入C:\Program Files\TAP-Windows\bin目录,然后右键用管理员权限执行addtap.bat文件,此文件执行会创建一个网卡。链接:https://pan.baidu.com/s/1KAifTiP7qp1i5ZkfdnfwkA。4.2 进入安装目录的config下新建一个文件夹,将证书文件全部挪进去(不移动.ovpn文件)3.4 将拿到的ssl认证文件放入安装目录的config目录下。然后修改ovpn文件 “./”代表当前路径,第二个链接重复。3.1 一直下一步到这里打上勾。

qq_36200932的博客 3万+

【Java】---Collection体系集合:Set、HashSet、TreeSet详解

HashSet和TreeSet。HashSet以哈希表作为存储结构,TreeSet以红黑树作为存储结构。若想要以TreeSet类存储元素,存储的元素的类型需要实现Comparable接口,或者在定义时以Compare类作为参数。新人一个,撰写文章时可能会有一些漏缺点和不足点,希望大家在评论区帮忙批评改正,各位多多海涵。

qq_54185425的博客 1372

【数字IC验证快速入门】26、SystemVerilog项目实践之AHB-SRAMC(6)(AHB-SRAMC SVTB Overview)

导读:作者有幸在中国电子信息领域的排头兵院校“电子科技大学”攻读研究生期间,接触到前沿的数字IC验证知识,旁听到诸如华为海思、清华紫光、联发科技等业界顶尖集成电路相关企业面授课程,对数字IC验证有了一些知识积累和学习心得。为帮助想入门前端IC验证的朋友,思忱一二后,特开此专栏,以期花最短的时间,走最少的弯路,学最多的IC验证技术知识。 文章目录一、内容概述二、AHB-SRAMC 验证计划 一、内容概述 AHB-SRAMC 验证计划 AHB-SRAMC 验证平台的架构图 AHB-SRAMC 验证平台的代.

悟已往之不谏 知来者之可追 2652

Java [ 基础 ] Set 集合详解 ✨

HashSetTreeSet和是Set接口的三种常用实现。选择哪种实现类取决于具体的需求:如果需要高效的查找操作,选择HashSet;如果需要有序的集合,选择TreeSet;如果需要按插入顺序访问元素,选择。理解它们的特点和使用场景能够帮助我们更好地处理集合操作。

lenyan~的博客 1057

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

Java Set集合:HashSet、LinkedHashSet与TreeSet详解

本文系统介绍了Java集合框架中的Set接口及其主要实现类。Set以"元素唯一性"为核心特性,包含HashSet、LinkedHashSet和TreeSet三大实现类:HashSet基于哈希表实现,查找效率最高(O(1))但不保证顺序;LinkedHashSet在HashSet基础上通过双向链表维护插入顺序;TreeSet基于红黑树实现自动排序(O(logN))。文章详细分析了各实现类的底层结构、性能特点、适用场景,并对比了三者的核心差异。同时全面梳理了Set的常用方法,包括元素添加、删

Aayu_的博客 605

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Java Set集合:HashSet与TreeSet(附代码演示)

摘要:本文介绍了Java集合框架中的Set集合,重点分析了HashSet和TreeSet的特性与区别。HashSet基于哈希表实现,具有元素唯一性和无序性;TreeSet基于红黑树实现,具有元素唯一性和自动排序功能。通过代码示例展示了两种集合的使用方法,并比较了它们在存储结构、排序特性和性能上的差异。掌握这些内容有助于正确使用Set集合处理元素唯一性和排序问题,有效避免数据重复。

fykam的博客 1601

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

set集合(HashSet、LinkedHashSet、TreeSet)

计算元素的哈希值,用于快速定位元素在底层数据结构(如哈希表)中的存储位置。两个相同的元素必须返回相同的哈希值。相同),但额外通过链表记录元素顺序,本质是一个 "Linked HashMap" 的 key 集合。:用于精确比较两个元素是否为 "逻辑上的相同元素"。当两个元素的哈希值相同时,会通过。),否则可能出现逻辑矛盾(如元素被视为不同但排序位置相同)。自定义对象去重的关键:对于自定义类的对象,需。,value 是一个固定的空对象(实例):存储的元素被作为。实例):存储的元素被作为。

weixin_62316729的博客 1344

Java Set集合的详解

一,Set Set:注重独一无二的性质,该体系集合可以知道某物是否已近存在于集合中,不会存储重复的元素 用于存储无序(存入和取出的顺序不一定相同)元素,值不能重复。 对象的相等性    引用到堆上同一个对象的两个引用是相等的。如果对两个引用调用hashCode方法,会得到相同的结果,如果对象所属的类没有覆盖Object的hashCode方法的话,hashCode会返回每个对象特有的序号(j

重心开始,重新开始 21万+

JAVA_Set系列集合:HashSet、LinkedHashSet、TreeSet底层详解

创建TreeSet对象时候,传递比较器Comparator指定规则练习:要按照字符串长度来比较,用自然排序无法比较,所以要使用自定义步骤//创建集合@Override//o1:表示当前要添加的元素//o2表示已经在红黑树存在的元素//按照长度排序//如果一样长则按照首字母排序//调用默认的字符排序,就不会被丢弃return i;});//添加//打印:上面的匿名内部类可以用 Lambda 简化练习题 :TreeSet对象自定义排序。

2301_79947226的博客 1669

Java基础进阶—Set集合详解(HashSet、LinkedHashset、TreeSet看这一篇就够了)

LinkedHashSet是HashSet实现类的子类,该集合中的数据是有序的(指添加数据的顺序和获取数据的顺序一致)TreeSet实现类,该集合具有排序功能,向其中存入的数据默认按升序的顺序排序Set系列集合常用方法基本都是父接口Collection提供的,没有特有方法。

Future_yzx的博客 1217

Java Set集合详解:HashSet类、TreeSet 类

Set 集合也实现了 Collection 接口,它主要有两个实现类:HashSet 类和 TreeSet类。Set 集合中的对象不按特定的方式排序,只是简单地把对象加入集合,集合中不能包含重复的对象,并且最多只允许包含一个 null 元素。 HashSet 类 HashSet 类是按照哈希算法来存储集合中的元素,使用哈希算法可以提高集合元素的存储速度,当向 Set 集合中添加一个元素时,H...

jijiangpeng的博客 824

Java Set 集合全家桶:HashSet、LinkedHashSet、TreeSet 详解与实战

方法名功能描述注意点添加元素,重复返回 false自定义对象需重写size()返回元素个数删除指定元素,成功返回 true依赖判断元素存在判断是否包含指定元素同 remove 的判断逻辑iterator()返回迭代器,支持遍历和安全删除遍历中删除需用isEmpty()判断集合是否为空clear()清空所有元素方法名功能描述注意点添加元素,重复返回 false,保留顺序保留与指定集合的交集元素会修改原集合删除与指定集合的交集元素会修改原集合判断是否包含指定元素依赖。

2301_82132279的博客 948

java treeset 遍历_java集合(三)Set集合之TreeSet详解

这一章,我们对TreeSet进行学习。我们先对TreeSet有个整体认识,然后再学习它的源码,最后再通过实例来学会使用TreeSet。内容包括:第1部分 TreeSet介绍第2部分 TreeSet数据结构第3部分 TreeSet源码解析(基于JDK1.6.0_45)第4部分 TreeSet遍历方式第5部分 TreeSet示例第1部分 TreeSet介绍TreeSet简介TreeSet 是一个有序的...

weixin_42344395的博客 2859

JAVA基础——集合框架(三)Set集合,HashSet ,LinkedSet,TreeSet集合的介绍及原理

一、 Set集合概述及特点 因为Set集合的API方法和Collection集合一模一样。故没有没有它的特殊的方法。 所以我们只要学它的两个子类,一个HashSet和另外一个TreeSet 二、 HashSet存储字符串并遍历 实现Set接口,由哈希表(实际是一个hashmap对象)支持,它不保证set的迭代顺序;特别是它不保证该顺序恒久不变。此类允许下使用null元素。 案例: HashSet<String> hashSet =new HashSet<String>(); b

Mr_GYF的博客 920

集合的Set的HashSet与TreeSet的详解及其与List的比较

Java 集合框架提供了Set接口,该接口继承自Collection接口。Set接口的主要特点是它不会包含任何重复的元素(即每个元素都是唯一的)。此外,Set不保证元素的顺序,除非使用某些特定的实现类如或TreeSet来保持插入顺序或自然排序。

2301_80163888的博客 845

Java Set 集合体系详解:HashSet、LinkedHashSet、TreeSet 全面解析

int score;// 按成绩排序@Override@Override集合类型底层结构是否有序是否允许重复是否允许 null排序方式线程安全HashSetHashMap否否是无否HashMap + 链表是(插入顺序)否是无否TreeSetTreeMap(红黑树)是(自动排序)否否自然 / 定制否。

alkamgg的博客 700
上一篇: Java基础快速入门:泛型
下一篇: Java基础快速入门:TreeSet底层数据结构——树
Wang's Blog
博客等级 码龄12年 7434粉丝 2421原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Wang's Blog

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值