一、jdk8中Map按Key排序
在jdk8中,java已經提供了對Map按照Key排序的支持。具體來說,我們可以使用stream和lambda表達式對Map進行排序。下面是一個使用jdk8中的Map進行按照Key排序的代碼實例:
Map unSortedMap = new HashMap(); unSortedMap.put("z", 10); unSortedMap.put("b", 5); unSortedMap.put("a", 6); unSortedMap.put("c", 20); unSortedMap.put("d", 1); unSortedMap.put("e", 7); unSortedMap.put("y", 8); Map result = unSortedMap.entrySet().stream() .sorted(Map.Entry.comparingByKey()) .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (oldValue, newValue) -> oldValue, LinkedHashMap::new)); System.out.println(result);
這個代碼將初始的unSortedMap根據Key升序排序,並將結果存儲到LinkedHashMap中。此時Map的輸出結果為:{a=6, b=5, c=20, d=1, e=7, y=8, z=10}
二、C++中Map按Key排序
C++中的std::map默認是按照Key升序排序的,無需進行額外操作。下面是一個使用C++ map進行按Key排序的代碼實例:
map myMap; myMap['z'] = 10; myMap['b'] = 5; myMap['a'] = 6; myMap['c'] = 20; myMap['d'] = 1; myMap['e'] = 7; myMap['y'] = 8; for (auto iter : myMap) { cout << iter.first < " << iter.second << endl; }
這個代碼將初始的myMap根據Key升序遍歷輸出。輸出的結果為:
a => 6
b => 5
c => 20
d => 1
e => 7
y => 8
z => 10
三、Map按Key排序取第一個
在許多情況下,我們需要獲取Map中Key排序後的第一個元素。下面是一個使用jdk8中的Map按Key排序取第一個的代碼實例:
Map unSortedMap = new HashMap(); unSortedMap.put("z", 10); unSortedMap.put("b", 5); unSortedMap.put("a", 6); unSortedMap.put("c", 20); unSortedMap.put("d", 1); unSortedMap.put("e", 7); unSortedMap.put("y", 8); String firstKey = unSortedMap.entrySet().stream() .sorted(Map.Entry.comparingByKey()) .findFirst() .get() .getKey(); System.out.println(firstKey);
這個代碼將初始的unSortedMap根據Key升序排序,並將第一個元素的Key值取出。此時輸出結果為:a
四、Map按Key排序String類型
在Map中,Key可以是任何可排序的類型,包括String類型。下面是一個使用jdk8中的Map按Key排序String類型的代碼實例:
Map unSortedMap = new HashMap(); unSortedMap.put("z", 10); unSortedMap.put("bb", 5); unSortedMap.put("aa", 6); unSortedMap.put("c", 20); unSortedMap.put("d", 1); unSortedMap.put("e", 7); unSortedMap.put("y", 8); Map sortedMap = unSortedMap.entrySet().stream() .sorted(Map.Entry.comparingByKey()) .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (oldValue, newValue) -> oldValue, LinkedHashMap::new)); System.out.println(sortedMap);
這個代碼將初始的unSortedMap根據Key升序排序,並將結果存儲到LinkedHashMap中。此時輸出結果為:{aa=6, bb=5, c=20, d=1, e=7, y=8, z=10}
五、Map按照Key大小排序
在某些情況下,Map中的Key可能是數字類型,我們需要按照他們的大小進行排序。下面是一個使用jdk8中的Map按照Key大小排序的代碼實例:
Map unSortedMap = new HashMap(); unSortedMap.put(1, "a"); unSortedMap.put(20, "b"); unSortedMap.put(3, "c"); unSortedMap.put(5, "d"); unSortedMap.put(33, "e"); LinkedHashMap result = new LinkedHashMap(); unSortedMap.entrySet().stream() .sorted(Map.Entry.comparingByKey()) .forEachOrdered(x -> result.put(x.getKey(), x.getValue())); System.out.println(result);
此時初始的unSortedMap已經被按照Key大小升序排序好,並將結果存儲到LinkedHashMap中。此時輸出結果為:{1=a, 3=c, 5=d, 20=b, 33=e}
六、Map鍵排序
除了前面提到的按照Key排序,Map中還有一種方法是按照鍵排序。下面是一個使用Java8中的Map鍵排序的代碼實例:
Map map = new HashMap(); map.put("a", 10); map.put("c", 20); map.put("g", 30); map.put("d", 40); List keys = new ArrayList(map.keySet()); Collections.sort(keys); for (String key : keys) { System.out.println(key + " - " + map.get(key)); }
這個代碼將Map的Key轉變為List類型,使用Collections庫進行升序排序並遍歷輸出。
總結
Map是Java中非常重要的數據結構,能夠快速地查找和存儲數據。Map按照Key排序是Map的一種非常常用的操作,我們可以在jdk8和C++中輕鬆地實現它,並根據自己的需求進行更進一步的操作。
原創文章,作者:EPTO,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/138302.html