>  기사  >  Java  >  Java에서 목록 요소를 정렬하는 방법에 대한 자세한 설명

Java에서 목록 요소를 정렬하는 방법에 대한 자세한 설명

高洛峰
高洛峰원래의
2017-01-17 11:55:482391검색

Java Collection Framework에 정의된 List 구현에는 Vector, ArrayList 및 LinkedList가 포함됩니다. 이러한 컬렉션은 개체 그룹에 대한 색인화된 액세스를 제공합니다. 요소 추가 및 제거를 지원합니다. 그러나 요소 정렬을 기본적으로 지원하지 않습니다.
java.util.Collections 클래스의 sort() 메소드를 사용하여 List 요소를 정렬할 수 있습니다. List 개체를 메서드에 전달하거나 List 및 Comparator를 전달할 수 있습니다. 목록의 요소가 모두 동일한 유형이고 클래스가 Comparable 인터페이스를 구현하는 경우 간단히 Collections.sort()를 호출하면 됩니다. 이 클래스가 Comparator를 구현하지 않는 경우 정렬을 위해 Comparator를 sort() 메서드에 전달할 수도 있습니다. 기본 정렬 순서를 사용하지 않으려면 정렬을 위해 Comparator를 sort() 메서드에 전달할 수도 있습니다.

1. 비교 대상은 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. 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를 사용합니다. 속성 정렬(commons-beanutils 사용)
commons-beanutils 클래스 라이브러리에는 JavaBeans를 정렬하는 데 사용할 수 있는 BeanComparator 클래스가 있습니다. 하지만 이 클래스는 한 번에 하나의 속성만 정렬할 수 있습니다. 다음은 JavaBean의 여러 속성을 정렬하기 위해 BeanComparator를 사용하는 예입니다.

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

Java에서 목록 요소를 정렬하는 방법에 대한 자세한 설명은 관련 PHP 중국어 웹사이트를 참조하세요. 조항!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.