HashSet、LinkedHashSet 和 TreeSet 的排序

本贴最后更新于 2677 天前,其中的信息可能已经天翻地覆

基本观点

  • HashSet:无序
  • LinkedHashSet:按插入排序
  • TreeSet:按自然顺序

主要讲 TreeSet 的自然顺序

基本类型的自然排序

TreeSet tree = new TreeSet();
tree.add(12);
tree.add(63);
tree.add(34);
tree.add(45);

Iterator iterator = tree.iterator();
System.out.print("Tree set data: ");
while (iterator.hasNext()) {
    System.out.print(iterator.next() + " ");
}

输出结果:Tree set data: 12 34 45 63

类对象的自然排序

class Dog {
  int size;

  public Dog(int s) {
	size = s;
  }

  public String toString() {
	return size + "";
  }
}
import java.util.Iterator;
import java.util.TreeSet;

public class TestTreeSet {
  public static void main(String[] args) {
	TreeSet dset = new TreeSet();
	dset.add(new Dog(2));
	dset.add(new Dog(1));
	dset.add(new Dog(3));

	Iterator iterator = dset.iterator();
	while (iterator.hasNext()) {
	System.out.print(iterator.next() + " ");
	}
  }
}

结果

Exception in thread "main" java.lang.ClassCastException: 
collection.Dog cannot be cast to java.lang.Comparable 
at java.util.TreeMap.put(Unknown Source) 
at java.util.TreeSet.add(Unknown Source) 
at collection.TestTreeSet.main(TestTreeSet.java:22)

Dog 类实现 Comparable 接口和 compareTo 方法

class Dog implements Comparable{
  int size;

  public Dog(int s) {
	size = s;
  }

  public String toString() {
	return size + "";
  }

  @Override
	public int compareTo(Dog o) {
	  return size - o.size;
  }
}

输出

1 2 3
  • Java

    Java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的。Java 技术具有卓越的通用性、高效性、平台移植性和安全性。

    3190 引用 • 8214 回帖 • 1 关注

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...