日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Java里的容器 Collection 简介

發布時間:2025/3/20 java 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java里的容器 Collection 简介 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

容器也是Java面試經常問到的問題.? 也是Java編程的其中1個難點.

在一篇文章中很難全部講清楚, 我打算分幾篇逐步介紹.


一.? 什么是容器

1.1 容器的定義

Java里的容器的定義很簡單:

容器(Collection)也稱為集合, 在java中就是指對象的集合.


這里可以看出1個特性:? 容器里存放的都只能是對象. 實際上是存放對象的指針(頭部地址).



1.2 為何需要容器

在編程中我們通常需要將若干個對象進行集中處理.

當然. 通過數組也可以實現此需求.

但是數組也存在兩個硬傷:


1. 數組中元素的元素必須相同.

2. 數組的長度難以擴充


這里解析一下:

假如A是1個類名, 那么

A arr_A[] = new A[10];


標識在內存里分配了1個數組, 數組的長度是10.

首先這個數組的元素只能是A的對象, 這個肯定的了.

假如想擴充這個數組, 那么只能重新建立1個長度更長的數組, 并使用System.arraycopy() 函數把原數組的內容copy到新數組里.

這樣的話十分耗費cpu資源和內存空間.


例子:

package Collection_kng;class A{private int i;public A(int i){this.i = i;}public String toString(){return "" + this.i;} }public class Collect1{public static void f(){A[] arr_A = new A[10];int i;for(i = 0; i < 10; i++){arr_A[i] = new A(i);} A[] arr_A2 = new A[11];System.arraycopy(arr_A,0,arr_A2,0,10);arr_A2[10] = new A(11);for(i = 0; i < 11; i++){System.out.println(arr_A2[i]); } } }
所以講: 對于1個數組, 一旦分配內存, 如果你想改變內存長度, 則效率會很低.


而使用容器的話, 可以解決這個兩個問題.

http://write.blog.csdn.net/postedit/21516075也就是講:? 一個容器可以存放不同類型的對象(實際上是對象的指針),? 而且可以靈活擴充容器的長度.

例子:

public static void g(){ArrayList arr_l = new ArrayList();int i;for(i = 0; i < 10; i++){arr_l.add(new A(i));} arr_l.add(new A(11));for(i = 0; i < 11; i++){System.out.println(arr_l.get(i)); } }

二.? 容器的分類

在數學上, 我們可以把容器分為三種.

1.集(Set)

???? Set相當于數學上的集合, Set中的所有元素是無序的, 而且不允許出現重復的元素.


2.列表(List)

???? List相當于代數里的隊列, 列表的元素是有序的, 而且允許包含重復成員.

??? 當然, 在java中List也可以分為數組列表(ArrayList)和鏈表(LinkedList), 它們兩者的使用方法類似, 但是內存存儲機制是不同的.


3.映射(Map)

??? Map保存所謂的'鍵值對'(Key - Value)信息, 映射中不能出現重復的鍵(key), 每個鍵最多只能映射一個值.


在java中, sun公司為上面三個容器類型設計了三個對應的接口(interface), 這個三個接口分別是 Set List Map.


框架圖如下:



可以見到, 對于Set來講, Set接口繼承了Collection接口,? HashSet這個容器(類)實現了Set接口.

而ArrayList和 LinkedList都實現了List接口, List接口也是繼承自Collection接口.


而HashMap容器則是實現了Map接口, 而Map接口并不繼承與Collection接口哦.


由此看出, Java里的容器類是基于接口(interface)構建的.

* Collection 定義了存取一組對象的方法, 其子接口Set和List分別定義了存儲方式.

* Map接口定義了存儲(key-value)映射對的方法.


很多時候, 大家還會見到另1中容器Vector, 其實Vector也是List容器一種, 但是Vector支持線程同步(里面的方法都是sycronized的), 也就是允許多個線程同時操作1個Vector容器而不丟失數據.

而Arraylist并不是同步的.



三.? 容器的若干個常用的方法

容器作為1個類, 當然有若干個常用的成員方法, 為了敘述方便, 先介紹這一點.

3.1 int size();

返回Collection中的元素個數.

3.2 boolean containsAll(collection c);

判斷1個容器是否包含另1個容器的所有元素, 這里的元素指的的是對象的指針, 也就是對象的本身.

3.3 boolean add(Object e);

把1個對象添加到容器中, 這個方法是每種容器必有的方法.

3.4 boolean remove(Object e);

移除容器中首次出現的制定對象, 因為List容器根據次序不同允許存在重復的對象

3.5 get(int index);

獲得容器中第index個元素, 這個方法在List容器中十分常用, 但是不并適用于Set容器, 因為Set容器的元素是無序的.

3.6 Iterator iterator();

一些無序的容器很難通過循環來遍歷元素, 這時我們可以利用迭代器來遍歷容器元素.

3.7 Object[] toArray();

容器不是數組, 不能用下標來訪問容器的元素, 這個方法可以返回1個包含容器所有元素的數組.

3.8 重寫容器元素的toString()方法

很多時候, 我們需要循環輸出容器元素的對象.

例如:

for(...){System.out.println(arr1.get(i)); }

注意利用get()方法返回的是1個對象.

而println方法是輸出對象的toString()方法.?? toString()方法在基類(Object)中被定義成輸出對象的類名+hashcode().?

而很多時候我們需要的是輸出對象的其他有用信息(例如關鍵成員的值)

所以強烈建議:

?? 為所有有可能放入容器的類重寫toString()方法.


四.? Collections 類

上面提到了, Collection其實是1個接口, 但是Java里也存在1個類叫Collections,? 而這個Collections也是跟容器有關的.


我們常用的容器, 例如Arraylist, HashSet, Linkedlist等都是基于Collection接口實現的.

所以 Collections并不是上述容器的超類.


實際上, 在java里的容器(例如Arraylist, Linklist)類只提供了一些簡單的操作方法, 如add(), get(), size()等.

而一些復雜的功能, 例如排序(sort), 倒置(reverst),則沒用提供.


所以Java提供了另1個類Collections, 集合了很多隊容器進行復雜操作的靜態方法. 這個就是Collections類的意義.


下面列舉若干Collections類的常用方法


4.1 void sort(List);

對List容器內的元素排序, 前提是容器內元素的類已經實現Comparable 接口(可以比較的)

下一篇文章會詳細提到.


4.2 void Shuffle(List);

對List容器的元素進行隨機排序.


4.3 void reverst(List);

就是傳說中的倒置, 隊List容器內的元素進行逆排序, 一般沒什么用..


4.4 void Fill(List,Object);

把容器內的所有元素都替換為1個制定對象(object)


4.5 void Copy(List dest,List src);

把容器src里的內容復制到dest容器


4.6 int bianrySearch(List,Object);

對于已排序的容器, 利用折半查找法找出制定對象,





































































http://write.blog.csdn.net/postedit/21516075

總結

以上是生活随笔為你收集整理的Java里的容器 Collection 简介的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。