Java 对HashMap进行排序的三种常见方法
程序员文章站
2022-06-23 11:25:38
首先来看看map集合获取元素的三种常见方法keyset()、values()、entryset()1. values():返回map集合的所有value的collection集合(于集合中无序存放)i...
首先来看看map集合获取元素的三种常见方法keyset()、values()、entryset()
1. values():
返回map集合的所有value的collection集合(于集合中无序存放)
import java.util.*; public class main{ public static void main(string[] args){ map<string, string> map = new hashmap<string, string>(); //构建键值对为<string, string>的map集合 map.put("a", "aaa"); map.put("b", "bbb"); map.put("c", "ccc"); collection<string> collection = map.values(); //获取map集合的所有value的collection集合(于集合中无序存放) system.out.println(collection); } } /** * 运行结果 * [bbb, ccc, aaa] */
2. keyset():
返回map集合的所有键的set集合(于set集合中无序存放)
通过迭代取出所有key,再利用get()方法获取value, for(类型 元素: 集合) 的本质是获取集合的迭代器进行迭代
import java.util.*; public class main{ public static void main(string[] args){ map<string, string> map = new hashmap<string, string>(); //构建键值对为<string, string>的map集合 map.put("a", "aaa"); map.put("b", "bbb"); map.put("c", "ccc"); set<string> keyset = map.keyset(); //获取map集合的所有键的set集合(于set集合中无序存放) iterator<string> iter = keyset.iterator(); //获取keyset集合的迭代器 while(iter.hasnext()){ string key = iter.next(); string value = map.get(key); system.out.println("key:" + key + "-->value:" + value); } /* for(string key: keyset){ string value = map.get(key); system.out.println("key:" + key + "-->value:" + value); } */ } } /** * 运行结果 * key:b-->value:bbb * key:c-->value:ccc * key:a-->value:aaa */
3. entryset():
返回map集合的所有"映射"的set集合,这里规范每个"映射"的类型为map.entry<k, v>(于set集合中无序存放)
通过迭代取出所有的“映射”,再利用getkey()、getvalue()方法获取相应键、值
import java.util.*; public class main{ public static void main(string[] args){ map<string, string> map = new hashmap<string, string>(); //构建键值对为<string, string>的map集合 map.put("a", "aaa"); map.put("b", "bbb"); map.put("c", "ccc"); set<map.entry<string, string>> entryset = map.entryset(); //获取map集合的所有"映射"的set集合,这里规范每个映射的类型为map.entry<k, v>(于set集合中无序存放) iterator<map.entry<string, string>> iter = entryset.iterator(); //获取entryset集合的迭代器,map.entry<k, v>为迭代元素的类型 while(iter.hasnext()){ map.entry<string, string> item = iter.next(); string key = item.getkey(); string value = item.getvalue(); system.out.println("key:" + key + "-->value:" + value); } /* for(map.entry<string, string> item: entryset){ string key = item.getkey(); string value = item.getvalue(); system.out.println("key:" + key + "-->value:" + value); } */ } } /** * 运行结果 * key:b-->value:bbb * key:c-->value:ccc * key:a-->value:aaa */
有以上方法作为基础,那么我们很容易想到对hashmap进行排序的两种方法
1. 通过keyset()获取map集合的所有键的set集合,由list集合获取其中所有元素,通过比较器对元素为键的list集合进行排序
2. 通过entryset()获取map集合所有映射的set集合,由list集合获取其中所有元素,通过比较器对元素为"映射"list集合进行排序
通过对比较器compare方法的override,两者还可以实现利用value进行排序。有关java中comparable和comparator比较的详解
import java.util.*; public class desckeycomparator implements comparator<string>{ public static void main(string[] args){ map<string, string> map = new hashmap<string, string>(); //构建键值对为<string, string>的map集合 map.put("a", "aaa"); map.put("b", "bbb"); map.put("c", "ccc"); set<string> entryset = map.keyset(); //获取map集合的所有键的set集合(于set集合中无序存放) list<string> list = new arraylist<string>(entryset); //新建list集合获取set集合的所有元素(键对象)(顺序与set集合一样) /** * 接下来的排序是list的专长了 * 通过“比较器(desckeycomparator)”,对list进行排序 */ collections.sort(list, new desckeycomparator()); /* collections.sort(list); //string实现了comparable,默认升序排列 */ iterator<string> iter = list.iterator(); //获取list集合的迭代器,string为迭代元素的类型 while(iter.hasnext()){ string key = iter.next(); string value = map.get(key); system.out.println("key:" + key + "-->value:" + value); } /* for(map.entry<string, string> item: list){ string key = iter.next(); string value = map.get(key); system.out.println("key:" + key + "-->value:" + value); } */ } @override public int compare(string key1, string key2){ return key2.compareto(key1); //降序排序; string作为api提供的类,实现了comparable的compareto方法被设计成小于、等于、大于分别返回负数、零、正数 } } /** * 运行结果 * key:c-->value:ccc * key:b-->value:bbb * key:a-->value:aaa */
import java.util.*; public class asckeycomparator implements comparator<map.entry<string, string>>{ public static void main(string[] args){ map<string, string> map = new hashmap<string, string>(); //构建键值对为<string, string>的map集合 map.put("a", "aaa"); map.put("b", "bbb"); map.put("c", "ccc"); set<map.entry<string, string>> entryset = map.entryset(); //获取map集合的所有"映射"的set集合,这里规范每个映射的类型为map.entry<k, v>(于set集合中无序存放) list<map.entry<string, string>> list = new arraylist<map.entry<string, string>>(entryset); //新建list集合获取set集合的所有元素("映射"对象)(顺序与set集合一样) /** * 接下来的排序是list的专长了 * 通过“比较器(asckeycomparator)”,对list进行排序 */ collections.sort(list, new asckeycomparator()); iterator<map.entry<string, string>> iter = list.iterator(); //获取list集合的迭代器,map.entry<k, v>为迭代元素的类型 while(iter.hasnext()){ map.entry<string, string> item = iter.next(); string key = item.getkey(); string value = item.getvalue(); system.out.println("key:" + key + "-->value:" + value); } /* for(map.entry<string, string> item: list){ string key = item.getkey(); string value = item.getvalue(); system.out.println("key:" + key + "-->value:" + value); } */ } @override public int compare(map.entry<string, string> item1, map.entry<string, string> item2){ return item1.getkey().compareto(item2.getkey()); //升序排序 } } /** * 运行结果 * key:a-->value:aaa * key:b-->value:bbb * key:c-->value:ccc */
以上就是java 对hashmap进行排序的三种常见方法的详细内容,更多关于java 对hashmap进行排序的资料请关注其它相关文章!