黑马程序员技术交流社区
标题:
对于一个普通的类对象,如何在TreeSet集合中完成排序操作?
[打印本页]
作者:
于汝国
时间:
2011-12-21 13:08
标题:
对于一个普通的类对象,如何在TreeSet集合中完成排序操作?
本帖最后由 于汝国 于 2011-12-21 23:06 编辑
TreeSet的内容是允许进行排序的,但是对于一个普通的类对象是不能向TreeSet集合中加入的,那么、如何在TreeSet集合中实现对普通类对象的排序操作呢?
作者:
海中的游弋草
时间:
2011-12-21 13:10
这是实现自定义treeset排序的一个类代码,请参考一下
package com.shengsiyuan2;
import java.util.Comparator;
import java.util.Iterator;
import java.util.TreeSet;
public class TreeSetTest3
{
public static void main(String[] args)
{
TreeSet set = new TreeSet(new MyComparator());
set.add("C");
set.add("A");
set.add("B");
set.add("E");
set.add("a");
set.add("F");
set.add("D");
for(Iterator iter = set.iterator(); iter.hasNext();)
{
String value = (String)iter.next();
System.out.println(value);
}
}
}
class MyComparator implements Comparator
{
public int compare(Object arg0, Object arg1)
{
String s1 = (String)arg0;
String s2 = (String)arg1;
return s2.compareTo(s1);
}
}
作者:
于汝国
时间:
2011-12-21 13:31
普通类实现了Comparable接口
作者:
海中的游弋草
时间:
2011-12-21 13:32
恩 对呀
因为 你是对类进行比较的呀
嘿嘿
好好想想 ,好好分析一下代码额
作者:
刘基军
时间:
2011-12-21 16:32
方法一:元素实现Comparable接口,重写compareTo()方法,实现集合排序
方法二:定义一个比较器传给TreeSet的构造函数,该比较器实现Comparator接口,重写compare()方法,实现集合排序
import java.util.TreeSet;
import java.util.Iterator;
import java.util.Comparator;
/**
1.实现Comparable接口,重写compareTo()方法,实现集合排序
*/
class Student implements Comparable
{
String name;
int age;
Student(String name, int age)
{
this.name=name;
this.age=age;
}
public int compareTo(Object obj)
{
if(!(obj instanceof Student))
throw new RuntimeException("不是学生对象");
Student o = (Student)obj;
if(this.age==o.age)
return this.name.compareTo(o.name);
else if(this.age>o.age)
return 1;
else
return -1;
}
public String toString()
{
return this.name+"-"+this.age;
}
}
class Test
{
public static void main(String[] args)
{
TreeSet<Student> ts = new TreeSet<Student>();
ts.add(new Student("John",20));
ts.add(new Student("Jack",20));
ts.add(new Student("Jam",21));
Iterator<Student>it = ts.iterator();
while(it.hasNext())
{
System.out.println(it.next());
}
/**
2.(匿名内部类的方式)实现Comparator接口,重写compare()方法,实现集合排序
*/
TreeSet<Student> ts2 = new TreeSet<Student>(
new Comparator<Student>()
{
public int compare(Student sa, Student sb)
{
if(sa.age==sb.age)
return sa.name.compareTo(sb.name);
else if(sa.age>sb.age)
return 1;
else
return -1;
}
}
);
ts2.add(new Student("John",20));
ts2.add(new Student("Jack",20));
ts2.add(new Student("Jam",21));
System.out.println();
Iterator<Student>it2 = ts2.iterator();
while(it2.hasNext())
{
System.out.println(it2.next());
}
}
}
复制代码
测试结果:
Jack-20
John-20
Jam-21
Jack-20
John-20
Jam-21
复制代码
作者:
周敏2011nc
时间:
2011-12-21 18:21
TreeSet sortedResults = new TreeSet(
new Comparator(){
public int compare(Object o1, Object o2) {
// TODO Auto-generated method stub
User user1 = (User)o1;
User user2 = (User)o2;
/*如果compareTo返回结果0,则认为两个对象相等,新的对象不
会增加到集合中去
* 所以,不能直接用下面的代码,否则,那些个数相同的其他姓
名就打印不出来。
* */
//return user1.value-user2.value;
//return
user1.value<user2.value?-1:user1.value==user2.value?0:1;
if(user1.value<user2.value)
{
return -1;
}else if(user1.value>user2.value) {
return 1;
}else{
return user1.name.compareTo(user2.name);
}
}
}
作者:
于汝国
时间:
2011-12-21 23:05
谢谢各位!明白了,嘻嘻!黑马这是个温暖的大家庭!
作者:
于汝国
时间:
2011-12-21 23:05
谢谢各位!明白了,嘻嘻!黑马这是个温暖的大家庭!
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2