java集合总结_java集合小总结
java集合就是一個容器。
1.???? 集合概述
l???????為了保存不確定的數據,或者對象,以及保存具有映射關系的數據。
l???????所有的集合類都位于java.util包下。
1.1.?什么是集合,有什么特點?
面向對象語言對事物的體現都是以對象的形式存在,所以為了方便對多個對象的操作,就對對象進行存儲,集合就是存儲對象最常用的一種方式。
集合只用于存儲對象,集合長度是可變的,集合可以存儲不同類型的對象。
1.2.?集合與數組的區別(集合特點)
首先我們要知道集合與數組是不同:
其中集合是可變長度的,集合中用size();
而數組是固定長度的,數組中是用length();
集合是用來放對象的,數組可以存儲基本數據也可以存儲引用數據類型;
有一點需要注意下,如果集合存放基本數據類型,在存取過程中會有個自動裝箱和拆箱
集合可以放任意對象(引用嘛),但是數組只能放相同的數據類型;
對于如何使用集合,我們先看頂層的方法,然后去調用底層的子類來實現具體的功能。
1.3.?集合框架
由于集合內部的數據結構不同,集合分為多種容器。這些容器不斷的向上抽取,就形成了集合框架。
Collection
|----------List(有序,,元素都有索引(角標),元素可以重復)
|--------Vector:基于數組實現,同步,線程安全。增刪,查詢都慢。
|--------ArrayList:基于數組實現,不同步,線程不安全,需要手動同步,查詢的速度快
|--------LinkedList:基于鏈表實現,不同步,線程不安全,需要手動同步,增刪都很快
|----------Set(無序,元素不可以重復)
|--------HsahSet:基于哈希表實現,不同步的。
|--------LinkedHsahSet
|--------TreeSet:基于二叉樹實現,不同步的。自然排序,定制排序
Map集合(鍵值對)
|----------TreeMap基于二叉樹,可以排序
|----------HashMap哈希表實現
Iterator迭代器
|----------Collection每個集合都有迭代器
|----------ListIterator主要用于List集合迭代,迭代過程可以操作元素
1.4.?集合常見方法
Collection的常見方法:
1,添加:boolean add(Object obj)://添加元素
booleanaddAll(Collectioncoll)://添加給定集合到當前集合
2,刪除:boolean remove(object obj)://刪除元素
booleanremoveAll(Collectioncoll);
void clear();//清空集合
3,判斷:boolean contains(object obj)://是否包含指定元素
booleancontainsAll(Colllectioncoll);//是否包含給定集合
booleanisEmpty():判斷集合中是否有元素。
4,獲取:int size():
Iterator iterator():取出元素的方式:迭代器。
5,其他:booleanretainAll(Collection coll);取交集。
Object[] toArray():將集合轉成數組。
1.5.遍歷集合:迭代器Iterator:
也是集合框架的成員,但它主要用于遍歷集合中的對象,封裝了各種集合的底層細節,給集合框架提供了統一的接口。比如,這里舉個例子。主要有3個方法:
booleanhashnext();如果仍有元素可以迭代,則返回true
E next()返回迭代的下一個元素
void remove()移除迭代器返回的最后一個元素
而對于map類集合有2中方式來遍歷:
1:keySet()獲取鍵對應的Set集合,然后在用Iterator配合get(Object key)獲取每一個鍵所對應的值。
2:entrySet()獲取鍵值對集合,存入Map.Entry集合中,Iterator對其進行迭代,在用getKey()取出鍵,getValue()取出值。
1.6.?集合的一些技巧:
需要唯一嗎?
需要:Set
需要制定順序:
需要:TreeSet
不需要:HashSet
但是想要一個和存儲一致的順序(有序):LinkedHashSet
不需要:List
需要頻繁增刪嗎?
需要:LinkedList
不需要:ArrayList
l???????看到array:就要想到數組,就要想到查詢快,有角標.
l???????看到link:就要想到鏈表,就要想到增刪快,就要想要 add get remove+frist last的方法
l???????看到hash:就要想到哈希表,就要想到唯一性,就要想到元素需要覆蓋hashcode方法和equals方法。
l???????看到tree:就要想到二叉樹,就要想要排序,就要想到兩個接口Comparable,Comparator 。
2.???????List集合
l???有序(存入和取出的順序一致),元素都有索引(角標),元素可以重復。
l???對于List,根據其內部結構不同又分為Arraylist、LinkedList、Vector
l???共性特點:可以操作角標
2.1.List子系
List:
|----Vector:數組數據結構,是同步的。增刪,查詢都很慢!已經唄ArrayList替代了
|----ArrayList:數組數據結構,是不同步的。。查詢的速很度快。
|----LinkedList:鏈表數據結構,是不同步的。增刪的速度很快。
2.2.List常用共性方法
1添加元素:
voidadd(intindex,Eelement);? //指定位置插入元素
void add(index,collection);????? //將給定的集合添加到末尾
2刪除元素:
Object remove(index):????? //刪除指定交表的元素,返被背刪除的
3修改元素:
Objectset(intindex,Eelement);?????? //用指定元素替換列表中指定位置的元素
4獲取元素:
Object get(index);????? //返回列表中指定位置的元素
intindexOf(object);?????????? //返回此列表中第一次出現的指定元素的索引,沒有返回-1
intlastIndexOf(object);???? //返回此列表中最后一次出現的指定元素的索引,沒有返回-1
ListsubList(intfrom,intto);????? //獲取子集包含頭不包含尾。
3.???????Set集合
Set集合與Collection基本上一樣,只不過內部元素是無序的,不允許重復。Add之前,會判斷(equals方法)集合中是否包含此元素,如果包含返回true丙存入集合,如果不包含,返回false,不存。
n???????1:HashSet:按hash算法來存儲集合中的元素,因此具有良好的存取和查找功能。
l???????特點:
????????不保證順序。
????????不是同步的
????????集合元素可以是null
l???????判斷元素是否相等
????????判斷hash值是否相等
????????Equals判斷內容是否相等
n???????1:TreeSet:按存儲集合中的元素的compare或者比較器,來判斷是否需添加到集合。
l???????特點:
????????自然順序或指定順序。
????????不是同步的
????????集合元素可以是null
l???????判斷元素是否相等
????????判斷hash值是否相等
????????Equals判斷內容是否相等
3.1.LinkedHashSet的集合特點
是HashSet的一個子類,也是根據元素的hash值來判斷元素位置,但同時使用鏈表維護元素次序。由于需要維護次序,所以性能略低于hashSet,但在迭代訪問集合元素時,將有很好的性能。【有序不許重復】
3.2.?常用共性方法
1:增加元素:
booleanadd(Object obj);//添加一個元素,在末尾位置
booleanaddAll(Collection c);//添加一個集合,在末尾位置
2:刪除元素:
booleanremove(Object obj);//刪除一個元素。
booleanremoveAll(Collection c)//刪除包含c的元素。
voidclear();//移除此集合的的所有元素
3:判斷元素:
booleancontains(Object obj)//判斷是否包含某個元素。
booleancontainsAll(Collection c);//在此集合中包含集合c中的所有元素
booleanisEmpty();//判斷是否為空集合。
4:獲取元素:
intsize();//獲取size大小。
Iteratoriterator();//迭代器,用于取出元素的。配合it.next()和hasNext()組合使用。
3.3.Hash表確定元素是否相同
1:判斷兩個原素的hash值是否相同,如果相同個,判斷兩個內容是否相同
2:判斷hash值相同,之前這塊不是很理解,后來java培訓學習時突然就想通了,其實是判斷hashCode()是否相同,判斷內容用equals()方法。
n???????hashCode規則:
l???????同一個對象多次調用返回的hashCode值相等。
l???????2個對象euqals方法比較返回true時,他們hashCode也應相等。
l???????對象中用作equals方法比較標準的field都應用來計算hashCode值
n???????重寫hashDode規則:
l???????把每個對象的有意義的field,計算出一個hashcode值。
l???????用第一步計算出來的多個hashCode來組合成一個值返回。
l???????為了避免相加產生偶然相等??梢酝ㄟ^hashcode*一個質數相加返回。
例如:
Return name.hashCode*11 + age.hashCode*7;
練習:請定義ArryaList集合,并存儲Person對象。如newPerson("lisi",20);
并取出。將姓名和年齡打印出來。
3.4.TreeeSet排序的2種方式
1,??讓對象本身具備可比性。實現comparable接口的comparTo()方法。
2,??創建比較器。比較器實現Compartor接口,Compar()方法作為TreeSet對象的構造參數象傳入。注意泛型。
3,??建議用第二種,使用靈活
·???publicstaticvoidmain(String[] args) {
TreeSet? ts=?newTreeSet(newComparator() {
publicintcompare(Person o1, Person o2) {
returno1.getAge()-o2.getAge();
}
});
ts.add(newPerson("mike",28));
ts.add(newPerson("lisi",21));
ts.add(newPerson("zhouqi",29));
ts.add(newPerson("zhaoliu",25));
ts.add(newPerson("wangu",24));
for(Object o: ts) {
Person p = (Person) o;
System.out.println(p.getName() +"\t"+ p.getAge());
}
}
3.5.?選擇HashSet還是TreeSet?
HashSet的性能總是比TreeSet好,(主要表現在添加、刪除、查詢等),因為TreeSet需要二外的紅黑樹來維護次序。只有當需要排序時才使用TreeSet。
HashSet有一個子類,LinkedSet對于普通測插入刪除這個要比HashSet要慢些。因為要維護鏈表。
3.6.?安全問題解決
通常在創建是就調用Collections工具類的synchronizedSortedSet方法來包裝集合。
例如
Sorted s =new Collections.synchronizedSortedSet(new Treeset(…))
4.???????Map集合
Map集合用于存儲那些有映射關系的數據;
Map也成為雙列集合。
Map存的是一對元素:一個Key,一個Value。Key、Value可以使任何引用類型的數據。其中Map的Key不允許重復。
4.1.Map集合子體系
Map:
|----HashMap:哈希表結構;Key唯一;不同步;允許null作為鍵,值。hashCode()、equals()確定唯一
|----HashTable:哈希表結構;數據唯一;同步低效的。不允許null作為鍵,null作為值。
|----TreeMap:二叉樹結構;Key唯一;可排序;不同步但高效;允許null作為鍵,null作為值。
補充:
4.2.Map常用方法
1添加元素:
·value put(key,value):返回前一個和key關聯的值,如果沒有返回null.
2,刪除元素。
void? clear():清空集合。
value remove(key):根據指定的key翻出這個鍵值對。
3,判斷元素。
boolean containsKey(key):判斷是否包含給定的key
boolean containsValue(value):判斷是否包含給定的value
boolean isEmpty();判斷集合是否為空
4獲取元素。
value get(key):通過鍵獲取值,如果沒有該鍵返回null??梢杂脕韥砼袛嗍欠癜付ㄦI。
int size():獲取鍵值對的個數。
4.3.Collection和Collections
collection是集合框架的頂層接口,集成了一些集合的共性方法;添加、刪除、修改、查詢、判斷等。下分為list和set兩個分支,其又各自有體系,其
中list有序,可以重復的,有分為vector arraylistlinkedlist(各個數據結構,特點)
其中set是無序不許重復的,有分為。hashset和treeset(各個數據結構,特點)
Collections是一個對collection操作的工具類,提供的都是靜態方法(查找,排序,反轉,加鎖)
總結
以上是生活随笔為你收集整理的java集合总结_java集合小总结的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: php orm 链式,关于php:雄辩的
- 下一篇: c语言 为什么i%3cn 1,c语言中n