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,
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,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
|
sort(List<T> list) 根據元素的自然順序 對指定列表按升序進行排序。 |
|
static
|
sort(List<T> list,Comparator<? super T> c) 根據指定比較器產生的順序對指定列表進行排序。 |
這是API中Collections中的sort的兩種使用方法。
首先在實體類中實現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集合操作(List、Set、Map)-巧用工具類
先從一個簡單例子看一下這些東西可以帶給我們怎樣的便利,下面的程式碼會完成字串去重+排序功能。 String str = "asdasdasdx"; ArrayList<String> list = new ArrayList(Arrays.asList(str.
Java集合整理(List and Set and Map)
集合的由來 陣列長度是固定,當新增的元素超過了陣列的長度時需要對陣列重新定義,太麻煩,java內部給我們提供了集合類,能儲存任意物件,長度是可以改變的,隨著元素的增加而增加,隨著元素的減少而減少 陣列和集合的區別 區別1 : 陣列既可以儲存基本資
Spring中集合(List,Set,Map)的配置和簡單使用(一)
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 集合類(Collection)、List、Set、Map、Collections與Arrays、泛型
1. 集合堆疊、佇列資料結構的特點1.1. 什麼是集合儲存物件的容器,面嚮物件語言對事物的體現都是以物件的形式,所以為了方便對多個物件的操作,儲存物件,集合是儲存物件最常用的一種方式。集合的出現就是為了持有物件。集合中可以儲存任意型別的物件, 而且長度可變。在程式中有可能無法
jav核心(十四):集合類型操作:Collection、List、Set;Map集合;Iterator叠代器
equal exc ron 添加 推出 使用 映射關系 不同的 stat 一、java.util.List 1、List總結 List中允許保存重復的數據; List中允許保存多個null; 常用實現類:ArrayList【推薦使用】、Vector、Linked
常用JAVA集合框架(Collection、List、Set、Map)
注意,此實現不是同步的。如果多個執行緒同時訪問一個 ArrayList 例項,而其中至少一個執行緒從結構上修改了列表,那麼它必須 保持外部同步。(結構上的修改是指任何新增或刪除一個或多個元素的操作,或者顯式調整底層陣列的大小;僅僅設定元素的值不是結構上的修改。)應該使用 Collections.synchro
List、Set、Map集合最常用六個子類及它們之間的區別詳解(含經典面試題)
集合: 在程式設計中,我們需要管理很多物件集,比如某班全部的同學資訊,某個公司的人員資料等等。JAVA集合就是提供某種資料結構的支援,即存放物件,並讓這些物件按照某種資料結構存放。 集合與陣列的區別: 1. 陣列存放的元素個數是在定義陣列時固定的。
【java讀書筆記】——Collection集合之六大介面(Collection、Set、List、Map、Iterator和Comparable)
兩個月之前準備軟考時,簡單的從理論上總結了最常用的資料結構和演算法,比如:線性表,連結串列,圖。在進行java開發時,jdk為我們提供了一系列相應的類來實現基本的資料結構。jdk所提供的
【Java】集合(List、Set、Map)遍歷、刪除、比較元素時的小陷阱
主要說明List,其餘兩個都一樣 一、漏網之魚-for迴圈遞增下標方式遍歷集合,並刪除元素 如果你用for迴圈遞增下標方式遍歷集合,在遍歷過程中刪除元素,你可能會遺漏了某些元素。說那麼說可能也說不清楚,看以下示例: import ja
java的各種集合為什麼不安全(List、Set、Map)以及代替方案
我們已經知道多執行緒下會有各種不安全的問題,都知道併發的基本解決方案,這裡對出現錯誤的情況進行一個實際模擬,以此能夠聯想到具體的生產環境中。 # 一、List 的不安全 ## 1.1 問題 看一段程式碼: ```java public static void main(String
Spring中使用Map、Set、List、數組、屬性集合的註入方法配置文件
查看 main list highlight 配置 spring配置 pla lec while (1)下邊的一個Java類包含了所有Map、Set、List、數組、屬性集合等這些容器,主要用於演示spring的註入配置; [java] view plain c
NPOI對Excel的操作(Sheet轉DataTable、List<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
Map、Set、List集合差別及聯系詳解
特性 互轉 字母順序 時也 參數 很慢 未定義 諸多 cto 提到集合之前,先說說數組Array和集合的區別: (1)數組是大小固定的,並且同一個數組只能存放類型一樣的數據(基本類型/引用類型) (2)JAVA集合可以存儲和操作數目不固定的一組數據。 (
List、Set、Map集合大雜燴
鏈接 collect hid 鍵值 oar text 同步 二分 實現 java集合主要分三種:list、set、map;當中list和set都繼承自Collection接口,兩者最大差別是set不能包括反復元素 list的經常使用實現類有: Ar
List、Set、Map常見集合遍歷總結
排序 out java tlab vhdl for var 定義 word Java中的集合有三大類,List、Set、Map,都處於java.util包中,List、Set和Map都是接口,不能被實例化,它們的各自的實現類可以被實例化。List的實現類主要有ArrayLi
Java集合:List、Set和Map的區別,ArrayList和LinkedList有何區別..........
一、陣列和集合的區別: 陣列是大小固定的,並且同一個陣列只能存放型別一樣的資料(基本型別/引用型別); 集合可以儲存和操作數目不固定的一組資料。 所有的JAVA集合都位於 java.util包中! JAVA集合只能存放引用型別的的資料,不能存放基本資料型別。 陣列和集合相比唯一的有點就是速度
Redis 的 Key、String、list、set、hash 的基本操作總結
目錄 一、基本的實現架構 二、操作 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 【List、Set、資料結構、Collections】
day03 【List、Set、資料結構、Collections】 主要內容 資料結構 List集合 Set集合 Collections 教學目標 [ ] 能夠說出List集合特點 [ ] 能夠說出常見的資料結構 [ ] 能夠說出陣列結構特點 [ ] 能夠說出棧