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、元素个数...
Java编程语言在实现这些数据结构和算法时,提供了丰富的类库支持,如ArrayList和LinkedList实现了线性结构,HashSet和HashMap实现了集合和映射,而TreeSet和TreeMap则实现了有序集合和映射。同时,Java的泛型特性...
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)模拟题及其分析内容,我们可以总结出以下几个重要的知识点: ### 泛型的使用与警告避免 #### 题目解析 题目要求我们对一段非泛型化的代码进行修改,使之能够兼容泛型,并避免编译器发出的...
表达式树4.3 查找树ADT——二叉查找树4.3.1 contains方法4.3.2 findMin方法和findMax方法4.3.3 insert方法4.3.4 remove方法4.3.5 平均情况分析4.4 AVL树4.4.1 单旋转4.4.2 双旋转4.5 伸展树4.5.1 一个简单的想法...
Java提供了丰富的类库支持,如ArrayList、LinkedList、TreeSet等,这些都可以作为数据结构的基础,而其面向对象的特性使得实现复杂的算法结构更为简洁。 课后习题答案部分是学习过程中的重要参考资料,它可以帮助...
表达式树4.3 查找树ADT——二叉查找树4.3.1 contains方法4.3.2 findMin方法和findMax方法4.3.3 insert方法4.3.4 remove方法4.3.5 平均情况分析4.4 AVL树4.4.1 单旋转4.4.2 双旋转4.5 伸展树4.5.1 一个简单的想法...
### Java应用:两种Java容器类List和Set分析 #### 一、概述 在Java编程语言中,集合框架(Collections Framework)是处理数据的核心组件之一,它提供了存储和操作对象的各种方式。本文将深入探讨Java中的两种重要...
表达式树4.3 查找树ADT——二叉查找树4.3.1 contains方法4.3.2 findMin方法和findMax方法4.3.3 insert方法4.3.4 remove方法4.3.5 平均情况分析4.4 AVL树4.4.1 单旋转4.4.2 双旋转4.5 伸展树4.5.1 一个简单的想法...
在Java中,集合框架提供了丰富的数据结构实现,如ArrayList和LinkedList对应数组和链表,Stack和Queue实现了栈和队列,TreeSet和HashMap实现了树和哈希表。理解这些类的内部工作原理对于优化代码至关重要。 总之,...
本项目基于二次误差度量的网格简化算法,通过Java编程语言实现,利用了Java集合框架中的TreeSet数据结构。 二次误差度量是网格简化的常用方法之一,它以模型的曲率变化作为简化过程中的衡量标准。在简化过程中,每...
成绩排序可能涉及数组或集合框架(如ArrayList、LinkedList或TreeSet)的使用,利用它们提供的排序方法对成绩进行升序或降序排列。 平均分计算和及格率统计是数据分析的重要部分。我们可以遍历所有学生的成绩,计算...
在Java中,集合框架提供了多种数据结构的实现,如ArrayList和LinkedList代表了动态数组和链表,Stack和Queue提供了栈和队列的功能,TreeSet和HashMap实现了有序集合和键值对存储。这些类和接口使得开发人员可以方便...
本篇将深入探讨Collection接口及其子接口,包括List和Set,以及相关的实例分析。 首先,Collection接口是所有单列集合的父接口,它定义了集合的基本操作,如添加元素(add),删除元素(remove)和判断是否包含某个元素...
Java集合框架并未直接提供树数据结构,但可以使用TreeSet和TreeMap实现。 5. **散列表(哈希表)**:散列表通过键值对存储数据,提供常数时间复杂度的查找、插入和删除操作。Java的HashMap和ConcurrentHashMap是散...