展开全部
package com.sgcc.domain.util;
import java.util.TreeSet;
class Person implements Comparable{
String name;
public Person(String name) {
this.name=name;
}
int count ;
@32313133353236313431303231363533e4b893e5b19e31333337386637Override
public int compareTo(Person o) {
count++;
System.out.println(name+"和" +o.name+"比较");
System.out.println(this.getClass().getName() + "=" +this.hashCode());
System.out.println(o.getClass().getName() + "=" + o.hashCode());
System.out.println("内部比较第" + count + "次");
//排序标准,按照hashcode
int result = this.hashCode() > o.hashCode()? 1 : (this.hashCode() == o.hashCode() ? 0 : -1);
//如果hashcode相同,按照name,hashcode一般不会相同
if (result == 0) {
result = name.compareTo(o.name);
}
return result;
//return this.hashCode() - o.hashCode();
}
}
public class Demo3 {
public static void main(String[] args) {
TreeSet set = new TreeSet();
Person p1 = new Person("p1");
Person p2 = new Person("p2");
Person p3 = new Person("p3");
Person p4 = new Person("p4");
Person p5 = new Person("p5");
Person p6 = new Person("p6");
System.out.println("插入p1");
p1.count = 0;
System.out.println(set.add(p1));
System.out.println();
System.out.println("插入p2");
p2.count = 0;
System.out.println(set.add(p2));
System.out.println();
System.out.println("插入p3");
p3.count = 0;
System.out.println(set.add(p3));
System.out.println();
System.out.println("插入p4");
p4.count = 0;
System.out.println(set.add(p4));
System.out.println();
System.out.println("插入p5");
p5.count = 0;
System.out.println(set.add(p5));
System.out.println();
System.out.println("插入p6");
p6.count = 0;
System.out.println(set.add(p6));
System.out.println();
/***
System.out.println("插入p5");
p5.count = 0;
System.out.println(set.add(p5));
System.out.println();
***/
for (Person person : set) {
System.out.print(person.name);
System.out.print("-");
}
System.out.println();
for (Person person : set) {
System.out.print(person.hashCode());
System.out.print("-");
}
}
}
我把你的代码处理了一下。目前是按照hashcode的顺序,从小到大排序。
首先说一下,每个元素在内部怎么排序的,是由容器决定的
你用的是treeset,在使用TreeSet存储对象的时候, add()方法内部就会自动调用compareTo()方法进行比较, 根据比较结果使用二叉树形式进行存储。记住是二叉树。不是列表,所以,不要用冒泡排序的,心里去想插入一个对象就要和每个元素都比较一下。
遍历方式是二叉树。不是每个元素都会比较的
这个文档说明了,treeset的排序检索方式