java中如何對(duì)Map的key順序排序
1.使用List的默認(rèn)方法 sort 或者 Collections.sort 進(jìn)行排序這種方法需要對(duì)map的key進(jìn)行轉(zhuǎn)換
Map<String,String> map=new HashMap<>();
map.put("4","maliu");
map.put("1","張三");
map.put("3","李四");
map.put("7","王五");
map.put("9","趙六");
map.put("2","老六");
ArrayList<Map.Entry<String, String>> entries = new ArrayList<>(map.entrySet());
//排序條件
entries.sort(Comparator.comparingInt(entry -> Integer.parseInt(entry.getKey())));
//Collections.sort(entries, Comparator.comparingInt(entry -> Integer.parseInt(entry.getKey())));
HashMap<String, String> news = new LinkedHashMap<>();
for (Map.Entry<String, String> entry : entries) {
news.put(entry.getKey(),entry.getValue());
}
news.forEach((a,b)->{
System.out.printf("k -> %s | v -> %s%n", a,b);
});
2.使用TreeMap的特性進(jìn)行排序
Map<String,String> map=new HashMap<>();
map.put("4","maliu");
map.put("1","張三");
map.put("3","李四");
map.put("7","王五");
map.put("9","趙六");
map.put("2","老六");
TreeMap<String, String> treeMap = new TreeMap<>(map);
treeMap.forEach((k,v)->{
System.out.printf("k -> %s | v -> %s%n", k,v);
});
2.1.在TreeMap基礎(chǔ)上自定義排序方法
Map<String,String> map=new HashMap<>();
map.put("1","maliu");
map.put("22","張三");
map.put("4444","李四");
map.put("666666","王五");
map.put("55555","趙六");
map.put("333","老六");
//TreeMap<String, String> treeMap = new TreeMap<>((o1,o2)-> o2.length()-o1.length());
//TreeMap<String, String> treeMap2 = new TreeMap<>((o1,o2)-> o1.length()-o2.length());
TreeMap<String, String> treeMap = new TreeMap<>(Comparator.comparingInt(String::length));
treeMap.putAll(map);
treeMap.forEach((k,v)->{
System.out.printf("k -> %s | v -> %s%n", k,v);
});java中Map中根據(jù)key的大小進(jìn)行排序?qū)嵗?/strong>
需要對(duì)鍵值對(duì)(key-value)的key進(jìn)行排序的時(shí)候,可以利用TreeMap來(lái)操作,TreeMap默認(rèn)情況下就是按照key的大小來(lái)進(jìn)行排序的(升序),所以只需要使用TreeMap來(lái)存儲(chǔ)key-value對(duì)時(shí),就是排好序的。想要按序取數(shù)據(jù)時(shí),利用Iterator。
- 升序Demo
import java.util.Iterator;
import java.util.Map;
import java.util.Random;
import java.util.Set;
import java.util.TreeMap;
public class Main {
public static void main(String args[]) {
System.out.println("kaishi");
Random random = new Random();
Map<Double, Integer> map = new TreeMap<Double, Integer>();
//隨機(jī)產(chǎn)生數(shù)據(jù),存入到map中;默認(rèn)情況下時(shí)升序的。
for(int i=0;i<100;i++) {
map.put(random.nextDouble()*1000,random.nextInt(1000));
}
//使用Iterator來(lái)取key-value對(duì);
Set<Double> keySet = map.keySet();
Iterator<Double> iter = keySet.iterator();
while (iter.hasNext()) {
Double key = iter.next();
System.out.println(key + ":" + map.get(key)); //打印結(jié)果,會(huì)發(fā)現(xiàn)key都是按升序輸出的
}
}
}
- 降序Demo
import java.util.Iterator;
import java.util.Map;
import java.util.Random;
import java.util.Set;
import java.util.TreeMap;
import java.util.Comparator;
public class Main {
public static void main(String args[]) {
System.out.println("kaishi");
Random random = new Random();
Map<Double, Integer> map = new TreeMap<Double, Integer>(
new Comparator<Double>(){
@Override
public int compare(Double o1, Double o2) {
//利用Comparator來(lái)實(shí)現(xiàn)降序;
return (int) (o2-o1);
}
});
for(int i=0;i<100;i++) {
map.put(random.nextDouble()*1000,random.nextInt(1000));
}
Set<Double> keySet = map.keySet();
Iterator<Double> iter = keySet.iterator();
while (iter.hasNext()) {
Double key = iter.next();
System.out.println(key + ":" + map.get(key));//打印結(jié)果,會(huì)發(fā)現(xiàn)key都是按降序輸出的
}
}
}總結(jié)
到此這篇關(guān)于java中如何對(duì)Map的key順序排序的文章就介紹到這了,更多相關(guān)java對(duì)Map的key排序內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
JavaWeb中獲取表單數(shù)據(jù)及亂碼問(wèn)題的解決方法
這篇文章主要介紹了JavaWeb中獲取表單數(shù)據(jù)及亂碼問(wèn)題的解決方法,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2016-11-11
mybatis連接MySQL8出現(xiàn)的問(wèn)題解決方法
這篇文章主要介紹了mybatis連接MySQL8出現(xiàn)的問(wèn)題解決方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-10-10
ThreadLocal內(nèi)存泄露的產(chǎn)生原因和處理方法
ThreadLocal 的內(nèi)存泄漏問(wèn)題通常發(fā)生在使用 ThreadLocal 存儲(chǔ)對(duì)象時(shí),尤其是在多線程環(huán)境中,線程池中的線程復(fù)用可能導(dǎo)致一些資源沒(méi)有及時(shí)清理,從而引發(fā)內(nèi)存泄漏,所以本文給大家介紹了ThreadLocal內(nèi)存泄露的產(chǎn)生原因和處理方法,需要的朋友可以參考下2024-12-12
SpringMVC mybatis整合實(shí)例代碼詳解
這篇文章主要介紹了springmvc與mybatis實(shí)例詳解的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2017-04-04
SpringBoot熱部署和整合Mybatis的過(guò)程
熱部署,就是在應(yīng)用正在運(yùn)行的時(shí)候升級(jí)軟件,卻不需要重新啟動(dòng)應(yīng)用,本文給大家詳細(xì)介紹SpringBoot熱部署和整合Mybatis的過(guò)程,感興趣的朋友跟隨小編一起看看吧2023-10-10
java_時(shí)間戳與Date_相互轉(zhuǎn)化的實(shí)現(xiàn)代碼
本篇文章是對(duì)java_時(shí)間戳與Date_相互轉(zhuǎn)化的實(shí)現(xiàn)代碼進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下如下。2016-11-11
idea中maven項(xiàng)目模塊變成灰色原因及解決方案
這篇文章主要介紹了idea中maven項(xiàng)目模塊變成灰色原因及解決方案,文中通過(guò)圖文結(jié)合的方式給大家講解的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下2024-03-03

