Bucket根据Id对对象的数组列表进行排序或排序



我听说过Bucket Sorting。有人能澄清一下,当我们对数百万张唱片进行排序时,它是如何获得最佳性能的吗?n*log(n)O(n)有什么算法吗?

我有1000个员工对象,每个员工对象都有id、名称和薪资属性。我将这些对象添加到了ArrayList中,我希望sort这些对象基于id属性。有吗?不使用Collections.sort()方法。考虑到以下解决方案,请有人帮助哪一个方案的性能最好?

感谢

无集合.sort():

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

@Override
public int compareTo(Employee o) {
    return this.id.compareTo(o.id);
}

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

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

OutPut:在没有Collections.sort() 的id上排序

[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;
       -------
}
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 排序

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);
My requirement is not to use Collections.sort() method

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

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

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,那么你的老师肯定告诉过你如何排序列表吗?也许在课堂上集中注意力会有回报的。

首先将其转换为类的列表:

List<Employee> list = new List<Employee>(arraylist);
var sorted = list.OrderBy(o => o.id).ToList();

最新更新