以下是Employee bean类。
public class Employee {
public String name;
public int age;
public Employee()
{
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge()
{
return age;
}
public void setAge(int age)
{
this.age = age;
}
}
我有其他EmployeeTest类,在其中我创建了Employee类的对象并存储在ArrayList中。
import java.util.ArrayList;
public class EmployeeTest {
public static void main(String[] args)
{
ArrayList<Employee> empList = new ArrayList<Employee>();
Employee emp1 = new Employee();
emp1.setAge(15);
emp1.setName("Employee1");
Employee emp2 = new Employee();
emp2.setAge(10);
emp2.setName("Employee1");
empList.add(emp1);
empList.add(emp2);
for(Employee emp : empList)
{
System.out.println("employee name : " + emp.getName());
System.out.println("employee age : " + emp.getAge());
}
}
}
现在我有一个问题是我想根据Employee类的age属性对ArrayList进行排序。所以请解释我该如何排序。
答案 0 :(得分:10)
让其实现Comparable
接口,如其他答案所示,是一种选择。
但总的来说,我建议 NOT 实现Comparable
接口,只要该类没有毫无疑问的自然顺序。对于Employee
,肯定有 NO 自然排序。
想象一下,您希望根据员工的年龄对员工进行排序。一旦按升序排列,一次按降序排列。你怎么能做到这一点?现在想象一下你想按照他们的年龄对它们进行一次排序,并按照字母顺序按照他们的名字排序。如果不实施Comparator
,则无法执行此操作。这就是我在这里推荐的内容:
您可以创建类似
的方法private static Comparator<Employee> byAge()
{
return new Comparator<Employee>()
{
@Override
public int compare(Employee o1, Employee o2)
{
return o1.getAge() - o2.getAge();
}
};
}
然后你可以简单地调用
Collections.sort(empList, byAge());
如果要按相反顺序对它们进行排序,可以调用
Collections.sort(empList, Collections.reverseOrder(byAge()));
如果要按名称对它们进行排序,可以创建方法
private static Comparator<Employee> byName()
{
return new Comparator<Employee>()
{
@Override
public int compare(Employee o1, Employee o2)
{
return o1.getName().compareTo(o2.getName());
}
};
}
用
对它们进行排序 Collections.sort(empList, byName());
这比实施Comparable
更加通用。
答案 1 :(得分:2)
您可以将Collections.sort方法与自定义Comparator:
一起使用 import java.util.Collections;
import java.util.Comparator;
[...]
Collections.sort(empList, new Comparator<Employee>() {
@Override public int compare(Employee x, Employee y) {
return Integer.compare(x.getAge(), y.getAge());
}
});
我使用了匿名Comparator
课程,您也可以写一个普通的Comparator
课程,请参阅Sri Harsha Chilakapati的答案。
答案 2 :(得分:1)
实施Comparable
界面
class Employee implements Comparable<Employee> {
在compareTo
类中添加方法Employee
,如下所示:
@Override
public int compareTo(Employee other) {
return this.age - other.age;
}
然后你可以像这里一样对你的列表进行排序:
Collections.sort(empList)
答案 3 :(得分:1)
你需要写一个比较器。
class EmployeeAgeComparator implements Comparator<Employee>
{
@Override
public int compare(Employee e1, Employee e2)
{
if (e1.getAge() > e2.getAge())
{
return -1;
}
else if (e1.getAge() < e2.getAge())
{
return 1;
}
return 0;
}
}
然后使用Collections.sort
这样的方法。
Collections.sort(empList, new EmployeeAgeComparator());
希望这有帮助。
答案 4 :(得分:0)
您的类必须实现Comparable接口并实现compareTo
方法。然后,您可以使用Arrays.sort(yourArray)
对其进行排序。
答案 5 :(得分:0)
我认为您可能希望对不同的属性进行排序,因此在这种情况下,您应该创建适当的比较器,并使用正确的排序方法(也需要它)。
答案 6 :(得分:0)
这是一种简单的排序算法。我们存储最低年龄的下标值,以便我们可以交换它。
for (int i = 0; i < empList.size(); i++)
{
int smallest = i;
for (int j = i; j < numbers.length; j++)
{
if (empList.get(j).getAge() < emplist.get(smallest).getAge())
smallest = j;
}
int temp = empList.get(i).getAge();
empList.set(i, empList.get(smallest))
empList.set(smallest, temp);
}