通过这段代码,我得到了这样的输出:
TreeSet<String> t=new TreeSet<String>();
t.add("test 15");
t.add("dfd 2");
t.add("ersfd 20");
t.add("asdt 10");
Iterator<String> it=t.iterator();
while(it.hasNext()){
System.out.println(it.next);
}我得到:
asdt 10
dfd 2
ersfd 20
test 15我怎样才能得到这样的订单,根据数字,使用TreeSet?
dfd 2
asdt 10
test 15
ersfd 20 发布于 2014-04-29 13:06:47
TreeSet实现根据您插入的字符串值的字典顺序进行排序。如果您想按整数值进行排序,那么您需要按照其他人的建议进行排序,并创建一个新对象并覆盖compareTo方法,或者使用您自己的比较器。
Set<String> set = new TreeSet<String>(new Comparator<String>() {
public int compare(String one, String other) {
// implement
}
});或
public class MyClass implements Comparable {
private String key;
private int value;
public int compareTo(MyClass other) {
// implement
}
public boolean equals(MyClass other) {
// implement
}
// snip ...
}
Set<MyClass> set = new TreeSet<MyClass>();发布于 2014-04-29 13:05:57
您可以使用一个TreeSet构造函数:http://docs.oracle.com/javase/7/docs/api/java/util/TreeSet.html#TreeSet%28java.util.Comparator%29
这允许您指定自己的比较器,该比较器允许您任意组织集合中的条目。
实现一个Comparator,它从String中提取数字,然后先按数字排序,如果两个数字相等,则只返回String比较。
发布于 2014-04-29 13:05:52
使用接收自定义比较器的TreeSet构造函数,并实现不同排序字符串的比较器。
下面是一个示例(未经测试,在使用之前检查代码):
TreeSet<String> t = new TreeSet<String>(new Comparator<String>() {
public int compare(String s1, String s2) {
int spaceIndex1 = s1.indexOf(' ');
int spaceIndex2 = s2.indexOf(' ');
return Integer.parseInt(s1.substring(spaceIndex1 + 1)).compareTo(Integer.parseInt(s2.spaceIndex2 + 1));
}
});https://stackoverflow.com/questions/23365307
复制相似问题