`
liaokang.java
  • 浏览: 155176 次
  • 性别: Icon_minigender_1
  • 来自: 湖南
社区版块
存档分类
最新评论

TreeSet分析

    博客分类:
  • java
阅读更多
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 的优点是它可以快速检索指定节点,并且可以自动排序。然而,TreeSet 也有其缺点,例如,它的插入和...

    JCF(List、Set、Map)学习,实现了<key,value>按value排序噢

    具体的内容需要查看源代码才能分析和理解。如果你对这个“BUG”感兴趣,应该打开文件查看并进行调试,以了解其具体原因和解决方案。 总的来说,Java集合框架提供了丰富的功能,如排序和定制排序逻辑。正确理解和...

    【死磕Java集合】-集合源码分析.pdf

    七、TreeSet源码分析 TreeSet是一种基于树形结构实现的Set,提供了快速的元素存储和检索能力。TreeSet的继承体系中,它继承了AbstractSet,实现了Set接口。 TreeSet的主要属性包括元素数组elementData、元素个数...

    数据结构与算法分析(java版内含源代码)

    Java编程语言在实现这些数据结构和算法时,提供了丰富的类库支持,如ArrayList和LinkedList实现了线性结构,HashSet和HashMap实现了集合和映射,而TreeSet和TreeMap则实现了有序集合和映射。同时,Java的泛型特性...

    java集合类源码分析之Set详解.docx

    Set接口继承自Collection接口,提供了多种实现类,其中最常用的是HashSet和TreeSet。这两个类分别依赖于HashMap和TreeMap实现其功能。 HashSet是通过HashMap内部实现的,这意味着它不保证元素的顺序,同时支持高效...

    通过分析_JDK_源代码研究_TreeMap_红黑树算法实现.docx

    ### 通过分析JDK源代码研究TreeMap红黑树算法实现 #### 一、TreeMap与TreeSet的关系 TreeMap 和 TreeSet 是 Java 集合框架中的重要成员,它们提供了基于红黑树的数据结构实现。从给定部分源代码可以看到,TreeSet ...

    Java 常用数据结构分析

    以下是对这些数据结构及其在Java中的具体实现的详细分析: 1. **线性表**: - **ArrayList**: 作为线性表的一种实现,ArrayList是一个动态数组,它允许快速的随机访问(O(1)时间复杂度)。通过索引可以快速获取...

    ocjp题库,答案,分析

    根据提供的OCJP(1Z0-851)模拟题及其分析内容,我们可以总结出以下几个重要的知识点: ### 泛型的使用与警告避免 #### 题目解析 题目要求我们对一段非泛型化的代码进行修改,使之能够兼容泛型,并避免编译器发出的...

    数据结构与算法分析_Java语言描述(第2版)]

    表达式树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语言描述(高清带书签)+课后习题答案.rar

    Java提供了丰富的类库支持,如ArrayList、LinkedList、TreeSet等,这些都可以作为数据结构的基础,而其面向对象的特性使得实现复杂的算法结构更为简洁。 课后习题答案部分是学习过程中的重要参考资料,它可以帮助...

    数据结构与算法分析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应用:两种Java容器类List和Set分析

    ### Java应用:两种Java容器类List和Set分析 #### 一、概述 在Java编程语言中,集合框架(Collections Framework)是处理数据的核心组件之一,它提供了存储和操作对象的各种方式。本文将深入探讨Java中的两种重要...

    数据结构与算法分析 Java语言描述第2版

    表达式树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中,集合框架提供了丰富的数据结构实现,如ArrayList和LinkedList对应数组和链表,Stack和Queue实现了栈和队列,TreeSet和HashMap实现了树和哈希表。理解这些类的内部工作原理对于优化代码至关重要。 总之,...

    基于二次误差度量的网格简化

    本项目基于二次误差度量的网格简化算法,通过Java编程语言实现,利用了Java集合框架中的TreeSet数据结构。 二次误差度量是网格简化的常用方法之一,它以模型的曲率变化作为简化过程中的衡量标准。在简化过程中,每...

    学生成绩分析系统

    成绩排序可能涉及数组或集合框架(如ArrayList、LinkedList或TreeSet)的使用,利用它们提供的排序方法对成绩进行升序或降序排列。 平均分计算和及格率统计是数据分析的重要部分。我们可以遍历所有学生的成绩,计算...

    数据结构与算法分析(Java版)

    在Java中,集合框架提供了多种数据结构的实现,如ArrayList和LinkedList代表了动态数组和链表,Stack和Queue提供了栈和队列的功能,TreeSet和HashMap实现了有序集合和键值对存储。这些类和接口使得开发人员可以方便...

    Java集合概述与实例分析

    本篇将深入探讨Collection接口及其子接口,包括List和Set,以及相关的实例分析。 首先,Collection接口是所有单列集合的父接口,它定义了集合的基本操作,如添加元素(add),删除元素(remove)和判断是否包含某个元素...

    数据结构与算法分析JAVA

    Java集合框架并未直接提供树数据结构,但可以使用TreeSet和TreeMap实现。 5. **散列表(哈希表)**:散列表通过键值对存储数据,提供常数时间复杂度的查找、插入和删除操作。Java的HashMap和ConcurrentHashMap是散...

Global site tag (gtag.js) - Google Analytics