`

TreeSet和Comparable

阅读更多
Java通过TreeSet可以实现对元素的排序。排序规则通过元素类实现Comparable接口,然后重写该Comparable接口的ComparaTo方法来规定。

这里我们有一个FileNode类, 让该类实现Comparable,并通过对比文件的路径长短来排序。
排序按照文件路径'从近到远'(就是d:/1->d:/1/1->d:/1/1/1)

public class FileNode implements Comparable<FileNode>{
       
File self;
	private Set<FileNode> childList;

	public File getSelf()
	{
		return self;
	}

	public void setSelf(File self)
	{
		this.self = self;
	}

	public FileNode(File self)
	{
		 
		this.self = self;
	}
	
	private String getSelfPath(){
		return this.self.getAbsolutePath();
	}


	@Override
	public int compareTo(FileNode o)
	{
		if(this.getSelfPath().equals(o.getSelfPath())){
			return 0;
		}
		else{
			
                return this.getSelfPath().length()-o.getSelfPath().length(); 
                        //这里如果结果是负数, 那么两个对象就会互换位置.
		}
	}

}


这里要根据compareTo返回的值进行排序。
要注意的就是假如返回的是0, 那么程序就会认定两个对象是相同的, 那么调用该方法的this对象就不会被存入TreeSet当中。

假如返回的是负数, 那么程序就会将重新排序。
这里的一个重点就是, compareTo(参数对象)这里的参数。
Java在这里并不是将this对象和排序的最后一个进行对比, 而是和第一个进行对比。
假如我们这里将三个文件路径依次放入TreeSet,
treeSet.add("d:/1/2/3");
treeSet.add("d:/1/2");
treeSet.add("d:/1");

那么程序的执行顺序就是:
在执行add("d:/1/2")的时候, 将两个参数进行对比,结果返回负数。
此时的treeSet是["d:/1/2","d:/1/2/3"]
在执行add("d:/1")的时候, 继续进行对比。
只是此时的参数并不是d:/1/2/3, 而是最短的d:/1/2。
对比结果为负数, 于是两个元素互换.
执行结果为
["d:/1","d:/1/2","d/1/2/3"]
分享到:
评论

相关推荐

    【IT十八掌徐培成】Java基础第12天-02.TreeSet实现与Comparable接口.zip

    在实际开发中,理解并灵活运用`TreeSet`和`Comparable`接口可以提高代码的可读性和维护性。合理地设计比较规则,可以让数据结构在处理大量数据时展现出更优的性能。同时,掌握`Comparator`接口的应用也能让我们在...

    treeset 和 hashlist 实现的扑克牌游戏

    在具体实现时,我们可能会创建一个`Card`类表示扑克牌,包含花色和点数属性,并重写`Comparable`接口或提供`Comparator`来确定扑克牌的排序规则。然后,创建一个`TreeSet&lt;Card&gt;`实例来存储和管理所有的牌。当需要...

    Java TreeSet实现学生按年龄大小和姓名排序的方法示例

    Java TreeSet实现学生按年龄大小和姓名排序的方法示例 在 Java 中,TreeSet 是一...本文展示了如何使用 Java 的 TreeSet 和 Comparable 接口来实现学生按年龄大小和姓名排序的方法,这对 Java 开发人员来说非常有用。

    2021-2022计算机二级等级考试试题及答案No.2041.docx

    12. **TreeSet和Comparable接口**:如果没有提供比较器,TreeSet会使用元素实现的Comparable接口进行排序。 13. **Visual FoxPro参照完整性**:设置为"限制"时,删除父表记录会检查子表是否有相关记录,如果有则不...

    2021-2022计算机二级等级考试试题及答案No.418.docx

    11. TreeSet 和 Comparable:在 Java 中,如果创建的 TreeSet 没有指定比较器,那么集合中的元素需要实现 Comparable 接口,以提供比较规则。 12. break, continue, return 区别:break 用于跳出当前循环;continue...

    HashSet和TreeSet_围墙之外

    默认情况下,元素会按照它们的自然顺序(即Comparable接口定义的顺序)排序,如果元素不支持自然排序,可以在创建TreeSet时传入自定义的Comparator。TreeSet的插入、删除和查找操作的时间复杂度为O(logn),因为内部...

    排序之HashSet和TreeSet的区别

    自然顺序是指元素本身的`Comparable`接口实现,如果元素类型不实现`Comparable`,则需要在创建`TreeSet`时提供一个`Comparator`。`TreeSet`的插入、删除和查找操作的时间复杂度为O(log n),因为树结构提供了较好的...

    java 集合框架(TreeSet练习)

    1. **自然排序**:如果集合中的元素实现了`Comparable`接口,那么`TreeSet`将使用`compareTo()`方法来决定元素的顺序。 2. **自定义比较器**:如果我们需要自定义元素的排序规则,可以通过传递一个实现了`...

    TreeSet集合用法

    介绍TreeSet集合用法,向TreeSet集合中添加类的对象,此类需实现Comparable接口,有实例,供需要的朋友下载学习。

    Java 从Set里面取出有序的记录详解及实例

    在Java编程中,集合框架...通过上述分析,我们可以理解Java如何从Set中取出有序的记录,以及如何利用TreeSet和Comparable接口实现元素的排序。在实际开发中,根据需求选择合适的Set实现类,可以有效地管理和操作数据。

    学生成绩排序(TreeSet方式实现)

    `TreeSet`内部基于红黑树(Red-Black Tree)数据结构,这是一种自平衡的二叉查找树,能够保证插入、删除和查找操作的时间复杂度为O(log n)。由于红黑树的特性,`TreeSet`可以保证元素的有序性,而这个顺序通常是由...

    HashSet,TreeSet和LinkedHashSet的区别1

    在Java编程语言中,集合框架是处理数据的...在使用这些集合类时,确保正确地实现了equals()、hashCode()(对于HashSet和LinkedHashSet)以及Comparable或Comparator(对于TreeSet)方法,是保证集合行为正确性的关键。

    treemap treeset hashset hashmap 简要介绍

    在Java编程语言中,集合框架提供了多种数据结构来存储和操作数据,其中`TreeMap`、`TreeSet`、`HashSet`以及`HashMap`是最常用的数据结构之一。这些集合类各自有着独特的特性和应用场景,下面将对它们进行详细介绍。...

    HashSet和TreeSet.doc

    HashSet 和 TreeSet 是 Java 中两种常用的 Set 集合实现,它们都继承自 Set 接口,但实现方式和特性上存在显著差异。 首先,HashSet 是基于哈希表(HashMap 实例)来存储元素的,因此它提供了快速的插入、删除和...

    Java数据结构--13.Java8数据结构TreeSet.pdf

    在Java集合框架中,TreeSet是一个重要的数据结构,它是Set接口的实现类之一,与HashSet和LinkedHashSet不同,TreeSet具有排序功能,这是因为其不仅继承自AbstractSet,还实现了SortedSet和NavigableSet接口。...

    HashSet和TreeSet使用方法的区别解析

    HashSet和TreeSet使用方法的区别解析 HashSet和TreeSet都是Java集合框架中的Set接口实现,用于存储不重复的元素。但是,它们在使用方法和实现机理上有很大的区别。 首先,从使用方法上讲,HashSet和TreeSet都可以...

    Java中Comparable和Comparator的区别

    在Java编程语言中,Comparable和Comparator接口是两个非常重要的组件,它们主要用来进行对象的比较和排序。了解它们之间的区别对于提升代码的可维护性和灵活性至关重要。 Comparable接口来源于java.lang包,它定义...

    解决TreeSet类的排序问题

    TreeSet是Java集合框架中的一种有序集合,它基于红黑树数据结构实现,因此具有O(log n)的插入、删除和查找效率。TreeSet提供两种排序方式:自然排序和定制排序。 1. 自然排序: 自然排序是TreeSet默认的排序方式。...

    在TreeSet中添加自定义对象

    自然排序要求添加到`TreeSet`中的对象必须实现`Comparable`接口,而定制排序则需要提供一个实现了`Comparator`接口的对象来比较集合中的元素。 #### 二、自定义对象添加到TreeSet中的方法 ##### 1. 实现Comparable...

    TreeSet判断重复元素解析及代码示例

    `c1`和`c2`虽然`equals()`返回true,但由于`compareTo()`返回0,所以`c2`不会出现在`TreeSet`中,这充分展示了`TreeSet`中判断重复元素的逻辑。 总结来说,`TreeSet`在判断重复元素时,主要依赖于`Comparable`接口...

Global site tag (gtag.js) - Google Analytics