在C++中,当使用std::set<T>集合时,
可以指定T类型的比较方法(实现bool T::operator<(const T& r);等方法),
则在插入元素的过程中,可以自动排序。现在,请教,
在Java中,该如何指定集合的自动排序的方法呢?
最好是用Java中的SortedSet集合。谢谢!
可以指定T类型的比较方法(实现bool T::operator<(const T& r);等方法),
则在插入元素的过程中,可以自动排序。现在,请教,
在Java中,该如何指定集合的自动排序的方法呢?
最好是用Java中的SortedSet集合。谢谢!
而比较方法,是与指定点的距离的远近。这里需要保存当前集合中的点,所与之比较的那个点的坐标。
这个有点类似C++中的functor。不知java该如何具体实现呢?
private Date d; public MyClass(Date d) {
this.setD(d);
}
@Override
public String toString(){
return "my value is " + d;
} @Override
public int compareTo(MyClass o) {
if (d.after(o.getD())) {
return -1;
}
if (d.before(o.getD())) {
return 1;
}
return 0;
} public void setD(Date d) {
this.d = d;
} public Date getD() {
return d;
}
}
import java.util.Calendar;
import java.util.Collections;
import java.util.List;public class CompareList { public static void main(String[] args) throws InterruptedException {
List<MyClass> list = new ArrayList<MyClass>();
list.add(new MyClass(Calendar.getInstance().getTime()));
Thread.sleep(1000);
list.add(new MyClass(Calendar.getInstance().getTime()));
Thread.sleep(1000);
list.add(new MyClass(Calendar.getInstance().getTime()));
Thread.sleep(1000);
list.add(new MyClass(Calendar.getInstance().getTime()));
Thread.sleep(1000);
list.add(new MyClass(Calendar.getInstance().getTime()));
Thread.sleep(1000);
for (MyClass myClass : list) {
System.out.println(myClass);
}
System.out.println();
Collections.sort(list);
for (MyClass myClass : list) {
System.out.println(myClass);
}
}}
import java.util.Calendar;
import java.util.Collections;
import java.util.List;public class CompareList { public static void main(String[] args) throws InterruptedException {
List<MyClass> list = new ArrayList<MyClass>();
list.add(new MyClass(Calendar.getInstance().getTime()));
Thread.sleep(1000);
list.add(new MyClass(Calendar.getInstance().getTime()));
Thread.sleep(1000);
list.add(new MyClass(Calendar.getInstance().getTime()));
Thread.sleep(1000);
list.add(new MyClass(Calendar.getInstance().getTime()));
Thread.sleep(1000);
list.add(new MyClass(Calendar.getInstance().getTime()));
Thread.sleep(1000);
for (MyClass myClass : list) {
System.out.println(myClass);
}
System.out.println();
Collections.sort(list);
for (MyClass myClass : list) {
System.out.println(myClass);
}
}}
import java.util.*;
class Person implements Comparable<Person>{
private int age;
private String name;
public Person(){
}
public Person(int age,String name){
this.age=age;
this.name=name;
}
public String toString(){
return new StringBuilder("(name:").append(age).append(")").toString();
}
@Override
public int compareTo(Person p){
return age-p.age;//根据age来排序
}
}
public class TestSet{
public static void main(String args[]){
Set<Person> set=new TreeSet<Person>();//自动就可以排序
set.add(new Person(3,"ccc"));
set.add(new Person(2,"aaa"));
set.add(new Person(1,"bbb"));
System.out.println(set);
}
}