在C++中,当使用std::set<T>集合时,
可以指定T类型的比较方法(实现bool T::operator<(const T& r);等方法),
则在插入元素的过程中,可以自动排序。现在,请教,
在Java中,该如何指定集合的自动排序的方法呢?
最好是用Java中的SortedSet集合。谢谢!

解决方案 »

  1.   

    构造集合的时候加一个自定义的comparator比较器
      

  2.   

    SortedSet的话,被添加的对象只需要impliments comparable接口就可以了
      

  3.   

    能在具体一些吗。其实,这里添加进集合的是一些坐标点。
    而比较方法,是与指定点的距离的远近。这里需要保存当前集合中的点,所与之比较的那个点的坐标。
    这个有点类似C++中的functor。不知java该如何具体实现呢?
      

  4.   

    package com.xuz.datastruct.csdn;import java.util.Date;public class MyClass implements Comparable<MyClass> {
    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;
    }
    }
      

  5.   

    package com.xuz.datastruct.csdn;import java.util.ArrayList;
    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);
    }
    }}
      

  6.   

    package com.xuz.datastruct.csdn;import java.util.ArrayList;
    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);
    }
    }}
      

  7.   

    谢谢dr_lou!您的代码告诉我如何设定类型的比较方法了。还能在指点一下如何使用SortedSet吗?
      

  8.   

    可以排序的set哦,应该要制定一个compartor 才可以吧。
      

  9.   


    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); 
       }
    }