1. 程式人生 > >Java中集合介面Collection,集合List,Set

Java中集合介面Collection,集合List,Set

集合的特點:

1.集合的長度是可變的

2.集合只能儲存物件

3.集合不可以儲存基本資料型別

陣列與集合的區別:

1.陣列的長度是固定的,集合的長度是可變的

2.陣列只能儲存基本資料型別,集合只能儲存物件

注意:Java中集合介面和實現類都位於java.unitl這個工具包下,包含 collection框架,遺留的collection類,事件模型,日期和時間,國際化和各種工具類

集合框架:集合容器中因為內部資料結構不同,有多種具體容器,不斷向上抽取,形成了集合框架。


一.集合框架的頂層是collection介面

這個介面中定義集合的共性方法:

1.新增

boolean add(E  e) 將一個元素新增進去

boolean addAll(collection e)將指定的collection中的元素新增到此collection中 

2.刪除

boolean remove(Object o)  刪除單個元素

boolean removeAll(collection e)將此collection中也包含在指定collection中的所有元素刪除

void clear()      將集合中的元素進行清空

3.判斷

boolean contains(Object o)   判斷物件是否在該集合中

boolean containsAll(conllection c) 判斷集合引數是否存在於集合中

boolean isEmpty()     判斷集合中是否存在元素

4.獲取

int size()   獲取集合中元素的個數

Iterator  iterator() 集合取出元素的方式,稱為迭代器

5.其他

boolean retainAll(collection c)  僅僅保留此collection中那些也包含在collection引數中的元素(取交集)

Object []  toArray()   將集合轉換成陣列
二.collection中最常用的倆個子介面
1.List<E>介面

特點:有序的集合(存入順序和取出順序一致) ,允許多個null值及重複元素,有元素索引 

常用方法(共性特點都可以操縱角標):

1.1.新增

void add(index,Element)         在列表插入指定元素

void add(index,collection)  

1.2.刪除

Object remove(index)    刪除指定位置的元素

1.3.修改

Object set(index,element)  更換指定位置的元素

1.4.獲取   

Object get(index)    獲取指定位置的元素

int indexOf(Element e) 返回指定元素的角標

int  lastindexOf(Element e) 返回該指定元素在集合中最後的索引,不包含時,返回-1

1.5.其他

ListIterator listiterator()                          通過迭代器取出List集合中的元素

ListIterator listiterator(int index)                 從指定位置(包含指定位置)往後取出List集合的元素

1.6實現List介面的類

1.6.1  vector

內部的資料結構是 陣列,支援同步(執行緒安全),增刪查都很慢

1.6.2 ArrayList

內部的資料結構是 陣列   不支援同步(執行緒不安全),可以自己新增同步鎖  查詢很快

1.6.3 LinkedList

內部的資料結構是 連結串列  不支援同步(執行緒不安全),可以自己新增同步鎖  增刪很快

注意:該介面下的實現類的contains()方法是equals()一個方法,

2.Set<E>介面

無序的集合,最多支援一個null值,不允許重複元素,沒有元素索引

set中的常用方法與collection中的一致,上面已經寫過

2.1實現Set<E>介面的類

2.1.1 HashSet

內部資料結構是雜湊表  ,不支援同步(執行緒不安全),基於HashMap實現

hashSet儲存元素的原理:

1.首先通過hashCode()方法確定元素位置

2.再次通過equals()方法確定元素內容是否重複

所以,在使用的過程中,有必要的情況下,要重寫hashCode()方法和equals()方法

注意:該介面下的實現類的contains()方法是hashCode()和equals()兩個方法,remove()方法也是一樣

LinkedHashSet,繼承於HashSet,它與HashSet是不同的,相比於HashSet,它是有序的,因為LinkedHashSet的內部資料結構是一個雙向連結串列,此連結串列定義了迭代順序,即按照Set的插入順序進行迭代,使用它可以生成一個Set副本,並且與原Set無關

2.2 TreeSet  基於TreeMap實現

內部結構是二叉樹,不支援同步,支援對元素的自然排序或者根據建立Set時的提供comparator進行排序

TreeSet判斷元素唯一性,是根據比較方法中的返回值:0==等於    1==大於    -1===小於

TreeSet集合對元素進行排序的方式

1.元素的自然排序,讓元素自身具有比較功能,元素實現comparable介面,覆蓋compareTo()方法,這種方式,是對元素的自       然排序,這是Java中一種預設排序方式

2.集合的自然排序,讓集合自身具有比較功能,建立類實現comparator介面,覆蓋compare()方法,然後將該物件傳遞給建立TreeSet的建構函式;該方式的使用場景:物件中不具備自然排序的方式,物件中的自然排序方式不適合的時候