我听说过Bucket Sorting
。当我们对数百万条记录进行分类时,是否可以澄清它如何提供最佳性能?是否有n*log(n)
或O(n)
的算法
?
我有1000个员工对象,每个员工对象都有id,name,salary属性。我将这些对象添加到ArrayList
我希望基于id属性sort
这些对象。反正呢?不使用Collections.sort()
方法。考虑到以下解决方案,请任何人帮助哪一个提供最佳性能?
由于
答案 0 :(得分: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排序
答案 1 :(得分: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);
答案 2 :(得分:3)
没有Collections.sort():
首先在Empoloyee的班级中实施Comparable<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);
OutPut:在没有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;
-------
}
答案 3 :(得分:1)
My requirement is not to use Collections.sort() method
在这种情况下,您需要使用一些现有的排序方式。如果集合是静态的(不再添加项目),我可以建议使用快速排序或合并排序。如果会添加项目,那么堆垛或二进制排序可能是最好的方法。
答案 4 :(得分: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
,那么您的老师肯定会告诉您如何对列表进行排序?也许在讲座中注意力是值得的。
答案 5 :(得分:-1)
首先将其转换为班级列表:
List<Employee> list = new List<Employee>(arraylist);
var sorted = list.OrderBy(o => o.id).ToList();