使用TreeMap按值排序遇到的問題

2021-06-22 23:51:10 字數 855 閱讀 5539

如果我們需要乙個有序的map,我們會使用treemap進行儲存。treemap預設是按照key值公升序進行排序的,如數字、ascii。

如果我們需要對treemap按值進行排序的話,可以例項化comparator介面,在treemap的構造方法中當作引數傳入。這裡遇到了問題:當插入treemap的兩條資料value值一樣的時候,後一條資料會覆蓋前一條資料。

通過查資料發現,原因是例項化comparator介面的時候,相當於自己實現了乙個比較器,而treemap的插入與取出都是會經過比較器的。以如下**為例:

public class valuecomparator implements comparator

@override

public int compare(object o1, object o2) else if (value2 - value1 ==0) else

}}

base就是我們需要按值排序的map,在valuecomparator的構造方法中傳入。然後在下面的compare方法中,value1與value2就是根據o1和o2取到的value值,其中o1與o2都是map的key值。當o1與o2的value值不一樣的時候,會返回1與-1,代表著排序關係。而當他們的value值一樣的時候,需要對o1和o2的進行排序關係的判斷。當取出資料的時候,過程是一樣的,需要根據get方法中的引數對treemap中的資料對treemap進行遍歷判斷,如果相等則返回0,並且get方法會返回相等的那個物件,如果不等,就搜尋下一節點並進行判斷,知道遍歷完整個treemap。

這裡就很明顯了,如果兩個key值一樣的物件插入到treemap中時,由於插入的時候進行判斷返回的結果為0,後乙個插入的物件會覆蓋在treemap中儲存的物件。

python按值排序 python 按值排序

感謝分享!python 字典 dict 的特點就是無序的,按照鍵 key 來提取相應值 value 如果我們需要字典按值排序的話,那可以用下面的方法來進行 1 下面的是按照value的值從大到小的順序來排序。dic dict sorted dic.iteritems key lambda d d 1...

HashMap按鍵排序和按值排序

今天做統計時需要對x軸的地區按照地區 areacode 進行排序,由於在構建xmldata使用的map來進行資料統計的,所以在統計過程中就需要對map進行排序。在講解map排序之前,我們先來稍微了解下map。map是鍵值對的集合介面,它的實現類主要包括 hashmap,treemap,hashtab...

HashMap按鍵排序和按值排序

map是鍵值對的集合介面,他的實現類只要包括 hashmap,treemap,hashtable以及linkedhashmap等.其中這四個的區別簡單介紹如下 hashmap 最常用的map,他根據key的hashcode值來儲存資料,根據key可以直接獲取他的value,同時它具有很快的訪問速度....