一、map簡介
在講解map排序之前,我們先來稍微了解下map。map是鍵值對的集合介面,它的實現類主要包括:hashmap,treemap,hashtable以及linkedhashmap等。其中這四者的區別如下(簡單介紹):
1、hashmap:我們最常用的map,它根據key的hashcode 值來儲存資料,根據key可以直接獲取它的value,同時它具有很快的訪問速度。hashmap最多隻允許一條記錄的key值為null(多條會覆蓋);允許多條記錄的value為 null。非同步的。
2、treemap: 能夠把它儲存的記錄根據key排序,預設是按公升序排序,也可以指定排序的比較器,當用iterator 遍歷treemap時,得到的記錄是排過序的。treemap不允許key的值為null。非同步的。
3、hashtable: 與 hashmap類似,不同的是:key和value的值均不允許為null;它支援執行緒的同步,即任一時刻只有乙個執行緒能寫hashtable,因此也導致了hashtale在寫入時會比較慢。
4、linkedhashmap: 儲存了記錄的插入順序,在用iterator遍歷linkedhashmap時,先得到的記錄肯定是先插入的.在遍歷的時候會比hashmap慢。key和value均允許為空,非同步的。
簡單總結為:
map:無序
treemap:預設是公升序(以key作為標準)
linkedhashmap:預設是插入資料時的順序
二、comparator介面
(a)、方法
int compare(t o1,t o2)
(b)、說明
比較用來排序的兩個引數。根據第乙個引數小於、等於或大於第二個引數分別返回負整數、零或正整數。
在前面的描述中,符號 sgn(expression) 表示 signum 數學函式,根據 expression 的值為負數、0 還是正數,該函式分別返回 -1、0 或 1。
簡單來說就是,comparator可以對集合物件或者陣列進行排序的比較器介面,實現該介面的public compare(t o1,to2)方法即可實現排序,該方法主要是根據第乙個引數o1,小於、等於或者大於o2分別返回負整數、0或者正整數。
(c)、引數:
o1 - 要比較的第乙個物件。
o2 - 要比較的第二個物件。
(d)、返回:
根據第乙個引數小於、等於或大於第二個引數分別返回負整數、零或正整數。
三、示例
1、按鍵排序
treemap既可滿足此類需求,向其構造方法 treemap(comparator<? super k> comparator) 傳入我們自定義的比較器即可實現按鍵排序。
/**
* 按key進行排序
*/@test
public void testsort1()
});resultmap.put("1", "kfc");
resultmap.put("2", "wnba");
resultmap.put("3", "nba");
resultmap.put("4", "cba");
for (map.entryentry : resultmap.entryset())
}
2、按值排序
map本身按值排序是很有意義的,很多場合下都會遇到類似需求,可以認為其值是定義的某種規則或者權重。
原理:將待排序map中的所有元素置於乙個列表中,接著使用collections的乙個靜態方法 sort(listlist, comparator<? super t> c)
來排序列表,同樣是用比較器定義比較規則。排序後的列表中的元素再依次裝入map,為了肯定的保證map中元素與排序後的list中的元素的順序一致,使用了linkedhashmap資料型別。
/**
* 按value進行排序
*/@test
public void testsort2()
});iterator> iter = entrylist.iterator();
map.entrytmpentry = null;
while (iter.hasnext())
for (map.entryentry : sortedmap.entryset())
}
3.隨機排序
/**
* 三種排序
* 1.公升序排列
* 2.降序排序
* 3.隨機排序
*/@test
public void testsort3()
});//隨機排序
treemapmap3 = new treemap(new comparator()
});map2.put(1, 2);
map2.put(2, 4);
map2.put(2, 4);
map2.put(7, 1);
map2.put(5, 2);
system.out.println("map2降序排列=" + map2);
map1.put(1, 2);
map1.put(2, 4);
map1.put(7, 1);
map1.put(5, 2);
map1.put(5, 2);
system.out.println("map1公升序排序=" + map1);
map3.put(1, 2);
map3.put(2, 4);
map3.put(7, 1);
map3.put(5, 2);
map3.put(9, 2);
map3.put(11, 2);
map3.put(11, 2);
system.out.println("map3隨機排序=" + map3);
}
4.map轉成list使用collections.shuffle()隨機排序
/**
* map轉list 隨機排序
* @throws ioexception
*/@test
public void testsort4() throws ioexception
for (map.entryentry : result.entryset())
}
mysql降序後去重 MySQL問題一 公升序和降序
mysql問題一 公升序和降序 淺談mysql公升序和降序,便於我們讀取資料。mysql 排序 我們知道從 mysql 表中使用 sql select 語句來讀取資料。如果我們需要對讀取的資料進行排序,我們就可以使用 mysql 的 order by 子句來設定你想按哪個欄位哪中方式來進行排序,再返...
js陣列去重並且公升序排序常用方法總結
方法一 雙層迴圈,外層迴圈元素,內層迴圈時比較值 如果有相同的值則跳過,不相同則push進陣列 array.prototype.distinct function result.push arr i return result var array 1,2,3,4,4,1,1,2,1,1,1 arra...
隨機整數陣列去重與排序
明明想在學校中請一些同學一起做一項問卷調查,為了實驗的客觀性,他先用計算機生成了n個1到1000之間的隨機整數 n 1000 對於其中重複的數字,只保留乙個,把其餘相同的數去掉,不同的數對應著不同的學生的學號。然後再把這些數從小到大排序,按照排好的順序去找同學做調查。請你協助明明完成 去重 與 排序...