HashMap排序
題:
已知一個HashMap<Integer,User>集合,User有username(String)和age(int)屬性,請寫一個方法實現對HashMap的排序功能,該方法接收HashMap<Integer,User>為形參,返回類型為HashMap<Integer,User>,要求對HashMap中的User的age進行倒序排序,排序時key=value鍵值對不能拆散。
注:
要做出這道題必須對集合的體系結構非常的熟悉。HashMap本身是不可排序的,但是該題偏偏讓給HashMap進行排序,那我們就得想在API中有沒有這樣的Map是有序的,LinkedHashMap,這是Map結構,也是鏈表結構,有序的,更可喜可賀的是它是HashMap的子類,我們返回LinkedHashMap<Integer,User>即可,還符合面向接口(父類編程的思想)。
但凡是對集合的操作,我們應該保持一個原則——能用JDK中的API就用JDK中的API,比如排序算法我們不應該使用冒泡或者選擇排序等算法,而是首先想到用Collections集合工具類。
Code
import java.util.*; import java.util.Map.Entry;public class HashMapTest {public static void main(String[] args) {HashMap<Integer, User> userHashMap = new HashMap<>();userHashMap.put(1, new User("張三", 25));userHashMap.put(2, new User("李四", 18));userHashMap.put(3, new User("王五", 28));System.out.println(userHashMap);HashMap<Integer, User> sortMap = sortHashMap(userHashMap);System.out.println(sortMap);}public static HashMap<Integer, User> sortHashMap(HashMap<Integer, User> map) {// 首先得到map的鍵值對集合Set<Entry<Integer, User>> entrySet = map.entrySet();// 將set集合轉換成List集合,為了使用工具類的排序方法List<Entry<Integer, User>> list = new ArrayList<Entry<Integer, User>>(entrySet);// 使用Collections集合工具類對list進行排序,排序規則使用匿名內部類來實現Collections.sort(list, new Comparator<Entry<Integer, User>>() {@Overridepublic int compare(Entry<Integer, User> o1, Entry<Integer, User> o2) {// 按照要求根據User的age進行倒序排序return o2.getValue().getAge() - o1.getValue().getAge();}});// 創建一個新的有序的HashMap子類的集合LinkedHashMap<Integer, User> linkedHashMap = new LinkedHashMap<Integer, User>();// 將List中的數據存儲到LinkedHashMap中for (Entry<Integer, User> entry : list) {linkedHashMap.put(entry.getKey(), entry.getValue());}// 返回結果return linkedHashMap;}}class User {private String username;private int age;public User(String username, int age) {this.username = username;this.age = age;}public String getUsername() {return username;}public int getAge() {return age;}@Overridepublic String toString() {return "User{" +"username='" + username + '\'' +", age=" + age +'}';} }運行結果
{1=User{username='張三', age=25}, 2=User{username='李四', age=18}, 3=User{username='王五', age=28}} {3=User{username='王五', age=28}, 1=User{username='張三', age=25}, 2=User{username='李四', age=18}}總結
- 上一篇: Java笔记——Java代码块的执行顺序
- 下一篇: 笔试面试笔记