list数组存储键值对类型数据实例

很多人都用过List数组对吧,我们经常利用它来存储一些常见的数据类型或引用类型,比如List 、List 等等
最近在做LeetCode题目时,遇到了一些数据类型为二维坐标
形式的数据,比如(0,1)、(3,4)这种数据,或者是键值对类型的数据(key,value)。一般的我们会用map数据结构来存储。那么能不能List来存储这些数据呢?毕竟list是对付顺序的好帮手!

核心代码

 List<Map.Entry<Integer,Integer>> list=new ArrayList<Map.Entry<Integer,Integer>>(map.entrySet());

废话不多说,来看看实例

经典题目:寻找数组的前K个高频元素

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class LeetCode347前k个高频元素_哈希表内部排序 {
     
	 public static void main(String[] args) {
     
		  int[] nums= {
     1,5,2,4,8,7,5,11,45,5,2,14,2,5,8,11,8,5,4};
		  int k=5;
		  int[] ans=topKFrequent(nums, k);
		  System.out.println(Arrays.toString(ans));
	}
	 public static int[] topKFrequent(int[] nums, int k) {
     
	        int[] ans=new int[k];
	        Map<Integer,Integer> map=new HashMap();
	        for(int i=0;i<nums.length;++i){
                 
	            map.put(nums[i],map.getOrDefault(nums[i],0)+1);
	            
	        }
	        //        List数组存储键值对类型数据
	        List<Map.Entry<Integer,Integer>> list=new ArrayList<Map.Entry<Integer,Integer>>(map.entrySet());
	        //	对list进行排序,重写comparator接口的compare方法
	        Collections.sort(list, new Comparator<Map.Entry<Integer, Integer>>() {
     
	           @Override
	           public int compare(Map.Entry<Integer, Integer> o1, Map.Entry<Integer, Integer> o2) {
     
	      //     按value从大到小排序,若从小到大排序可改为o1.getValue()-o2.getValue();
	               return o2.getValue()-o1.getValue();
	     
	           }
	       });
	        for(int i=0;i<k;++i){
     
           		 ans[i]=list.get(i).getKey();
        	}
       		return ans;
       	}
}

输出显示:
[5, 2, 8, 4, 11]

你可能感兴趣的:(IT,刷题)