集合——>心德總結 – JAVA編程語言程序開發技術文章

一、集合類與數據容器
1、集合與數組的特點:
集合隻存儲對象,是一個容器,用於存放對象,長度可變,要存儲基本數據需先轉換為對象
數組可存對象,也可是基本數據,長度不可變,是一個容器
2、 Java用集合類來容納不同種類的數據,這種容納是建立在未知的基礎上,即Java要用有限種類的集合類,來容納無限種類的數據對象。
3、 分類:Java的集合類可以分為三類:集、列表和映射
(1)集(Set):和數學上的“集合”概念相對應,是最簡單的一種集合。
Set集合中不區分元素的順序,因此也就不記錄元素的加入順序。
‚Set集合中不包含重復元素,即任意的兩個元素e1和e2都有e1.equals(e2)=false,並且最多有一個null元素。
(2)列表(List)
List列表區分元素的順序,即List列表能夠精確的控制每個元素插入的位置,用戶能夠使用索引(元素在List中的位置)來訪問List中的元素。List允許包含重復元素,可以通過角標操作。
(3)映射:保存的是“鍵-值”對信息,即Map中存儲的每個元素都包括起標識作用的“鍵”和該元素的“值”兩部分,查找數據時不需提供相應的“鍵”,才能查找到該“鍵”所映射的“值”。因此,Map集合中不能包含重復的“鍵”,並且每個“鍵”最多隻能映射一個值。
二、Collection接口
Java.util.Collection接口是最基本的集合接口,是根接口,方法不能實現,隻能在子類中實現。定義瞭集合操作的普遍方法。
public booleanadd(E e) :向集合添加一個元素,成功返回true,否則返回false,子接口中此方法發生瞭變化,set接口中添加重復元素時會被拒絕並返回false,而list接口則會接受重復元素並返回true。
public boolean addAll(Collection<?extends E> c) :將指定集合中的所有元素都添加到此集合中
public voidclear():移除此集合中的所有元素(可選操作)。
public booleancontains(Object o) :如果此集合包含指定的元素,則返回 true。
public booleancontainsAll(Collection<?> c) :如果此集合包含指定集合中的所有元素,則返回 true。
public booleanequals(Object o) :比較此集合與指定對象是否相等。
public inthashCode() :返回此集合的哈希碼值。
public booleanisEmpty() :如果此集合不包含元素,則返回 true。
publicIterator<E> iterator() :返回在此集合的元素上進行迭代的迭代器。
public booleanremove(Object o) :從此集合中移除指定元素的單個實例,如果存在的話
public booleanremoveAll(Collection<?> c) :移除此集合中那些也包含在指定集合中的所有元素
public booleanretainAll(Collection<?> c) :僅保留此集合中那些也包含在指定集合的元素
public intsize() :返回此集合中的元素個數。
public Object[]toArray() :返回集合中所有元素的數組。
需註意:
Java SDK不提供直接繼承自Collection的類,Java SDK提供的類都是繼承自Collection的“子接口”。
Collection接口有多個子接口,其中最重要的兩個java.util.Set和java.util.List分別描述集Set和列表List。
三、列表
java.util.List接口描述的是列表結構,允許程序員對列表元素的插入位置進行精確控制,並增加瞭根據元素索引來訪問元素、搜索元素等功能。在繼承父接口Collection的基礎之上,List接口新增的相應方法:
void add(intindex, E element) 在列表的指定位置插入指定元素
boolean add(E e)在列表的指定位置插入指定元素
E remove(intindex) 刪除指定索引號元素
booleanremove(Object o) 刪除第一個指定內容的元素
E get(int index)返回列表中指定位置的元素
int size() 返回列表中的元素數
intindexOf(Object obj) 如找到指定元素,返回索引值,否則返回—1
List<E>subList(int fromIndex, int toIndex) 返回列表中指定的fromIndex(包括)和toIndex(不包括)之間的部分視圖。
void clear()從列表中移除所有元素
Java.util.List接口的實現類有多個,分別體現瞭列表的不同分化形式。
ArrayList
Vector
Stack
LinkedList
四、Vector類:(底層數據結為數組,存儲,查找慢)
構造方法:
Vector() :構造一個空向量,使其內部數據數組的大小為 10,其標準容量增量為零。
Vector(Collection<? extends E> c) :構造一個包含指定 collection 中的元素的向量,這些元素按其 collection 的迭代器返回元素的順序排列。
Vector(int initialCapacity) :使用指定的初始容量和等於零的容量增量構造一個空向量。
Vector(int initialCapacity, intcapacityIncrement) :使用指定的初始容量和容量增量構造一個空的向量。
方法:
void addElement(E obj) :向Vector中添加元素
void insertElementAt(E obj, int index) :在指定索引處添加元素
void setElementAt(E obj, int index) :替換指定所引出元素
boolean removeElement(Object obj) : 刪除指定隊象元素
voidremoveElementAt(int index) :刪除指定索引的元素
void removeAllElements() :刪除所有元素 E elementAt(int index)
int size() :獲取當前Vector的長度。
五、先進後出的Stack類(堆棧)
Stack是Vector類的子類,特點:“後進先出”(Last In First Out)類型的容器,即最後一個被“壓(push)”進堆棧中的對象,會被第一個“彈(pop)”出來。
隻可以從堆棧的頂端,執行從堆棧裡彈出元素和壓入元素的動作
構造方法
Stack() :用於創建支持“後進先出”訪問方式的對象
方法
E peek() 返回棧頂元素,但沒有彈出棧頂元素
E pop() 彈出棧頂元素,並返回其中的對象。
E push(E item) 向堆棧頂端壓入item對象,同時將item對象返回。
boolean empty() 判斷堆棧是否為空,如果該堆棧為空,返回true,反之返回false。
Push和pop是兩個重要方法,反映瞭堆棧“後進先出”的重要特性
六、LinkedList類
構造方法:
LinkedList() :構造一個空列表。
LinkedList(Collection<? extends E> c):構造一個包含指定 collection 中的元素的列表,這些元素按其 collection 的迭代器返回的順序排列。
方法:
void addFirst(E e) :將指定元素插入此列表的開頭。
void addLast(E e) :將指定元素添加到此列表的結尾。
E getFirst() :返回此列表的第一個元素。
E getLast() :返回此列表的最後一個元素。
E removeFirst() :移除並返回此列表的第一個元素。
E removeLast() :移除並返回此列表的最後一個元素。
boolean offerFirst(E e) :在此列表的開頭插入指定的元素。
boolean offerLast(E e) :在此列表末尾插入指定的元素。
E peekFirst() :獲取但不移除此列表的第一個元素;如果此列表為空,則返回 null。
E peekLast() :獲取但不移除此列表的最後一個元素;如果此列表為空,則返回 null
E pollFirst() :獲取並移除此列表的第一個元素;如果此列表為空,則返回 null。
E pollLast() :獲取並移除此列表的最後一個元素;如果此列表為空,則返回 null。
七、ArrayList類:
構造方法:
ArrayList() :構造一個初始容量為 10 的空列表。
ArrayList(Collection<? extends E> c) :構造一個包含指定 collection 的元素的列表,這些元素是按照該 collection 的迭代器返回它們的順序排列的。
ArrayList(int initialCapacity) :構造一個具有指定初始容量的空列表。
方法:
boolean add(E e) :將指定的元素添加到此列表的尾部。
void add(int index, E element) :將指定的元素插入此列表中的指定位置。
booleanaddAll(Collection<? extends E> c) : 按照指定 collection 的迭代器所返回的元素順序,將該 collection 中的所有元素添加到此列表的尾部。
boolean addAll(int index, Collection<?extends E> c) :從指定的位置開始,將指定 collection 中的所有元素插入到此列表中。
voidclear() :移除此列表中的所有元素。
Object clone() :返回此 ArrayList 實例的淺表副本。
boolean contains(Object o) :如果此列表中包含指定的元素,則返回 true。
voidensureCapacity(int minCapacity) :如有必要,增加此 ArrayList 實例的容量,以確保它至少能夠容納最小容量參數所指定的元素數。
Eget(int index) :返回此列表中指定位置上的元素。
intindexOf(Object o) :返回此列表中首次出現的指定元素的索引,或如果此列表不包含元素,則返回 -1。
boolean isEmpty() :如果此列表中沒有元素,則返回 true
intlastIndexOf(Object o) :返回此列表中最後一次出現的指定元素的索引,或如果此列表不包含索引,則返回 -1。
Eremove(int index) :移除此列表中指定位置上的元素。
boolean remove(Object o) :移除此列表中首次出現的指定元素(如果存在)。
protected void removeRange(int fromIndex, int toIndex) :移除列表中索引在 fromIndex(包括)和 toIndex(不包括)之間的所有元素。
Eset(int index, E element) :用指定的元素替代此列表中指定位置上的元素。
intsize() :返回此列表中的元素數。
Object[] toArray() :按適當順序(從第一個到最後一個元素)返回包含此列表中所有元素的數組。
<T> T[]toArray(T[] a) :按適當順序(從第一個到最後一個元素)返回包含此列表中所有元素的數組;返回數組的運行時類型是指定數組的運行時類型。
voidtrimToSize() :將此 ArrayList 實例的容量調整為列表的當前大小。
實現瞭Set接口的類HashSet
“基於散列表”的檢測重復元素的策略:HashSet裡的元素值同這個元素在Set裡所存放的索引位置有個對應關系(散列函數),在HashSet裡插入元素前,可根據這個元素值和對應關系,計算出這個元素在HashSet裡的插入位置,如果在這個位置裡(或位置周圍)已經存在瞭待插入元素的值,則不能插入。
構造方法
HashSet()
HashSet(<E>c)
其他方法
booleancontains(Object o) 判斷是否存在指定元素
HashSet類的綜合應用。
Set<String> set = newHashSet<String>();
set.add("One"); set.add("One");
System.out.println(set.size()); //輸出元素個數為:1
set.add(“Two”); System.out.println(set.size()); // 元素個數:2
System.out.println(set.contains(“One”)); //true,包含元素“One”
第一類集合有著共同的特性:它們存儲的對象都是一元的(線性的),隻不過存儲的方式和使用的數據結構不同,以Collection為基類–封裝瞭線性表的插入、刪除等基本操作。
List接口和Set接口都是Collection的子接口
實現List接口:基於線性鏈表來存放數據的,例如Vector
實現Set接口:它們不允許有重復的元素,例如HashSet。
日常生活中,經常需要把復雜對象用索引形式管理的情況。
在Java中,專門建立以Hashtable為代表的“鍵-值”對類型對象,“鍵”–索引信息,而“值” –同索引值相對應的信息。
為什麼要使用“鍵-值”對型的數據結構
原因:便於信息檢索,提高在大數據量裡檢索信息的速度。
工作原理
(1)如果要從其中查詢指定數據的話,不得不依次遍歷這個數組,這樣效率會很低。
(2)換一種思路:將10存入數組不是插入在第一個空閑空間裡

發佈留言