1. 程式人生 > >集合Collection和List的詳解

集合Collection和List的詳解

1.什麼是集合

儲存物件的容器,面嚮物件語言對事物的體現都是以物件的形式,所以為了方便對多個物件的操作,儲存物件,集合是儲存物件最常用的一種方式。

集合的出現就是為了持有物件。集合中可以儲存任意型別的物件,而且長度可變。在程式中有可能無法預先知道需要多少個物件,那麼用陣列來裝物件的話,長度不好定義,而集合解決了這樣的問題。

2.集合和陣列的區別

陣列和集合類都是容器

陣列長度是固定的,集合長度是可變的。陣列中可以儲存基本資料型別,集合只能儲存物件陣列中儲存資料型別是單一的,集合中可以儲存任意型別的物件。

集合類的特點

用於儲存物件,長度是可變的,可以儲存不同型別的物件。

陣列的缺點

儲存型別單一的資料容器,操作複雜(陣列一旦宣告好不可變)

3.集合的分類

集合做什麼

1:將物件新增到集合

2:從集合中刪除物件

3: 從集合中查詢一個物件

4:從集合中修改一個物件就是增刪改查

注意:集合和陣列中存放的都是物件的引用而非物件本身

Java工程師對不同的容器進行了定義,雖然容器不同,但是還是有一些共性可以抽取最後抽取了一個頂層介面,那麼就形成了一個集合框架。如何學習呢?當然是從頂層學起,頂層裡邊具有最共性,最基本的行為。具體的使用,就要選擇具體的容器了。為什麼?因為不斷向上抽取的東西有可能是不能建立物件的.抽象的可能性很大,並且子類物件的方法更多一些.所以是看頂層,建立底層。那麼集合的頂層是什麼呢 叫做Collection

集合框架體系

複製程式碼
[java] view plain copy print?
---|Collection: 單列集合  
            
---|List: 有儲存順序, 可重複 ---|ArrayList: 陣列實現, 查詢快, 增刪慢 由於是陣列實現, 在增和刪的時候會牽扯到陣列 增容, 以及拷貝元素. 所以慢。陣列是可以直接 按索引查詢, 所以查詢時較快 ---|LinkedList: 連結串列實現, 增刪快, 查詢慢 由於連結串列實現, 增加時只要讓前一個元素記住自 己就可以, 刪除時讓前一個元素記住後一個元 素, 後一個元素記住前一個元素. 這樣的增刪效 率較高但查詢時需要一個一個的遍歷, 所以效率 較低
---|Vector: 和ArrayList原理相同, 但執行緒安全, 效率略低 和ArrayList實現方式相同, 但考慮了執行緒安全問 題, 所以效率略低 ---|Set: 無儲存順序, 不可重複 ---|HashSet ---|TreeSet ---|LinkedHashSet ---| Map: 鍵值對 ---|HashMap ---|TreeMap ---|HashTable ---|LinkedHashMap
複製程式碼

為什麼出現這麼多集合容器,因為每一個容器對資料的儲存方式不同,這種儲存方式稱之為資料結構(data structure)

注意 --集合和陣列中存放的都是物件的引用。

4.什麼時候該使用什麼樣的集合

5.集合類Collection

Collection介面有兩個子介面:List(連結串列|線性表)和Set(集)

1.特點:

Collection中描述的是集合共有的功能(CRUD)

List可存放重複元素,元素存取是有序的

Set不可以存放重複元素,元素存取是無序的

java.util.Collection  
        ---| Collection     描述所有介面的共性  
            ----| List介面    可以有重複元素的集合  
            ----| Set  介面   不可以有重複元素的集合

2:學習集合物件

學習Collection中的共性方法,多個容器在不斷向上抽取就出現了該體系。發現Collection介面中具有所有容器都具備的共性方法。查閱API時,就可以直接看該介面中的方法。並建立其子類物件對集合進行基本應用。當要使用集合物件中特有的方法,在檢視子類具體內容。

檢視api 文件Collection在在java.util中(注意是大寫Collection)

注意在現階段遇到的 E T 之類的型別,需要暫時理解為object  因為涉及到了泛型.

3:建立集合物件,使用Collection中的List的具體實現類ArrayList

Collection coll=new Arraylist();

6.Collection介面的共性方法

複製程式碼
增加:  
        1:add() 將指定物件儲存到容器中  
                      add 方法的引數型別是Object 便於接收任意物件  
        2:addAll() 將指定集合中的元素新增到呼叫該方法和集合中  
刪除:  
        3:remove() 將指定的物件從集合中刪除  
        4:removeAll() 將指定集合中的元素刪除  
修改  
        5:clear() 清空集合中的所有元素  
判斷  
        6:isEmpty() 判斷集合是否為空  
        7:contains() 判斷集合何中是否包含指定物件  
              
        8:containsAll() 判斷集合中是否包含指定集合  
                            使用equals()判斷兩個物件是否相等    
獲取:           9:int size()    返回集合容器的大小  
  
轉成陣列        10: toArray()   集合轉換陣列  
複製程式碼

增加:

複製程式碼
 1 public static void main(String[] args) {  
 2         Collection list = new ArrayList();  
 3         // 增加:add() 將指定物件儲存到容器中  
 4         list.add("計算機網路");  
 5         list.add("現代作業系統");  
 6         list.add("java程式設計思想");  
 7         System.out.println(list);  
 8         // [計算機網路, 現代作業系統, java程式設計思想]  
 9           
10         // 增加2 將list容器元素新增到list2容器中  
11         Collection list2 = new ArrayList();  
12         list2.add("java核心技術");  
13         list2.addAll(list);  
14         list2.add("java語言程式設計");  
15         System.out.println(list2);  
16         // [java核心技術, 計算機網路, 現代作業系統, java程式設計思想, java語言程式設計]  
17     } 
複製程式碼

刪除:

複製程式碼
1 // 刪除1 remove  
2         boolean remove = list2.remove("java核心技術");  
3         System.out.println(remove); // true  
4         System.out.println(list2); //  
5         //刪除2 removeAll() 將list中的元素刪除  
6         boolean removeAll = list2.removeAll(list);  
7         System.out.println(removeAll);//true  
8         System.out.println(list2);//[java語言程式設計]  
複製程式碼

修改:

複製程式碼
 1 public static void main(String[] args) {  
 2         Collection list = new ArrayList();  
 3         // 增加:add() 將指定物件儲存到容器中  
 4         list.add("計算機網路");  
 5         list.add("現代作業系統");  
 6         list.add("java程式設計思想");  
 7         list.add("java核心技術");  
 8         list.add("java語言程式設計");  
 9         System.out.println(list);  
10         // 修改 clear() 清空集合中的所有元素  
11         list.clear();  
12         System.out.println(list); //[]   
13     }  
複製程式碼

判斷:

複製程式碼
 1 public static void main(String[] args) {  
 2         Collection list = new ArrayList();  
 3         // 增加:add() 將指定物件儲存到容器中  
 4         list.add("計算機網路");  
 5         list.add("現代作業系統");  
 6         list.add("java程式設計思想");  
 7         list.add("java核心技術");  
 8         list.add("java語言程式設計");  
 9         System.out.println(list);  
10           
11         boolean empty = list.isEmpty();  
12         System.out.println(empty);// false  
13         boolean contains = list.contains("java程式設計思想");  
14         System.out.println(contains);// true  
15         Collection list2 = new ArrayList();  
16         list2.add("水許傳");  
17         boolean containsAll = list.containsAll(list2);  
18         System.out.println(containsAll);// false  
19   
20     }  
複製程式碼

獲取:

複製程式碼
 1 public static void main(String[] args) {  
 2         Collection list = new ArrayList();  
 3         // 增加:add() 將指定物件儲存到容器中  
 4         list.add("計算機網路");  
 5         list.add("現代作業系統");  
 6         list.add("java程式設計思想");  
 7         list.add("java核心技術");  
 8         list.add("java語言程式設計");  
 9         System.out.println(list);  
10         // 獲取  集合容器的大小   
11         int size = list.size();  
12         System.out.println(size);   
13     } 
複製程式碼

下面寫個例子~集合中新增自定義物件:

複製程式碼
 1 public static void main(String[] args) {  
 2   
 3         // 建立集合物件  
 4         Collection coll = new ArrayList();  
 5   
 6         // 建立Person物件  
 7         Person p1 = new Person("jack", 25);  
 8         Person p2 = new Person("rose", 22);  
 9         Person p3 = new Person("lucy", 20);  
10         Person p4 = new Person("jack", 25);  
11   
12         // 集合中新增一些Perosn  
13   
14         // 刪除指定Person  
15   
16         // 刪除所有Person  
17   
18         // 判斷容器中是否還有Person  
19   
20         // 判斷容器中是否包含指定Person  
21   
22         // 獲取容器中Person的個數  
23   
24         // 將容器變為陣列,遍歷除所有Person  
25   
26     }  
複製程式碼

分析:

1:Person類

    1:姓名和年齡

     2:重寫hashCode和equals方法

          1:如果不重寫,呼叫Object類的equals方法,判斷記憶體地址,為false

                    1:如果是Person類物件,並且姓名和年齡相同就返回true

          2:如果不重寫,呼叫父類hashCode方法

                   1:如果equals方法相同,那麼hashCode也要相同,需要重寫hashCode方法

          3:重寫toString方法

                   1:不重寫,直接呼叫Object類的toString方法,列印該物件的記憶體地址

Person類:

複製程式碼
 1 class Person {  
 2     private String name;  
 3     private int age;  
 4   
 5     public Person() {  
 6   
 7     }  
 8   
 9     public Person(String name, int age) {  
10   
11         this.name = name;  
12         this.age = age;  
13     }  
14   
15     @Override  
16     public int hashCode() {  
17         return this.name.hashCode() + age;  
18     }  
19   
20     @Override  
21     public boolean equals(Object obj) {  
22         if (!(obj instanceof Person)) {  
23             return false;  
24         }  
25         Person p = (Person) obj;  
26         return this.name.equals(p.name) && this.age == p.age;  
27     }  
28   
29     @Override    
30     public String toString() {  
31         return "Person :name=" + name + ", age=" + age;  
32     }  
33   
34 }  
複製程式碼複製程式碼
 1 public static void main(String[] args) {  
 2         Person p1 = new Person("張三", 19);  
 3         Person p2 = new Person("李四", 20);  
 4         Person p3 = new Person("王五", 18);  
 5         Collection list = new ArrayList();  
 6         list.add(p1);  
 7         list.add(p2);  
 8         list.add(p3);  
 9         // isEmpty() 判斷集合是否為空  
10         boolean empty = list.isEmpty();  
11         System.out.println(empty);  
12         // 返回集合容器的大小  
13         int size = list.size();  
14         System.out.println(size);  
15          // contains()判斷集合何中是否包含指定物件  
16         boolean contains = list.contains(p1);  
17         System.out.println(contains);  
18   
19         // remove(); 將指定的物件從集合中刪除  
20         list.remove(p1);  
21           
22         // clear() 清空集合中的所有元素  
23         list.clear();  
24         System.out.println(list);  
25   
26     }
複製程式碼

7.List集合:

---| Iterable     介面   
          Iterator iterator()  
    ----| Collection     介面  
        ------| List      介面 元素可以重複,允許在指定位置插入元素,並通過索引來訪問元素  

List集合特有方法:

複製程式碼
1:增加  
        void add(int index, E element) 指定位置新增元素              
        boolean addAll(int index, Collection c) 指定位置新增集合    
2:刪除  
E remove(int index) 刪除指定位置元素  
  
3:修改  
        E set(int index, E element)    返回的是需要替換的集合中的元素  
4:查詢:  
        E get(int index)             注意: IndexOutOfBoundsException  
        int indexOf(Object o)         // 找不到返回-1  
        lastIndexOf(Object o)   
5:求子集合  
         List<E> subList(int fromIndex, int toIndex) // 不包含toIndex  
複製程式碼

增加:

複製程式碼
 1 public static void main(String[] args) {  
 2         List list = new ArrayList();  
 3         // 增加:add() 將指定物件儲存到容器中  
 4         list.add("計算機網路");  
 5         list.add("現代作業系統");  
 6         list.add("java程式設計思想");  
 7         list.add("java核心技術");  
 8         list.add("java語言程式設計");  
 9         System.out.println(list);  
10         // 刪除0角標元素  
11         Object remove = list.remove(0);  
12         System.out.println(remove);  
13     }
複製程式碼

修改:

複製程式碼
 1 public static void main(String[] args) {  
 2         List list = new ArrayList();  
 3         // 增加:add() 將指定物件儲存到容器中  
 4         list.add("計算機網路");  
 5         list.add("現代作業系統");  
 6         list.add("java程式設計思想");  
 7         list.add("java核心技術");  
 8         list.add("java語言程式設計");  
 9         System.out.println(list);  
10         // 修改2角標位置的書,返回的原來2角標位置的書  
11         Object set = list.set(2, "邊城");  
12         System.out.println(set); //java程式設計思想  
13         System.out.println(list);   
14           
15     } 
複製程式碼

查詢:

複製程式碼
 1 List list = new ArrayList();  
 2         // 增加:add() 將指定物件儲存到容器中  
 3         list.add("計算機網路");  
 4         list.add("現代作業系統");  
 5         list.add("java程式設計思想");  
 6         list.add("java核心技術");  
 7         list.add("java語言程式設計");  
 8         System.out.println(list);  
 9         // 查詢: E get(int index)  注意角標越界  
10         Object set = list.get(list.size() - 1);  
11         System.out.println(set); // java語言程式設計  
12         System.out.println(list);  
13         list.get(list.size()); //IndexOutOfBoundsException  
14     } 
複製程式碼複製程式碼
 1 
            
           

相關推薦

集合CollectionList

1.什麼是集合儲存物件的容器,面嚮物件語言對事物的體現都是以物件的形式,所以為了方便對多個物件的操作,儲存物件,集合是儲存物件最常用的一種方式。集合的出現就是為了持有物件。集合中可以儲存任意型別的物件,而且長度可變。在程式中有可能無法預先知道需要多少個物件,那麼用陣列來裝物件

集合--Collection接口&&叠代器

lis trees 基本數據 接口 print 遍歷集合 iter 4.0 amp /* * 集合的頂層接口--Collection接口 * 添加 * add() * addAll() * * 遍歷集合 * iterator() 叠代器 * * 刪

List List

程式碼中經常發現有List< super T>、Set的宣告,是什麼意思呢? < super T>表示包括T在內的任何T的父類,< extends T>表示包括T在內的任何T的子類,下面我們詳細分析一下兩種萬用字元具體的區別。 exten

集合CollectionList(一)

一.陣列和集合的區別二.集合的結構三.四.集合的遍歷Collection c=new ArrrayList();//建立集合 //新增元素 c.add("helleo"); c.add("haokan"); Object[] obj=c.toArray();//集合轉變成陣列

Java集合CollectionList、Set、Map使用

Java集合排序及java集合類詳解 (Collection, List, Set, Map) 摘要內容 集合是Java裡面最常用的,也是最重要的一部分。能夠用好集合和理解好集合對於做Java程式的開發擁有無比的好處。本文詳細解釋了關於Java中的集合是如何實現

Java中List,SetMap及其區別

內部 特殊 set contain 快速查找 簡單 rar dset 維護 Java中的集合包括三大類,它們是Set(集)、List(列表)和Map(映射),它們都處於java.util包中,Set、List和Map都是接口,它們有各自的實現類。Set的實現類主要有Hash

java中List的用法例項

的用法List包括List介面以及List介面的所有實現類。因為List介面實現了Collection介面,所以List介面擁有Collection介面提供的所有常用方法,又因為List是列表型別,所以List介面還提供了一些適合於自身的常用方法,如表1所示。表1 List介面定義的常用方法及功能從表1可以看

Android layer-list的屬性使用(陰影、邊框效果)

layer-list用於多個圖層堆疊,可以完成陰影效果 <?xml version="1.0" encoding="utf-8"?> <layer-list xmlns:android="http://schemas.android.com/

JDK中集合CollectionList的原始碼解讀配合大神的一起看,秒懂。

大神總結的目錄:http://www.cnblogs.com/skywang12345/p/3323085.html(轉載),僅供個人學習,如有抄襲請包容(我也忘了cry....) 一、    總體架構 1)  簡介 Java集合是java提供的工具包,包含了常用的資料

Map、Set、List集合差別及聯絡

前言: 陣列Array和集合的區別: 1、陣列是大小固定的,並且同一個陣列只能存放型別一樣的資料(基本型別/引用型別) 2、

R數據可視化----ggplot2之標度、坐標軸圖例

abs 調整 所有 不同的 size n) 默認 表達 idt 標度控制著數據到圖形屬性的映射,當有需要時,ggplot2會自動添加一個默認的標度。我們確實可以在不了解標度運行原理的情況下畫出許多圖形,但理解標度並學會如何操縱它們則將賦予我們對圖形更強的控制能力。 每一種圖

xargs exec

linux xargs exec cpxargs 和 exec詳解 exec主要和find一起配合使用,xargs比exec用的地方要多。xargs應用把管道符前面的輸出作為xargs後面的命令的輸入。好處在於可以簡化步驟。常常和find一起使用,#find . -mtime +10 |xargs rm

pjlib深入剖析使用

china lis sim framework 非線程安全 還要 cts 線程本地存儲 獲取 1. PJSIP簡介 PJSIP的實現是為了能在嵌入式設備上高效實現SIP/VOIP.其主要特征包括: 1).極具移植性.(Extremely portable)

java PatternMatcher

而且 建議 exc regex 示例 aabb 工廠 sta 數字 結論:Pattern與Matcher一起合作.Matcher類提供了對正則表達式的分組支持,以及對正則表達式的多次匹配支持. 單獨用Pattern只能使用Pattern.matcher(String reg

mapreduce shuffle sort

改變 struct 堆內存 傳輸 工具 默認 臨時 arc 快速排序 MapReduce 框架的核心步驟主要分兩部分:Map 和Reduce。當你向MapReduce 框架提交一個計算作業時,它會首先把計算作業拆分成若幹個Map 任務,然後分配到不同的節點上去執

Redis系列--7、RedisTemplate Serializer

redistemplate serializer詳解<bean id="redisTemplate" class="org.springframework.data.redis.core.StringRedisTemplate"> <property name="connectionF

HTML embed標簽使用方法屬性

利用 是否 parent als ase sig 默認 eve sel 一、基本語法 代碼如下: embed src=url 說明:embed可以用來插入各種多媒體,格式可以是 Midi、Wav、AIFF、AU、MP3等等,Netscape及新版的IE 都支持。url為

es6 map()filter()【轉】

低版本 window get 簡約 push foreach 沒有 數值 length 原文地址:http://www.zhangxinxu.com/wordpress/2013/04/es5%e6%96%b0%e5%a2%9e%e6%95%b0%e7%bb%84%e

robots.txt的語法寫法

html txt 訪問 isa 字符 包含 all 屏蔽 有道 robots.txt是一個純文本文件,是搜索引擎蜘蛛爬行網站的時候要訪問的第一個文件,當蜘蛛訪問一個站點時,它會首先檢查該站點根目錄下是否存在robots.txt,如果存在,搜索機器人就會按照該文件中的內容來確

IEnumerableIEnumerator

col 列表框 詳細講解 分配 false 叠代 http 數據 應該 IEnumerable接口是非常的簡單,只包含一個抽象的方法GetEnumerator(),它返回一個可用於循環訪問集合的IEnumerator對象。IEnumerator對象有什麽呢?它是一個真正的集