好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

Java实现HashMap排序方法的示例详解

简介

本文用示例介绍HashMap排序的方法。

排序已有数据

按key排序

使用stream进行排序(按key升序/降序)

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

package org.example.a;

 

import java.util.*;

 

public class Demo {

     public static void main(String[] args) {

         Map<String, String> map = new HashMap<>();

         map.put( "ad" , "dd" );

         map.put( "bc" , "ee" );

         map.put( "cb" , "ff" );

         for (Map.Entry<String, String> entry : map.entrySet()) {

             System.out.println(entry.getKey() + ":" + entry.getValue());

         }

         System.out.println();

 

         Map<String, String> linkedHashMap = new LinkedHashMap<>();

         // 默认按照升序排列

         map.entrySet().stream().sorted(Map.Entry测试数据paringByKey())

                 .forEach(o -> linkedHashMap.put(o.getKey(), o.getValue()));

         for (Map.Entry<String, String> entry : linkedHashMap.entrySet()) {

             System.out.println(entry.getKey() + ":" + entry.getValue());

         }

         System.out.println();

 

         Map<String, String> linkedHashMap1 = new LinkedHashMap<>();

         // 自定义排序(降序)

         map.entrySet().stream().sorted(Map.Entry测试数据paringByKey( new Comparator<String>() {

             @Override

             public int compare(String o1, String o2) {

                 return o2测试数据pareTo(o1);

             }

         })).forEach(o -> linkedHashMap1.put(o.getKey(), o.getValue()));

         for (Map.Entry<String, String> entry : linkedHashMap1.entrySet()) {

             System.out.println(entry.getKey() + ":" + entry.getValue());

         }

     }

}

执行结果

bc:ee
ad:dd
cb:ff
 
ad:dd
bc:ee
cb:ff
 
cb:ff
bc:ee
ad:dd

HashMap转TreeMap自定义排序(按key升序/降序)

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

package org.example.a;

 

import java.util.Comparator;

import java.util.HashMap;

import java.util.Map;

import java.util.TreeMap;

 

public class Demo {

     public static void main(String[] args) {

         Map<String, String> map = new HashMap<>();

         map.put( "ad" , "dd" );

         map.put( "bc" , "ee" );

         map.put( "cb" , "ff" );

         for (Map.Entry<String, String> entry : map.entrySet()) {

             System.out.println(entry.getKey() + ":" + entry.getValue());

         }

         System.out.println();

         // 默认按照升序排序

         Map<String, String> map1 = new TreeMap<>();

         map.forEach(map1::put);

         for (Map.Entry<String, String> entry : map1.entrySet()) {

             System.out.println(entry.getKey() + ":" + entry.getValue());

         }

         System.out.println();

 

         // 自定义排序(降序)

         Map<String, String> map2 = new TreeMap<>( new Comparator<String>() {

             @Override

             public int compare(String o1, String o2) {

                 return o2测试数据pareTo(o1);

             }

         });

         map.forEach(map2::put);

         for (Map.Entry<String, String> entry : map2.entrySet()) {

             System.out.println(entry.getKey() + ":" + entry.getValue());

         }

     }

}

执行结果

bc:ee
ad:dd
cb:ff
 
ad:dd
bc:ee
cb:ff
 
cb:ff
bc:ee
ad:dd

按value排序

使用stream进行排序(按value升序/降序)

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

package org.example.a;

 

import java.util.*;

 

public class Demo {

     public static void main(String[] args) {

         Map<String, String> map = new HashMap<>();

         map.put( "ad" , "dd" );

         map.put( "bc" , "ee" );

         map.put( "cb" , "ff" );

         for (Map.Entry<String, String> entry : map.entrySet()) {

             System.out.println(entry.getKey() + ":" + entry.getValue());

         }

         System.out.println();

 

         Map<String, String> linkedHashMap = new LinkedHashMap<>();

         // 默认按照升序排列

         map.entrySet().stream().sorted(Map.Entry测试数据paringByValue())

                 .forEach(o -> linkedHashMap.put(o.getKey(), o.getValue()));

         for (Map.Entry<String, String> entry : linkedHashMap.entrySet()) {

             System.out.println(entry.getKey() + ":" + entry.getValue());

         }

         System.out.println();

 

         Map<String, String> linkedHashMap1 = new LinkedHashMap<>();

         // 自定义排序(降序)

         map.entrySet().stream().sorted(Map.Entry测试数据paringByValue( new Comparator<String>() {

             @Override

             public int compare(String o1, String o2) {

                 return o2测试数据pareTo(o1);

             }

         })).forEach(o -> linkedHashMap1.put(o.getKey(), o.getValue()));

         for (Map.Entry<String, String> entry : linkedHashMap1.entrySet()) {

             System.out.println(entry.getKey() + ":" + entry.getValue());

         }

     }

}

执行结果

bc:ee
ad:dd
cb:ff
 
ad:dd
bc:ee
cb:ff
 
cb:ff
bc:ee
ad:dd

借助List进行排序(按value升序/降序)

原理:将待排序Map中的所有元素置于一个列表中,接着使用Collections的一个静态方法 sort(List<T> list, Comparator<? super T> c) 来排序列表,同样是用比较器定义比较规则。排序后的列表中的元素再依次装入Map,为了肯定的保证Map中元素与排序后的List中的元素的顺序一致,使用了LinkedHashMap数据类型。

本处只写升序代码,降序只是调换个顺序而已。

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

package org.example.a;

 

import java.util.*;

 

public class Demo {

     public static void main(String[] args) {

         Map<String, String> map = new HashMap<>();

         map.put( "ad" , "dd" );

         map.put( "bc" , "ee" );

         map.put( "cb" , "ff" );

         for (Map.Entry<String, String> entry : map.entrySet()) {

             System.out.println(entry.getKey() + ":" + entry.getValue());

         }

         System.out.println();

 

         Map<String, String> sortedMap = new LinkedHashMap<>();

         List<Map.Entry<String, String>> entryList = new ArrayList<Map.Entry<String, String>>(

                 map.entrySet());

         Collections.sort(entryList, new Comparator<Map.Entry<String, String>>() {

             @Override

             public int compare(Map.Entry<String, String> me1, Map.Entry<String, String> me2) {

                 return me1.getValue()测试数据pareTo(me2.getValue());

             }

         });

         for (Map.Entry<String, String> stringStringEntry : entryList) {

             sortedMap.put(stringStringEntry.getKey(), stringStringEntry.getValue());

         }

 

         for (Map.Entry<String, String> entry : sortedMap.entrySet()) {

             System.out.println(entry.getKey() + ":" + entry.getValue());

         }

     }

}

运行结果

bc:ee
ad:dd
cb:ff
 
ad:dd
bc:ee
cb:ff

按插入顺序存放

HashMap不按插入顺序存放

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

package org.example.a;

 

import java.util.*;

 

public class Demo{

     public static List arrayList = new ArrayList();

     public static void main(String[] args) {

         Map<String, String> hashMap = new HashMap<String, String>();

         hashMap.put( "name1" , "josan1" );

         hashMap.put( "name2" , "josan2" );

         hashMap.put( "name3" , "josan3" );

        

         Set<Map.Entry<String, String>> set = hashMap.entrySet();

         Iterator<Map.Entry<String, String>> iterator = set.iterator();

         while (iterator.hasNext()) {

             Map.Entry entry = iterator.next();

             String key = (String) entry.getKey();

             String value = (String) entry.getValue();

             System.out.println( "key:" + key + ", value:" + value);

         }

     }

}

执行结果(未按照插入顺序输出)

key:name3, value:josan3
key:name2, value:josan2
key:name1, value:josan1

LinkedHashMap会按照插入顺序存放

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

package org.example.a;

 

import java.util.*;

 

public class Demo{

     public static List arrayList = new ArrayList();

     public static void main(String[] args) {

         Map<String, String> hashMap = new LinkedHashMap<String, String>();

         hashMap.put( "name1" , "josan1" );

         hashMap.put( "name2" , "josan2" );

         hashMap.put( "name3" , "josan3" );

 

         Set<Map.Entry<String, String>> set = hashMap.entrySet();

         Iterator<Map.Entry<String, String>> iterator = set.iterator();

         while (iterator.hasNext()) {

             Map.Entry entry = iterator.next();

             String key = (String) entry.getKey();

             String value = (String) entry.getValue();

             System.out.println( "key:" + key + ", value:" + value);

         }

     }

}

执行结果(按照插入顺序输出)

key:name1, value:josan1
key:name2, value:josan2
key:name3, value:josan3 

以上就是Java实现HashMap排序方法的示例详解的详细内容,更多关于Java HashMap排序的资料请关注其它相关文章!

原文链接:https://blog.csdn.net/feiying0canglang/article/details/124903172

查看更多关于Java实现HashMap排序方法的示例详解的详细内容...

  阅读:24次