Java List Map自定義排序

2021-09-22 02:05:25 字數 2808 閱讀 1903

1、list自定義排序

自定以實現list的sort()方法

舉例:有型別為document的arraylist,document有屬性count,按照count的大小排序。

listipinfolist = new arraylist<>();

//省略初始化模擬資料**

// 排序( 如果出現次數相同,比較兩個ip所屬區域下的apk數量)

ipinfolist.sort(new comparator() else if(ip1.getinteger("count") > ip2.getinteger("count")) else

}});

這裡需要注意下compare的返回值:返回值為1時,compare(object o1, object o2) 中的第二個引數會排在第乙個引數前面,-1則第乙個引數排前面,0時則不排序。

compare(object o1, object o2) {}根據上面的返回值規則,定義更複雜寫的排序規則,上面的排序規則較為簡單,可以使用compare提供的方法:

ipinfolist.sort(new comparator() 

}});

對於上面的**我們可以把排序規則提取出來,封裝乙個排序規則工具類。

**如下:

class sorttest implements comparatorelse if(ip1.getinteger("count") > ip2.getinteger("count")) else 	}}

//排序類呼叫

collections.sort(ipinfolist, new sorttest());

2、map自定義排序

簡單介紹map

在講解map排序之前,我們先來稍微了解下map。map是鍵值對的集合介面,它的實現類主要包括:hashmap,treemap,hashtable以及linkedhashmap等。其中這四者的區別如下(簡單介紹):

hashmap:我們最常用的map,它根據key的hashcode 值來儲存資料,根據key可以直接獲取它的value,同時它具有很快的訪問速度。hashmap最多隻允許一條記錄的key值為null(多條會覆蓋);允許多條記錄的value為 null。非同步的。

treemap: 能夠把它儲存的記錄根據key排序,預設是按公升序排序,也可以指定排序的比較器,當用iterator 遍歷treemap時,得到的記錄是排過序的。treemap不允許key的值為null。非同步的。

hashtable: 與 hashmap類似,不同的是:key和value的值均不允許為null;它支援執行緒的同步,即任一時刻只有乙個執行緒能寫hashtable,因此也導致了hashtale在寫入時會比較慢。

linkedhashmap: 儲存了記錄的插入順序,在用iterator遍歷linkedhashmap時,先得到的記錄肯定是先插入的.在遍歷的時候會比hashmap慢。key和value均允許為空,非同步的。

map排序

treemap

treemap預設是公升序的,如果我們需要改變排序方式,則需要使用比較器:comparator。

comparator可以對集合物件或者陣列進行排序的比較器介面,實現該介面的public compare(t o1,to2)方法即可實現排序,該方法主要是根據第乙個引數o1,小於、等於或者大於o2分別返回負整數、0或者正整數。如下:

**如下:

public class treemaptest 

});map.put("c", "ccccc");

map.put("a", "aaaaa");

map.put("b", "bbbbb");

map.put("d", "ddddd");

setkeyset = map.keyset();

iteratoriter = keyset.iterator();

while (iter.hasnext())

}}

執行結果如下:

d:ddddd 

c:ccccc

b:bbbbb

a:aaaaa

上面例子是對根據treemap的key值來進行排序的,但是有時我們需要根據treemap的value來進行排序。對value排序我們就需要 借助於collections的sort(list list, comparator<? super t> c)方法,該方法根據指定比較器產生的順序對指定列表進行排序。但是有乙個前提條件,那就是所有的元素都必須能夠根據所提供的比較器來進行比較。如下:

**如下:

public class treemaptest 

});}

}}

執行結果

a:aaaaa 

b:bbbbb

c:ccccc

d:ddddd

hashmap

我們都是hashmap的值是沒有順序的,他是按照key的hashcode來實現的。對於這個無序的hashmap我們要怎麼來實現排序呢?參照treemap的value排序,我們一樣的也可以實現hashmap的排序。

**如下:

public class hashmaptest 

});}

}}

執行結果

a:aaaaa 

b:bbbbb

c:ccccc

d:ddddd

自定義 如何自定義協議

何為自定義協議,其實是相對標準協議來說的,這裡主要針對的是應用層協議 常見的標準的應用層協議如http ftp smtp等,如果我們在網路通訊的過程中不去使用這些標準協議,那就需要自定義協議,比如我們常用的rpc框架 dubbo,thrift 分布式快取 redis,memcached 等都是自定義...

自定義控制項 自定義鐘錶

private context mcontext 畫筆 private paint mpaint 控制項的寬 private int mwidth x方向的圓心座標 private int center 鐘錶的半徑 private int mradio 圓環的寬 private int stroke...

自定義控制項及自定義屬性

自定義控制項在android開發中的重要性,是不言而喻,眾人皆知的。希望通過這二天的學習,能讓大家了解自定義控制項的原理,熟悉自定義控制項的使用步驟,並能寫出一些普通的效果。內容介紹 1 使用系統控制項,實現自定義的效果,案例有 優酷環形選單 廣告條 viewpager 下拉列表 spinner 2...