一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - Java TreeMap排序算法實例

Java TreeMap排序算法實例

2020-11-28 14:52johennes Java教程

這篇文章主要介紹了Java TreeMap排序算法,結合實例形式分析了TreeMap排序算法的原理、實現方法與相關注意事項,需要的朋友可以參考下

本文實例講述了Java TreeMap排序算法。分享給大家供大家參考,具體如下:

TreeMap 和 HashMap 用法大致相同,但實際需求中,我們需要把一些數據進行排序;

以前在項目中,從數據庫查詢出來的數據放在List中,順序都還是對的,但放在HashMap中,順序就完全亂了。

為了處理排序的問題:

1. 對于一些簡單的排序,如:數字,英文字母等

?
1
2
3
4
5
6
7
8
TreeMap hm = new TreeMap<String, String>(new Comparator() {
    public int compare(Object o1, Object o2) {
       //如果有空值,直接返回0
       if (o1 == null || o2 == null)
         return 0;
       return String.valueOf(o1).compareTo(String.valueOf(o2));
    }
});

備注:

compareTo(String str) :是String 提供的一個方法,如果參數字符串等于此字符串,則返回 0 值;如果按字典順序此字符串小于字符串參數,則返回一個小于 0 的值;如果按字典順序此字符串大于字符串參數,則返回一個大于 0 的值。

int compare(T o1,T o2):隨第一個參數小于、等于或大于第二個參數而分別返回負整數、零或正整數。

2. 對于處理有中文排序的問題

?
1
2
3
4
5
6
7
8
9
10
TreeMap hm = new TreeMap<String, String>(new Comparator() {
     public int compare(Object o1, Object o2) {
        //如果有空值,直接返回0
        if (o1 == null || o2 == null)
           return 0;
       CollationKey ck1 = collator.getCollationKey(String.valueOf(o1));
       CollationKey ck2 = collator.getCollationKey(String.valueOf(o2));
       return ck1.compareTo(ck2);
    }
});

備注: CollationKey:CollationKey 表示遵守特定 Collator 對象規則的 String。

比較兩個CollationKey 將返回它們所表示的 String 的相對順序。使用 CollationKey來比較 String 通常比使用 Collator.compare 更快。因此,當必須多次比較 String 時(例如,對一個 String 列表進行排序),使用 CollationKey 會更高效。

實例:

?
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
package ChineseSort;
import java.util.Collection;
import java.util.Iterator;
import java.util.SortedMap;
import java.util.TreeMap;
public class TestSort {
public static void main(String[] args) {
  // TODO Auto-generated method stub
  CollatorComparator comparator = new CollatorComparator();
  TreeMap map = new TreeMap(comparator);
  for(int i=0; i<10; i++) {
    String s = ""+(int)(Math.random()*1000);
    map.put(s,s);
  }
  map.put("abcd","abcd");
  map.put("Abc", "Abc");
  map.put("bbb","bbb");
  map.put("BBBB", "BBBB");
  map.put("北京","北京");
  map.put("中國","中國");
  map.put("上海", "上海");
  map.put("廈門", "廈門");
  map.put("香港", "香港");
  map.put("碑海", "碑海");
  Collection col = map.values();
  Iterator it = col.iterator();
  while(it.hasNext()) {
    System.out.println(it.next());
  }
}
}

比較器類:

?
1
2
3
4
5
6
7
8
9
10
11
12
package ChineseSort;
import java.text.CollationKey;
import java.text.Collator;
import java.util.Comparator;
public class CollatorComparator implements Comparator {
Collator collator = Collator.getInstance();
public int compare(Object element1, Object element2) {
  CollationKey key1 = collator.getCollationKey(element1.toString());
  CollationKey key2 = collator.getCollationKey(element2.toString());
  return key1.compareTo(key2);
}
}

運行該類,運行結果如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
325
62
653
72
730
757
874
895
909
921
Abc
abcd
bbb
BBBB
碑海
北京
上海
廈門
香港
中國

此時可以看到中文的排序已經完成正常。如果想不讓英文區分大小寫,則修改CollatorComparator類,找到

?
1
element1.toString()

修改為:

?
1
element1.toString().toLowerCase()

當然你改成轉換成大寫的也無所謂了,當然

?
1
element2.toString()

也要同時修改為

?
1
element2.toString().toLowerCase()

希望本文所述對大家java程序設計有所幫助。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 不知火舞被c视频在线播放 不卡一区二区三区卡 | 7777奇米| 美女露全身永久免费网站 | 国产99久久久国产精品成人 | 日本中文字幕黑人借宿影片 | 欧美日韩中文字幕久久伊人 | 成免费视频 | 午夜在线观看免费观看 视频 | 射18p | 91大神大战高跟丝袜美女 | 全日爱韩国视频在线观看 | 日韩理论在线观看 | 日韩精品免费看 | 日韩高清无砖砖区2022 | 日本人交换乱理伦片 | 亚洲精品第二页 | 国产一区二区三区水野朝阳 | 久久AV国产麻豆HD真实 | 免费a视频在线观看 | 99久久er这里只有精品17 | 成人高辣h视频一区二区在线观看 | 日韩网站在线观看 | 欧美在线视频7777kkkk | 性xxx免费 | 无遮掩60分钟从头啪到尾 | 黑人双渗透 | 亚洲高清视频免费 | 黑人好大好硬好深好爽想要h | 亚洲精品综合一二三区在线 | 亚偷熟乱区视频在线观看 | 欧美在线视频一区在线观看 | 调教全程肉动画片在线观看 | 欧美特级午夜一区二区三区 | 厨房play黄瓜进去小说h | 国产人人草 | 国产全部视频 | 亚州性夜夜射在线观看 | 草草在线免费视频 | 女人和男人搞鸡 | 京东热在线观看 | 极品ts赵恩静和直男激战啪啪 |