1. 程式人生 > >Collections集合操作(List、Set、Map)-巧用工具類

Collections集合操作(List、Set、Map)-巧用工具類

先從一個簡單例子看一下這些東西可以帶給我們怎樣的便利,下面的程式碼會完成字串去重+排序功能。

String str = "asdasdasdx";
ArrayList<String> list = new ArrayList(Arrays.asList(str.split("")));
HashSet hs = new HashSet(list);
list.clear();
list.addAll(hs);
Collections.sort(list);

不羅嗦了,正文開始!!!

我們先介紹一個類叫Collections(注意末尾有s),它操作在三種資料結構上,分別是List、Set和Map(注意,這三個都是介面,下文會具體講)。它的API描述是:此類完全由在 collection 上進行操作或返回 collection 的靜態方法組成。它包含在 collection 上操作的多型演算法,即“包裝器”,包裝器返回由指定 collection 支援的新 collection,以及少數其他內容。 

然後再說一下Collention,Collection 表示一組物件和在一組物件上規定的一些操作,這些對象也稱為 collection 的元素,其中一些主要方法有add、clear、isEmpty、iterator這些。List和Set中的很多實現都實現了這個介面,比如ArrayList、HashSet。

簡單來說,Collections簡單來說就是對List、Set和Map進行的一些便利的操作。下面列一些常用的方法,通過名字基本就能看出作用,詳細介紹請檢視API。

(Collection<? super T> c, T... elements)

copy(List<? super T> dest,

List<? extends T> src)

fill(List<? super T> list, T obj)

(List<?> source,List<?> target)

max(Collection<? extends T> coll,Comparator<? super T> comp)

min(Collection<? extends T> coll,Comparator<? super T> comp)

(List<T> list, T oldVal, T newVal)

(List<?> list)

(List<?> list, int distance)

sort(List<T> list)

sort(List<T> list,Comparator<? super T> c)

swap(List<?> list, int i, int j)

說完了這個好用的工具類Collections的作用,我們再介紹一下它的操作物件,List、Set和Map,這三個都是介面,有對應的實現。介紹完這三個介面以後我們講以應用為目的著重講一些應用。

①List(常用實現--ArrayList、LinckedList、Stack、Vector)

特點:有順序可重複

ArrayList:底層陣列結構,執行緒不安全,可重複

LinkedList:底層連結串列結構,執行緒不安全

Vector:底層陣列結構,執行緒安全(和ArrayList主要區別就是執行緒安全與否)

②Set(常用實現--HashSet、TreeSet)

特點:無順序不可重複(Set具有與Collection完全一樣的介面,因此沒有任何額外的功能)

HashSet:底層雜湊表結構,執行緒不安全

TreeSet:底層二叉樹結構,執行緒不安全

③Map(常用實現--HashMap、HashTable、TreeMap)

特點:雙列集合,鍵值對儲存,和Collection一個級別

HashMap:使用hasCode進行查詢

TreeMap:底層紅黑樹結構,檢視時他們會被排序,特點是得到的結果是經過排序的

ps:

Map並沒有實現Collection,但是它和Collection相關性卻很大,因為對Map的遍歷的時候經常把鍵取出挨個查詢。

Set set = Map.keySet();

到此為止,基礎課程就講解完了

--------------------------------------------------------------先來一條華麗的分割線--------------------------------------------------------------

現在,我們要講一些具體的用法了

一、遍歷

Iterator:對Collection進行迭代的迭代器。主要用來對List、Set和Map進行遍歷。

HashMap<String, String> hashMap = new HashMap<String, String>();  
        hashMap.put("computer", "計算機");  
        hashMap.put("software", "軟體");  
          
        //採用Iterator遍歷HashMap  
        Iterator it = hashMap.keySet().iterator();  
        while(it.hasNext()) {  
            String key = (String)it.next();  
            System.out.println("key:" + key);  
            System.out.println("value:" + hashMap.get(key));  
        }  

二、實體比較大小

Comparable和Comparator:當使用Collections.sort時,很多時候需要排序的不是String、Integer這種常用資料型別(這些型別實際上已經實現Comparable介面),比如我們定義了一個書本類Book,一般情況會按其編號進行排序,但是有時候會按價格或者出版時間排序,這就需要我們自己實現排序的程式碼。
static
<T extends Comparable<? super T>>
void
sort(List<T> list)
          根據元素的自然順序 對指定列表按升序進行排序。
static
<T> void
sort(List<T> list,Comparator<? super T> c)
          根據指定比較器產生的順序對指定列表進行排序。

這是API中Collections中的sort的兩種使用方法。

sort(List<T> list) 的使用方法:

首先在實體類中實現Comparable介面,在呼叫Collections.sort的時候,它會自動根據定義的compareTo函式比較大小並且返回值。注意compareTo函式返回值為int!

public class Book implements Comparable { 
    public int id;// 編號  
    public String name;// 名稱  
    public double price; // 價格  
    private String author;// 作者  
    public Calendar calendar;// 出版日期  
  
    public Book(int id, String name, double price, Calendar calender,String author) {  
        this.id = id;  
        this.name = name;  
        this.price = price;  
        this.calendar = calender;  
        this.author = author;  
    }  
  
    public int compareTo(Book b) {// Comparable介面中的方法  
        return this.id - b.id; // 按書的id比較大小,用於預設排序  
    }  
  
 

sort(List<T> list, Comparator<? super T> c) 的使用方法:

很多時候我們會根據多種方法進行排序,但是我們實現Compareble介面以後只能實現一種排序方式,所以我們就用到了Comparator比較器,簡單來說就是自定義函式比較大小。

public class UseComparator {  

        Collections.sort(list, new PriceComparator()); // 根據價格排序  
  
        Collections.sort(list, new CalendarComparator()); // 根據時間排序  

    }  
  
  
    // 自定義比較器:按書的價格排序  
    static class PriceComparator implements Comparator {  
        public int compare(Book b1,Book b2) {// 實現介面中的方法  
            return new Double(b1.price).compareTo(new Double(b2.price));  
        }  
    }  
}  


部分參考自:http://blog.csdn.net/tjcyjd/article/details/6804690

相關推薦

Collections集合操作ListSetMap-工具

先從一個簡單例子看一下這些東西可以帶給我們怎樣的便利,下面的程式碼會完成字串去重+排序功能。 String str = "asdasdasdx"; ArrayList<String> list = new ArrayList(Arrays.asList(str.

Java集合整理List and Set and Map

集合的由來 陣列長度是固定,當新增的元素超過了陣列的長度時需要對陣列重新定義,太麻煩,java內部給我們提供了集合類,能儲存任意物件,長度是可以改變的,隨著元素的增加而增加,隨著元素的減少而減少 陣列和集合的區別 區別1 : 陣列既可以儲存基本資

Spring中集合ListSetMap的配置和簡單使用

1、首先寫一個實體類 package com.listtest.test; import java.util.List; import java.util.Map; import java.util.Set; public class Collect {

當N非常大時Java函式BigInteger計算N階乘

資料型別       型別名       位長      取值範圍           預設值 布林型           boolean       1          true,false          false 位元組型             byte           8        

JAVA 集合CollectionListSetMapCollections與Arrays泛型

1. 集合堆疊、佇列資料結構的特點1.1. 什麼是集合儲存物件的容器,面嚮物件語言對事物的體現都是以物件的形式,所以為了方便對多個物件的操作,儲存物件,集合是儲存物件最常用的一種方式。集合的出現就是為了持有物件。集合中可以儲存任意型別的物件, 而且長度可變。在程式中有可能無法

jav核心十四集合操作:CollectionListSetMap集合;Iterator叠代器

equal exc ron 添加 推出 使用 映射關系 不同的 stat 一、java.util.List 1、List總結 List中允許保存重復的數據; List中允許保存多個null; 常用實現類:ArrayList【推薦使用】、Vector、Linked

常用JAVA集合框架CollectionListSetMap

注意,此實現不是同步的。如果多個執行緒同時訪問一個 ArrayList 例項,而其中至少一個執行緒從結構上修改了列表,那麼它必須 保持外部同步。(結構上的修改是指任何新增或刪除一個或多個元素的操作,或者顯式調整底層陣列的大小;僅僅設定元素的值不是結構上的修改。)應該使用 Collections.synchro

ListSetMap集合最常用六個子及它們之間的區別詳解含經典面試題

集合: 在程式設計中,我們需要管理很多物件集,比如某班全部的同學資訊,某個公司的人員資料等等。JAVA集合就是提供某種資料結構的支援,即存放物件,並讓這些物件按照某種資料結構存放。 集合與陣列的區別: 1. 陣列存放的元素個數是在定義陣列時固定的。

【java讀書筆記】——Collection集合之六大介面CollectionSetListMapIterator和Comparable

       兩個月之前準備軟考時,簡單的從理論上總結了最常用的資料結構和演算法,比如:線性表,連結串列,圖。在進行java開發時,jdk為我們提供了一系列相應的類來實現基本的資料結構。jdk所提供的

【Java】集合ListSetMap遍歷刪除比較元素時的小陷阱

主要說明List,其餘兩個都一樣 一、漏網之魚-for迴圈遞增下標方式遍歷集合,並刪除元素 如果你用for迴圈遞增下標方式遍歷集合,在遍歷過程中刪除元素,你可能會遺漏了某些元素。說那麼說可能也說不清楚,看以下示例: import ja

java的各種集合為什麼不安全ListSetMap以及代替方案

我們已經知道多執行緒下會有各種不安全的問題,都知道併發的基本解決方案,這裡對出現錯誤的情況進行一個實際模擬,以此能夠聯想到具體的生產環境中。 # 一、List 的不安全 ## 1.1 問題 看一段程式碼: ```java public static void main(String

Spring中使用MapSetList數組屬性集合的註入方法配置文件

查看 main list highlight 配置 spring配置 pla lec while (1)下邊的一個Java類包含了所有Map、Set、List、數組、屬性集合等這些容器,主要用於演示spring的註入配置; [java] view plain c

NPOI對Excel的操作Sheet轉DataTableList<T>

lln int32 rtt ole num r+ pro tab ces 1 using System.Collections.Generic; 2 using NPOI.HSSF.UserModel; 3 using NPOI.SS.UserModel; 4

MapSetList集合差別及聯系詳解

特性 互轉 字母順序 時也 參數 很慢 未定義 諸多 cto 提到集合之前,先說說數組Array和集合的區別:   (1)數組是大小固定的,並且同一個數組只能存放類型一樣的數據(基本類型/引用類型)   (2)JAVA集合可以存儲和操作數目不固定的一組數據。    (

ListSetMap集合大雜燴

鏈接 collect hid 鍵值 oar text 同步 二分 實現 java集合主要分三種:list、set、map;當中list和set都繼承自Collection接口,兩者最大差別是set不能包括反復元素 list的經常使用實現類有: Ar

ListSetMap常見集合遍歷總結

排序 out java tlab vhdl for var 定義 word Java中的集合有三大類,List、Set、Map,都處於java.util包中,List、Set和Map都是接口,不能被實例化,它們的各自的實現類可以被實例化。List的實現類主要有ArrayLi

Java集合ListSetMap的區別,ArrayList和LinkedList有何區別..........

一、陣列和集合的區別:   陣列是大小固定的,並且同一個陣列只能存放型別一樣的資料(基本型別/引用型別);   集合可以儲存和操作數目不固定的一組資料。 所有的JAVA集合都位於 java.util包中! JAVA集合只能存放引用型別的的資料,不能存放基本資料型別。   陣列和集合相比唯一的有點就是速度

Redis 的 KeyStringlistsethash 的基本操作總結

目錄   一、基本的實現架構 二、操作 Key 的方法 三、對儲存結構為String型別的操作 四、對儲存結構為List型別的操作 五、對儲存結構為Set型別的操作 六、對儲存結構為HashMap型別的操作 一、基本的實現架構 就是新建一個實體類,通

java List Set Map集合聯絡與區別

List Map Set 集合 一、基礎概念 1. Collection 和 Map 介面 ​ Java集合框架主要由 Collection和Map兩個根介面及其子介面、實現類組成。 ​ 1) Collection 介面是Set、List、和Queue介面的父介面: ​ Coll

day03 【ListSet資料結構Collections

day03 【List、Set、資料結構、Collections】 主要內容 資料結構 List集合 Set集合 Collections 教學目標 [ ] 能夠說出List集合特點 [ ] 能夠說出常見的資料結構 [ ] 能夠說出陣列結構特點 [ ] 能夠說出棧