按指定规则对List进行排序compare和遍历方法比较

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了按指定规则对List进行排序compare和遍历方法比较相关的知识,希望对你有一定的参考价值。

1、两种排序方式分别有不同的排序规则设定模式

  a> 用于compare方式排序的mapRule规则

 1     Map<String, Integer> mapRule = new HashMap<String, Integer>();
 2         mapRule.put("AAA+", 1);
 3         mapRule.put("AAA", 2);
 4         mapRule.put("AAA-", 3);
 5         mapRule.put("AA+", 4);
 6         mapRule.put("AA", 5);
 7         mapRule.put("AA-", 6);
 8         mapRule.put("A+", 7);
 9         mapRule.put("A", 8);
10         mapRule.put("A-", 9);
11         mapRule.put("BBB+", 10);
12         mapRule.put("BBB", 11);
13         mapRule.put("BBB-", 12);
14         mapRule.put("BB+", 13);
15         mapRule.put("BB", 14);
16         mapRule.put("BB-", 15);
17         mapRule.put("B+", 16);
18         mapRule.put("B", 17);
19         mapRule.put("B-", 18);
20         mapRule.put("CCC+", 19);
21         mapRule.put("CCC", 20);
22         mapRule.put("CCC-", 21);
23         mapRule.put("CC+", 22);
24         mapRule.put("CC", 23);
25         mapRule.put("CC-", 24);
26         mapRule.put("C+", 25);
27         mapRule.put("C", 26);
28         mapRule.put("C-", 27);

  b>用于遍历排序的ArrayList规则

1  List<String> sortList = new ArrayList<String>(
2                 Arrays.asList("AAA+", "AAA", "AAA-", "AA+", "AA", "AA-", "A+", "A", "A-", "BBB+", "BBB", "BBB-", "BB+",
3                         "BB", "BB-", "B+", "B", "B-", "CCC+", "CCC", "CCC-", "CC+", "CC", "CC-", "C+", "C", "C-"));

2、生成一个用于排序的测试list

 1     List<String> list = new ArrayList<>();
 2         for(int i = 0 ; i< 1000000;i++){
 3             list.add("AA");
 4             list.add("AAA");
 5             list.add("BBB");
 6             list.add("BB+");
 7             list.add("AA+");
 8             list.add("A-");
 9             list.add("B-");
10             list.add("BB+");
11             list.add("BB+");
12         }

3、进行排序

 1         long startTime = System.currentTimeMillis();
 2         long endTime = System.currentTimeMillis();
 3         float excTime = (float) (endTime - startTime) / 1000;
 4 
 5         // 执行方法
 6         startTime = System.currentTimeMillis();
 7     //利用compare进行排序
 8         Collections.sort(list, new Comparator<String>() {
 9             public int compare(String a, String b) {
10                 Integer v1 = (Integer) mapRule.get(a);
11                 Integer v2 = (Integer) mapRule.get(b);
12                 return Integer.compare(v1, v2);
13             }
14         });
15         endTime = System.currentTimeMillis();
16         excTime = (float) (endTime - startTime) / 1000;
17         System.out.println(excTime);
18 
19 
20 
21         System.out.println("-------------------------------------");
22         
23        
24         //迭代器遍历排序
25         startTime = System.currentTimeMillis();
26         Iterator<String> iter = sortList.iterator();
27         List<Object> dtList = new ArrayList<>();
28         while (iter.hasNext()){
29             String level = iter.next();
30             Iterator<String> it = list.iterator();
31             while (it.hasNext()){
32                 if(level.equals(it.next())){
33                     dtList.add(level);
34                 }
35             }
36         }
37         endTime = System.currentTimeMillis();
38         excTime = (float) (endTime - startTime) / 1000;
39         System.out.println(excTime);    

 

以上是关于按指定规则对List进行排序compare和遍历方法比较的主要内容,如果未能解决你的问题,请参考以下文章

Comparable接口

如何对List集合中的对象进行排序?

java中的treeSet中文排序

Java 8 进阶手册(XX):使用 Comparator 对列表进行排序

Java 8 进阶手册(XX):使用 Comparator 对列表进行排序

JDK1.8对List指定字段进行排序