關於List,Map的排序

——Listhtml

 

1:繼承Comparator接口java

import java.util.Collections;ide

import java.util.Comparator;spa

import java.util.Vector;htm

public class ListSort {排序

    public static void main(String[] args) {繼承

                String[] str={"aa","b","cccc","ddd"};接口

                Vector v = new Vector();get

                for(int i=0;i<str.length;i++)源碼

                {

                    v.add(str[i]);

                }

                Collections.sort(v, new Comp());

                System.out.println(v);

            }

        }

        class Comp implements Comparator {

            public int compare(Object o1, Object o2) {

                int i1 = ((String)o1).length();

                int i2 = ((String)o2).length();

                if (i1 < i2){

                    return -1;

                }

                if (i1 > i2){

                    return 1;

                }

                return 0;

            }

}

 

排序結果爲:

[b, aa, ddd, cccc]

 

2:使用Collections.sort方法 

            Collections.sort(v, new Comparator() {

            @Override

            public int compare(Object o1, Object o2) {

                return 0;

            }

        });

問題:如何判斷啥時候o1和o2交換位置呢?

 

//查看sort的源碼能夠看出 return >0時交換位置

 private static void mergeSort(Object[] src,

                                  Object[] dest,

                                  int low, int high, int off,

                                  Comparator c) {

        int length = high - low;

 

        // Insertion sort on smallest arrays

        if (length < INSERTIONSORT_THRESHOLD) {

            for (int i=low; i<high; i++)

                for (int j=i; j>low && c.compare(dest[j-1], dest[j])>0; j--)

                    swap(dest, j, j-1);

            return;

        }

 

這樣的話能夠經過設置的return -1 (1)來判斷是否交換位置,從而能夠實現降序和升序排序

好比像按年齡進行升序排序,代碼入下:

  Collections.sort(person, new Comparator<Person>() {

                @Override

                public int compare(Persono1, Persono2) {

                    return Float.parseFloat(o1.getName()) >  Float.parseFloat(o2.getName) ? 1 : -1;

                }

            });

注意:String、float比較大小

compareTo適用於String的比較

int i = "c".compareTo("ab")  

i = 2;

經過public static <T> void sort(List<T> list, Comparator<? super T> c)能夠看出sort()支持List的排序,那麼Map如何排序呢?

 

方法:將map放在List中

 

import java.util.*;

public class hashMapSort {

    public static void main(String[] args) {

    Map<String, Integer> map = new HashMap<String, Integer>();

    map.put("d", 2);

    map.put("c", 1);

    map.put("b", 1);

    map.put("a", 3);

    List<Map.Entry<String, Integer>> infoIds =

            new ArrayList<Map.Entry<String, Integer>>(map.entrySet());

        for(Map.Entry<String, Integer> mapEntry : infoIds){

            System.out.println(mapEntry.getValue());

        }

//排序

  Collections.sort(infoIds, new Comparator<Map.Entry<String, Integer>>() {

        public int compare(Map.Entry<String, Integer> o1, Map.Entry<String, Integer> o2) {

           return o1.getValue() > o2.getValue() ? 1 : -1;

        }

    });

//排序後

        for(Map.Entry<String, Integer> mapEntry : infoIds){

            System.out.println(mapEntry.getValue());

        }

    }

}

排序前

2

1

1

3

排序後

1

1

2

3

http://www.importnew.com/20703.html

相關文章
相關標籤/搜索