Maison  >  Article  >  Java  >  Exemple de code montrant comment Collections.sort() implémente la méthode de tri de liste en Java

Exemple de code montrant comment Collections.sort() implémente la méthode de tri de liste en Java

黄舟
黄舟original
2017-06-18 10:10:101860parcourir

Cet article présente principalement les méthodes par défaut et personnalisées de Java Collections.sort() pour implémenter le tri de liste. Les amis dans le besoin peuvent se référer à

1 La méthode de tri de liste par défaut fournie par Java <.>

Code principal :


List<String> list = new ArrayList();list.add("刘媛媛");
list.add("王硕");
list.add("李明");
list.add("刘迪");
list.add("刘布");
//升序
Collections.sort(list,Collator.getInstance(java.util.Locale.CHINA));//注意:是根据的汉字的拼音的字母排序的,而不是根据汉字一般的排序方法
for(int i=0;i<list.size();i++)
{
 System.out.print(list.get(i));
}
System.out.println("");
//降序
Collections.reverse(list);//不指定排序规则时,也是按照字母的来排序的
for(int i=0;i<list.size();i++)
{
  System.out.print(list.get(i));
}
Résultat de sortie :

Li Ming Liu Bu Liu Di Liu Yuanyuan Wang Shuo

Wang Shuo, Liu Yuanyuan, Liu Di, Liu Bu, Li Ming

2. Règles de tri personnalisées :

La première est que la classe modèle implémente. Comparable

Interface , override override int compareTo(Object o) méthode

       Classe de modèle :


public class StudentDTO implements Comparable
{
 private String name;
 private int age;
public String getName()
{
 return name;
}
public void setName(String name)
{
  this.name = name;
}
public ObjType getType()
{
 return type;
}
public void setAge(int age)
{
  this.age= age;
}
@Override
public int compareTo(Object o)
{
  StudentDTO sdto = (StudentDTO)o;
  int otherAge = sdto.getAge();
  // note: enum-type&#39;s comparation depend on types&#39; list order of enum method
  // so, if compared property is enum-type ,then its comparationfollow ObjEnum.objType order
  return this.age.compareTo(otherAge);
}
}
   主方法:   
public static void main(String[] args)
{
  List<StudentDTO> studentList = new ArrayList();
  StudentDTO s1 = new StudentDTO ();
  s.setName("yuanyuan");
  s.setAge(22);
  studentList.add(s1);
     StudentDTO s1 = new StudentDTO ();
     s.setName("lily");
     s.setAge(23);
     studentList.add(s2);
     Collections.sort(studentList); //按照age升序 22,23,
     Collections.reverse(studentList); //按照age降序 23,22 
}
La seconde est que la classe comparator implémente l'interface Comparator et remplace la méthode int compare(Object o1, Object o2) ; Remarque :

1 La méthode de tri pour

array

est la suivante. :


public class StudentDTO implements Comparable
{
  private String name;
  private int age;
  public String getName()
  {
   return name;
  }
  public void setName(String name)
 {
   this.name = name;
  }
  public ObjType getType()
  {
   return type;
  }
  public void setAge(int age)
  {
   this.age= age;
  }
} 
   比较器类:
class MyCompartor implements Comparator
{
  @Override
  public int compare(Object o1, Object o2)
 {
   StudentDTO sdto1= (StudentDTO )o1;
   StudentDTO sdto2= (StudentDTO )o2;
   return sdto1.getAge.compareTo(stdo2.getAge())
 }
}
   主方法:
public static void main(String[] args)
{
  List<StudentDTO> studentList = new ArrayList();
  StudentDTO s1 = new StudentDTO ();
  s.setName("yuanyuan");
  s.setAge(22);
  studentList.add(s1);
  StudentDTO s1 = new StudentDTO ();
  s.setName("lily");
  s.setAge(23);
  studentList.add(s2);
  MyComparetor mc = new MyComparetor();
  Collections.sort(studentList,mc);  //按照age升序 22,23,
  Collections.reverse(studentList,mc); //按照age降序 23,22 
}

2. Pour trier les caractères chinois : vous pouvez essayer d'utiliser ICU4J pour obtenir de meilleurs résultats, surtout lorsque le nom de famille contient des caractères rares,

Remplacez java.text.Collator par com.ibm.icu.text.Collator et com.ibm.icu util.ULocale remplace java.util.Locale

3 pour les types d'énumération, enum1.compareTo ( enum2) est comparé selon l'ordre dans lequel les valeurs du type d'énumération sont définies. Les dernières sont plus grandes,


au lieu de comparer par ordre alphabétique des valeurs.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

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