java集合对象排序

1 、 Java API 针对集合类型排序提供了两种支持:

              java.util.Collections.sort(java.util.List)
              java.util.Collections.sort(java.util.List, java.util.Comparator)

       第一个方法要求所排序的元素类必须实现 java.lang.Comparable 接口。第二个方法要求实现一个 java.util.Comparator 接口。     java.lang.Comparable 接口和 java.util.Comparator 接口是 Java 对排序最提供最基本支持。这两个接口不但可以用于集合元素排序,还可以用于数组排序。如果数组或集合元素是 String 类型,则可以利用 Java API 实现的 Comparator<String> 对象 String.CASE_INSENSITIVE_ORDER 为容器元素排序。

2 、例子一:实现 Comparable 接口排序
    public class Cat implements Comparable<Cat>{  
        private int age;  
        private String name;   
        public int compareTo(Cat o) {   
                return this.getAge() - o.getAge();   
        }  
    }  


	List<Cat> listCat = new ArrayList<Cat>();   
	Cat cat1 = new Cat(34, "hehe");          listCat.add(cat1);  
	Cat cat2 = new Cat(12, "haha");          listCat.add(cat2);  
	Cat cat3 = new Cat(23, "leizhimin");     listCat.add(cat3);  
	Cat cat4 = new Cat(13, "lavasoft");  listCat.add(cat4);  
	      
	Collections.sort(listCat);                                  //排序  
	Collections.sort(listCat, Collections.reverseOrder());      //逆序  
	Collections.reverse(listCat);                               //再次逆序  


String[] strArray = new String[] {"z", "a", "C"};   
List<String> list = Arrays.asList(strArray);                  //数组转换为列表  
String[] strArrayNew1 = list.toArray(strArray);         //列表转换为数组  
Collections.sort(list, String.CASE_INSENSITIVE_ORDER); 


3 、例子二:实现 Comparator 接口排序
public class Person {   
     private int age;   
     private String name;  
 }  
. -----------------------------------------------------------------------------  
//通过Comparator接口实现个性化排序测试  
public class PersonComparator implements Comparator<Person> {   
 /**排序接口算法实现*/  
 public int compare(Person o1, Person o2) {   
        return o1.getAge() - o2.getAge();   
 }  



    List<Person> listPerson = new ArrayList<Person>();   
    Person person1 = new Person(34, "lavasoft");         listPerson.add(person1);  
    Person person2 = new Person(12, "lavasoft");         listPerson.add(person1);  
    Person person3 = new Person(23, "leizhimin");        listPerson.add(person1);  
    Person person4 = new Person(13, "sdg");          listPerson.add(person1);  
    Comparator<Person> ascComparator = new PersonComparator();  
    Collections.sort(listPerson, ascComparator);  

Java 如何通过所实现接口的方法进行排序是 API 内部的事情, Java 这样处理排序目的就是对容器元素排序有一个统一的方式,以简化编程。


3 、 HashMap 按照键值 Key 排序
    Map map = new HashMap();    
    mp.put("4",   "a");    
    mp.put("2",   "b");    
    mp.put("1",   "c");    
    mp.put("3",   "d");  
    -----------------------------------------------------------------------------  
    方法一:  
    Oject[] key =  map.keySet().toArray();      
    Arays.sort(key);   
   -----------------------------------------------------------------------------  
  方法二:  
   Lst arrayList = new ArrayList(map.entrySet());    
   Cllections.sort(arrayList, new Comparator(){    
       public int compare(Object arg1, Object arg2) {    
           Map.Entry obj1 = (Map.Entry) arg1;    
            Map.Entry obj2 = (Map.Entry) arg2;    
           return (obj1.getKey()).toString().compareTo(obj2.getKey());    
       }    
   });    
   //将HASHMAP中的数据排序    
   for (Iterator iter = arrayList.iterator(); iter.hasNext();)  {    
       Map.Entry entry = (Map.Entry)iter.next();    
       String  key = (String)entry.getKey();    
       System.out.println(map.get(key));      
   }    

你可能感兴趣的:(java,编程,C++,c,算法)