Home > Java > javaTutorial > body text

Detailed explanation of how to sort list elements in Java

高洛峰
Release: 2017-01-17 11:55:48
Original
2448 people have browsed it

The List implementations defined in the Java Collection Framework include Vector, ArrayList and LinkedList. These collections provide indexed access to groups of objects. They provide support for adding and removing elements. However, they do not have built-in support for sorting elements.
You can sort List elements using the sort() method in the java.util.Collections class. You can pass a List object to the method, or you can pass a List and a Comparator. If the elements in the list are all of the same type and the class implements the Comparable interface, you can simply call Collections.sort(). If this class does not implement Comparator, you can also pass a Comparator to the method sort() for sorting. If you do not want to use the default sorting order, you can also pass a Comparator to the sort() method to sort.

1. The compared object implements the Comparable interface

public class Student implements Comparable { 
 private int id; 
 private int age; 
 private String name; 
 public Student(int id){ 
  this.id=id; 
 } 
 public int getId() { 
  return id; 
 } 
  
 public void setId(int id) { 
  this.id = id; 
 } 
  
 public int getAge() { 
  return age; 
 } 
  
 public void setAge(int age) { 
  this.age = age; 
 } 
  
 public String getName() { 
  return name; 
 } 
  
 public void setName(String name) { 
  this.name = name; 
 } 
  
   
   
 public static void main(String args[]){ 
  List<Student> list=new ArrayList<Student>(); 
  for(int i=1000;i>0;i--){ 
   list.add(new Student(i)); 
  } 
    
  Collections.sort(list); 
  for(Student s: list){ 
   System.out.println(s.getId()); 
  } 
 } 
  
 public int compareTo(Object o) { 
  if(o instanceof Student){ 
   Student s=(Student)o; 
   if(this.id>s.id){ 
    return 1; 
   } 
   else{ 
    return 0; 
   } 
  } 
  return -1; 
 } 
  
}
Copy after login

2. Use Collections.sort(Object o, Comparator c)

public class JiaMenuComparator implements Comparator{ 
  
 public int compare(Object o1, Object o2) { 
  if(null!=o1&&null!=o2) 
  { 
   JiaMenu menu1=(JiaMenu)o1; 
   JiaMenu menu2=(JiaMenu)o2; 
   if(menu1.getId()<menu2.getId()){ 
    return 1; 
   }else { 
    return 0; 
   } 
  } 
  return 0; 
 } 
   
}
Copy after login

3. Compare multiple elements in the List Sorting properties (using commons-beanutils)
commons-beanutils There is a BeanComparator class in the class library that can be used to sort JavaBeans. But this class can only sort one property at a time. The following is an example of using BeanComparator to sort multiple properties of JavaBean. It is very simple:

import org.apache.commons.beanutils.BeanComparator;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
  
/**
 * 对 List 元素的多个属性进行排序的类
 */
@SuppressWarnings({"unchecked"})
public class ListSorter {
  
 /**
  * List 元素的多个属性进行排序。例如 ListSorter.sort(list, "name", "age"),则先按
  * name 属性排序,name 相同的元素按 age 属性排序。
  *
  * @param list  包含要排序元素的 List
  * @param properties 要排序的属性。前面的值优先级高。
  */
 public static <V> void sort(List<V> list, final String... properties) {
  Collections.sort(list, new Comparator<V>() {
   public int compare(V o1, V o2) {
    if (o1 == null && o2 == null) return 0;
    if (o1 == null) return -1;
    if (o2 == null) return 1;
  
    for (String property : properties) {
     Comparator c = new BeanComparator(property);
     int result = c.compare(o1, o2);
     if (result != 0) {
      return result;
     }
    }
    return 0;
   }
  });
 }
}
Copy after login

For more detailed explanations of methods for sorting list elements in Java, please pay attention to the PHP Chinese website for related articles!

Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template