1. |——SortedSet接口——TreeSet实现类
Set接口-|——HashSet实现类
|——LinkedHashSet实现类
我们知道Set接口不保证集合的迭代顺序,TreeSet的出现弥补了这一问题,根据使用的构造
方法不同,可能会按照元素的自然顺序进行排序,或按照在创建 set 时所提供的比较器进行排序。让我们来看一个小例子
import java.util.Collections;
import java.util.Comparator;
import java.util.Iterator;
import java.util.TreeSet;
public class TreeSetTest {
public static void main(String[] args) {
TreeSet set = new TreeSet(new PersonComparator());
Person person1 = new Person(20);
Person person2 = new Person(40);
Person person3 = new Person(30);
Person person4 = new Person(10);
set.add(person1);
set.add(person2);
set.add(person3);
set.add(person4);
for(Iterator it = set.iterator();it.hasNext();){
Person person = (Person)it.next();
System.out.println(person.getScore());
}
//我们可以根据自己定义的比较器来取得集合的最大对象
System.out.println(Collections.max(set,new PersonComparator()));
}
}
class Person {
private int score;
public Person(int score){
this.score = score;
}
public int getScore() {
return score;
}
public void setScore(int score) {
this.score = score;
}
@Override
public String toString() {
return String.valueOf(this.score);
}
//重写equals方法和hashCode方法,避免集合中出现属性值相同的对象
@Override
public int hashCode() {
final int PRIME = 31;
int result = 1;
result = PRIME * result + score;
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
final Person other = (Person) obj;
if (score != other.score)
return false;
return true;
}
}
class PersonComparator implements Comparator{
public int compare(Object o1, Object o2) {
Person person1 = (Person)o1;
Person person2 = (Person)o2;
//按照score的值升序排序
return person1.getScore() - person2.getScore();
}
}
当然HashSet是基于Hash算法实现的,其性能通常优于TreeSet,我们通常都应该使用HashSet,在我们需要排序的功能时,我门才使用TreeSet
分享到:
相关推荐
TreeSet 的使用场景非常广泛,例如,在数据库查询结果排序、数据分析、缓存系统等领域都可以使用 TreeSet。TreeSet 的优点是它可以快速检索指定节点,并且可以自动排序。然而,TreeSet 也有其缺点,例如,它的插入和...
具体的内容需要查看源代码才能分析和理解。如果你对这个“BUG”感兴趣,应该打开文件查看并进行调试,以了解其具体原因和解决方案。 总的来说,Java集合框架提供了丰富的功能,如排序和定制排序逻辑。正确理解和...
七、TreeSet源码分析 TreeSet是一种基于树形结构实现的Set,提供了快速的元素存储和检索能力。TreeSet的继承体系中,它继承了AbstractSet,实现了Set接口。 TreeSet的主要属性包括元素数组elementData、元素个数...
Set接口继承自Collection接口,提供了多种实现类,其中最常用的是HashSet和TreeSet。这两个类分别依赖于HashMap和TreeMap实现其功能。 HashSet是通过HashMap内部实现的,这意味着它不保证元素的顺序,同时支持高效...
### 通过分析JDK源代码研究TreeMap红黑树算法实现 #### 一、TreeMap与TreeSet的关系 TreeMap 和 TreeSet 是 Java 集合框架中的重要成员,它们提供了基于红黑树的数据结构实现。从给定部分源代码可以看到,TreeSet ...
以下是对这些数据结构及其在Java中的具体实现的详细分析: 1. **线性表**: - **ArrayList**: 作为线性表的一种实现,ArrayList是一个动态数组,它允许快速的随机访问(O(1)时间复杂度)。通过索引可以快速获取...
根据提供的OCJP(1Z0-851)模拟题及其分析内容,我们可以总结出以下几个重要的知识点: ### 泛型的使用与警告避免 #### 题目解析 题目要求我们对一段非泛型化的代码进行修改,使之能够兼容泛型,并避免编译器发出的...
注意看更新历史注如果需要学习资料,可以加我微信纪实西川笔记Java系列java进阶java 泛型java实例化的软件开发方式nio基础ArrayList源码分析LinkedList源代码分析HashSet和TreeSet源码分析HashMap源码分析(JDK1.8)...
### Java应用:两种Java容器类List和Set分析 #### 一、概述 在Java编程语言中,集合框架(Collections Framework)是处理数据的核心组件之一,它提供了存储和操作对象的各种方式。本文将深入探讨Java中的两种重要...
本项目基于二次误差度量的网格简化算法,通过Java编程语言实现,利用了Java集合框架中的TreeSet数据结构。 二次误差度量是网格简化的常用方法之一,它以模型的曲率变化作为简化过程中的衡量标准。在简化过程中,每...
成绩排序可能涉及数组或集合框架(如ArrayList、LinkedList或TreeSet)的使用,利用它们提供的排序方法对成绩进行升序或降序排列。 平均分计算和及格率统计是数据分析的重要部分。我们可以遍历所有学生的成绩,计算...
本篇将深入探讨Collection接口及其子接口,包括List和Set,以及相关的实例分析。 首先,Collection接口是所有单列集合的父接口,它定义了集合的基本操作,如添加元素(add),删除元素(remove)和判断是否包含某个元素...
Set集合是JavaSE中的一种重要数据结构,主要包括HashSet、TreeSet和LinkedHashSet三个子类。下面我们将对Set集合的原理、特点、使用场景等进行详细的探索和分析。 HashSet HashSet是Set集合中的一种重要实现类,...
- `TreeMap`和`TreeSet`常用于需要保持元素有序的场景,如日志记录、统计分析、数据库索引等。 - 它们也是实现优先队列(`PriorityQueue`)的基础,适用于调度任务和事件处理。 7. **注意事项** - 尽管`TreeMap`...
下面将对标题和描述中提到的数据结构进行详细分析: 1. **Array**:数组是最基础的数据结构,它是一系列相同类型元素的集合,通过索引来访问。数组在内存中是连续存储的,因此访问速度快,但插入和删除元素效率较低...
通过使用Apache POI,我们可以读取Excel的工作表,行,单元格等信息,进行数据提取、分析或者写入新的数据。 - 对于读取Excel文件,主要涉及`HSSFWorkbook`(用于旧的.xls格式)或`XSSFWorkbook`(用于新的.xlsx...
Java集合类源码分析之Set详解 Java集合类中的Set Interface是用于存储无序、不可重复元素的集合接口。Set Interface继承自Collection Interface,提供了基本的集合操作,如add、remove、contains等。Set Interface...
### Java集合分析与比较 #### 一、Java集合体系概览 Java集合框架(Java Collection Framework)是Java标准库中的一个重要组成部分,它提供了一系列用于存储和操作数据的接口及实现类。通过合理选择不同的集合类型...
例如,可以使用ArrayList模拟数组,LinkedList实现链表,Deque接口创建双端队列,TreeSet或TreeMap实现有序集合和映射。此外,Java集合框架提供了丰富的工具类,如PriorityQueue实现堆,Comparator接口用于定制比较...
Java中,TreeSet和TreeMap类就是基于红黑树实现的,这是一种自平衡的二叉搜索树。 然后是图。图由节点(也称为顶点)和边组成,用于表示对象之间的关系。图可以用来模拟各种问题,如社交网络、道路网络等。图的算法...