您好,欢迎访问一九零五行业门户网

java中map可以按key排序吗?

map可以按key排序吗?
map可以按key排序,下面通过实例来看看。
示例:java map 按key排序和按value排序
package test;import java.util.arraylist;import java.util.collections;import java.util.comparator;import java.util.hashmap;import java.util.iterator;import java.util.linkedhashmap;import java.util.list;import java.util.map;import java.util.treemap;import java.util.map.entry;public class mapsortdemo { /** * @param args */ public static void main(string[] args) { map<string, string> hmap = new hashmap<string, string>(); hmap.put("a", "3"); hmap.put("z", "2"); hmap.put("b", "6"); hmap.put("o", "9"); system.out.println("根据key升序排序"); map<string, string> sortbykeyresultmap = sortmapbykey(hmap); //按key进行排序 iterator<map.entry<string, string>> sortbykeyentries = sortbykeyresultmap.entryset().iterator(); while (sortbykeyentries.hasnext()) { map.entry<string, string> entry = sortbykeyentries.next(); system.out.println("key = " + entry.getkey() + "------->value = " + entry.getvalue()); } system.out.println("------------------------------"); system.out.println("根据value降序排序"); map<string, string> sortbyvalueresultmap = sortmapbyvalue(hmap); //按value进行排序 iterator<map.entry<string, string>> sortbyvalueentries = sortbyvalueresultmap.entryset().iterator(); while (sortbyvalueentries.hasnext()) { map.entry<string, string> entry = sortbyvalueentries.next(); system.out.println("key = " + entry.getkey() + "------->value = " + entry.getvalue()); } } /** * 使用 map按key进行排序 * @param map * @return */ public static map<string, string> sortmapbykey(map<string, string> map) { if (map == null || map.isempty()) { return null; }// map<string, string> sortmap = new treemap<string, string>(new mapkeycomparator()); map<string, string> sortmap = new treemap<string, string>(new comparator<string>() { public int compare(string obj1, string obj2) { return obj1.compareto(obj2);//升序排序 } }); sortmap.putall(map); return sortmap; } /** * 使用 map按value进行排序 * @param map * @return */ public static map<string, string> sortmapbyvalue(map<string, string> map) { if (map == null || map.isempty()) { return null; } map<string, string> sortedmap = new linkedhashmap<string, string>(); list<map.entry<string, string>> entrylist = new arraylist<map.entry<string, string>>(map.entryset());// collections.sort(entrylist, new mapvaluecomparator()); collections.sort( entrylist, new comparator<map.entry<string, string>>(){ public int compare(entry<string, string> o1, entry<string, string> o2) { return o2.getvalue().compareto(o1.getvalue());// 降序排序 } } ); iterator<map.entry<string, string>> iter = entrylist.iterator(); map.entry<string, string> tmpentry = null; while (iter.hasnext()) { tmpentry = iter.next(); sortedmap.put(tmpentry.getkey(), tmpentry.getvalue()); } return sortedmap; }}
java map
map是键值对的集合接口,它的实现类主要包括:hashmap,treemap,hashtable以及linkedhashmap等。
map不允许键(key)重复,但允许值(value)重复。
1、hashmap:
最常用的map,根据键的hashcode值来存储数据,根据键可以直接获得他的值(因为相同的键hashcode值相同,在地址为hashcode值的地方存储的就是值,所以根据键可以直接获得值),具有很快的访问速度,遍历时,取得数据的顺序完全是随机的,hashmap最多只允许一条记录的键为null,允许多条记录的值为null,hashmap不支持线程同步,即任意时刻可以有多个线程同时写hashmap,这样对导致数据不一致,如果需要同步,可以使用synchronziedmap的方法使得hashmap具有同步的能力或者使用concurrenthashmap
2、hashtable:
与hashmap类似,不同的是,它不允许记录的键或值为空,支持线程同步,即任意时刻只能有一个线程写hashtable,因此也导致hashtable在写入时比较慢!
3、linkedhashmap:
是hahsmap的一个子类,但它保持了记录的插入顺序,遍历时先得到的肯定是先插入的,也可以在构造时带参数,按照应用次数排序,在遍历时会比hahsmap慢,不过有个例外,当hashmap的容量很大,实际数据少时,遍历起来会比linkedhashmap慢(因为它是链啊),因为hashmap的遍历速度和它容量有关,linkedhashmap遍历速度只与数据多少有关
4、treemap:
实现了sortmap接口,能够把保存的记录按照键排序(默认升序),也可以指定排序比较器,遍历时得到的数据是排过序的
推荐学习:java视频教程
以上就是java中map可以按key排序吗?的详细内容。
其它类似信息

推荐信息