Maison  >  Article  >  Java  >  Explication détaillée de la façon de trier les éléments d'une liste en Java

Explication détaillée de la façon de trier les éléments d'une liste en Java

高洛峰
高洛峰original
2017-01-17 11:55:482436parcourir

Les implémentations de List définies dans Java Collection Framework incluent Vector, ArrayList et LinkedList. Ces collections fournissent un accès indexé à des groupes d'objets. Ils prennent en charge l’ajout et la suppression d’éléments. Cependant, ils ne disposent pas de support intégré pour le tri des éléments.
Vous pouvez trier les éléments de la liste à l'aide de la méthode sort() dans la classe java.util.Collections. Vous pouvez transmettre un objet List à la méthode, ou vous pouvez transmettre un List et un Comparator. Si les éléments de la liste sont tous du même type et que la classe implémente l'interface Comparable, vous pouvez simplement appeler Collections.sort(). Si cette classe n'implémente pas Comparator, vous pouvez également transmettre un Comparator à la méthode sort() pour le tri. Si vous ne souhaitez pas utiliser l'ordre de tri par défaut, vous pouvez également transmettre un Comparator à la méthode sort() pour trier.

1. L'objet comparé implémente l'interface Comparable

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

2. Utilisez 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; 
 } 
   
}

3. elements Tri de plusieurs attributs dans (à l'aide de commons-beanutils)
Il existe une classe BeanComparator dans la bibliothèque de classes commons-beanutils, qui peut être utilisée pour trier les JavaBeans. Mais cette classe ne peut trier qu’une seule propriété à la fois. Ce qui suit est un exemple d'utilisation de BeanComparator pour trier plusieurs propriétés de JavaBean. C'est très 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;
   }
  });
 }
}

Pour des explications plus détaillées sur les méthodes de tri des éléments de liste en Java, veuillez faire attention au site Web PHP chinois. pour des articles connexes!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn