JAVA Map 公升序 降序 隨機 去重排序

2021-08-19 11:19:39 字數 3406 閱讀 1507

一、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 對於其中重複的數字,只保留乙個,把其餘相同的數去掉,不同的數對應著不同的學生的學號。然後再把這些數從小到大排序,按照排好的順序去找同學做調查。請你協助明明完成 去重 與 排序...