-3

我听说过Bucket Sorting. 当我们对数百万条记录进行排序时,任何人都可以澄清它是如何提供最佳性能的吗?有n*log(n)or的算法O(n) 吗?

我有 1000 个员工对象,每个员工对象都有 id、name、salary 属性。我根据 id 属性将这些对象添加到ArrayList我想要的这些对象中。sort到底有没有?没有使用Collections.sort()方法。考虑以下解决方案,请任何人帮助哪一个提供最佳性能?

谢谢

4

6 回答 6

3

可以将ArrayList元素存储在 ArrayFormat 中。如果您通过 id 识别用户员工,您可以使用HashTable使用键值对的类,否则您可以使用 Comparable 接口实现您的类。

public class Employee implements Comparable<Employee> {

    private String id;
    private String name;
    private int salary ;

    public int compareTo(Employee val) {
        return id.compareTo(val.id);
    }

    // getter and setters here...

    List<Employee> emp = new ArrayList<Employee>();
    Collections.sort(emp);
于 2013-08-06T11:16:26.063 回答
3
public class Employee implements Comparable<Employee> {

private int id;
private String name;
private String salary ;

public int compareTo(Employee val) {
      if(id>val.id){
      return 1;  
    }else if(id<val.id){
        return -1;
    } else {
        return 0;
    }
}

//getter and setters here
}

现在你可以创建一个列表

 List<Employee> emp= new ArrayList<Employee>();

现在你可以使用

Collections.sort(emp); 

按 id 排序

于 2013-08-06T11:12:11.467 回答
3

没有 Collections.sort() :

首先Comparable<Employee>在 Employee 的类中实现并覆盖compareTo

@Override
public int compareTo(Employee o) {

    return this.id.compareTo(o.id);
}

将您的未排序列表传递给TreeSet并获取set(按 id 排序)然后new List使用此创建set

List<Employee> list=new ArrayList<Employee>();
    list.add(new Employee(1, "A", Double.parseDouble("50")));
    list.add(new Employee(22, "B", Double.parseDouble("11")));
    list.add(new Employee(3, "C", Double.parseDouble("222")));
    list.add(new Employee(34, "D", Double.parseDouble("4")));

    SortedSet<Employee> set=new TreeSet<Employee>( list);

    List<Employee> l=new ArrayList<Employee>();
    l.addAll(set);

    System.out.println(l);

输出:按 id 排序,没有Collections.sort()

[Employee [id=1, name=A, price=50.0], Employee [id=3, name=C, price=222.0], Employee [id=22, name=B, price=11.0], Employee [id=34, name=D, price=4.0]]

编辑:

员工等级:

class Employee implements Comparable<Employee>{

Integer id;
String name;
Double price;
       -------

}
于 2013-08-06T11:25:16.630 回答
1
My requirement is not to use Collections.sort() method

在这种情况下,您需要使用一些现有的排序方式。如果集合是静态的(不再添加项目),我可以推荐使用快速排序或合并排序。如果要添加项目,堆排序或二进制排序可能是最好的方法。

于 2013-08-06T11:07:44.590 回答
0

您可以使用此代码对列表进行排序:

Collections.sort(list, new Comparator() {
    public int compare(Object a, Object b) {
        Employee ea = (Employee) a;
        Employee eb = (Employee) b;
        return ea.getID() - eb.getID();
    }
}

这用于使用Collections.sort自定义比较器对列表进行排序,该比较器比较 ID。

如果您不能使用Collections.sort,那么您的老师肯定告诉过您如何对列表进行排序吗?也许在讲座中专心听讲会有所收获。

于 2013-08-06T11:08:04.813 回答
-1

首先将其转换为您的班级列表:

List<Employee> list = new List<Employee>(arraylist);

var sorted = list.OrderBy(o => o.id).ToList();
于 2013-08-06T11:33:07.107 回答