——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