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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

java集合总结_java集合小总结

發(fā)布時(shí)間:2024/8/23 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java集合总结_java集合小总结 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

java集合就是一個(gè)容器。

1.???? 集合概述

l???????為了保存不確定的數(shù)據(jù),或者對(duì)象,以及保存具有映射關(guān)系的數(shù)據(jù)。

l???????所有的集合類(lèi)都位于java.util包下。

1.1.?什么是集合,有什么特點(diǎn)?

面向?qū)ο笳Z(yǔ)言對(duì)事物的體現(xiàn)都是以對(duì)象的形式存在,所以為了方便對(duì)多個(gè)對(duì)象的操作,就對(duì)對(duì)象進(jìn)行存儲(chǔ),集合就是存儲(chǔ)對(duì)象最常用的一種方式。

集合只用于存儲(chǔ)對(duì)象,集合長(zhǎng)度是可變的,集合可以存儲(chǔ)不同類(lèi)型的對(duì)象。

1.2.?集合與數(shù)組的區(qū)別(集合特點(diǎn))

首先我們要知道集合與數(shù)組是不同:

其中集合是可變長(zhǎng)度的,集合中用size();

而數(shù)組是固定長(zhǎng)度的,數(shù)組中是用length();

集合是用來(lái)放對(duì)象的,數(shù)組可以存儲(chǔ)基本數(shù)據(jù)也可以存儲(chǔ)引用數(shù)據(jù)類(lèi)型;

有一點(diǎn)需要注意下,如果集合存放基本數(shù)據(jù)類(lèi)型,在存取過(guò)程中會(huì)有個(gè)自動(dòng)裝箱和拆箱

集合可以放任意對(duì)象(引用嘛),但是數(shù)組只能放相同的數(shù)據(jù)類(lèi)型;

對(duì)于如何使用集合,我們先看頂層的方法,然后去調(diào)用底層的子類(lèi)來(lái)實(shí)現(xiàn)具體的功能。

1.3.?集合框架

由于集合內(nèi)部的數(shù)據(jù)結(jié)構(gòu)不同,集合分為多種容器。這些容器不斷的向上抽取,就形成了集合框架。

Collection

|----------List(有序,,元素都有索引(角標(biāo)),元素可以重復(fù))

|--------Vector:基于數(shù)組實(shí)現(xiàn),同步,線程安全。增刪,查詢都慢。

|--------ArrayList:基于數(shù)組實(shí)現(xiàn),不同步,線程不安全,需要手動(dòng)同步,查詢的速度快

|--------LinkedList:基于鏈表實(shí)現(xiàn),不同步,線程不安全,需要手動(dòng)同步,增刪都很快

|----------Set(無(wú)序,元素不可以重復(fù))

|--------HsahSet:基于哈希表實(shí)現(xiàn),不同步的。

|--------LinkedHsahSet

|--------TreeSet:基于二叉樹(shù)實(shí)現(xiàn),不同步的。自然排序,定制排序

Map集合(鍵值對(duì))

|----------TreeMap基于二叉樹(shù),可以排序

|----------HashMap哈希表實(shí)現(xiàn)

Iterator迭代器

|----------Collection每個(gè)集合都有迭代器

|----------ListIterator主要用于List集合迭代,迭代過(guò)程可以操作元素

1.4.?集合常見(jiàn)方法

Collection的常見(jiàn)方法:

1,添加:boolean add(Object obj)://添加元素

booleanaddAll(Collectioncoll)://添加給定集合到當(dāng)前集合

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():將集合轉(zhuǎn)成數(shù)組。

1.5.遍歷集合:迭代器Iterator:

也是集合框架的成員,但它主要用于遍歷集合中的對(duì)象,封裝了各種集合的底層細(xì)節(jié),給集合框架提供了統(tǒng)一的接口。比如,這里舉個(gè)例子。主要有3個(gè)方法:

booleanhashnext();如果仍有元素可以迭代,則返回true

E next()返回迭代的下一個(gè)元素

void remove()移除迭代器返回的最后一個(gè)元素

而對(duì)于map類(lèi)集合有2中方式來(lái)遍歷:

1:keySet()獲取鍵對(duì)應(yīng)的Set集合,然后在用Iterator配合get(Object key)獲取每一個(gè)鍵所對(duì)應(yīng)的值。

2:entrySet()獲取鍵值對(duì)集合,存入Map.Entry集合中,Iterator對(duì)其進(jìn)行迭代,在用getKey()取出鍵,getValue()取出值。

1.6.?集合的一些技巧:

需要唯一嗎?

需要:Set

需要制定順序:

需要:TreeSet

不需要:HashSet

但是想要一個(gè)和存儲(chǔ)一致的順序(有序):LinkedHashSet

不需要:List

需要頻繁增刪嗎?

需要:LinkedList

不需要:ArrayList

l???????看到array:就要想到數(shù)組,就要想到查詢快,有角標(biāo).

l???????看到link:就要想到鏈表,就要想到增刪快,就要想要 add get remove+frist last的方法

l???????看到hash:就要想到哈希表,就要想到唯一性,就要想到元素需要覆蓋hashcode方法和equals方法。

l???????看到tree:就要想到二叉樹(shù),就要想要排序,就要想到兩個(gè)接口Comparable,Comparator 。

2.???????List集合

l???有序(存入和取出的順序一致),元素都有索引(角標(biāo)),元素可以重復(fù)。

l???對(duì)于List,根據(jù)其內(nèi)部結(jié)構(gòu)不同又分為Arraylist、LinkedList、Vector

l???共性特點(diǎn):可以操作角標(biāo)

2.1.List子系

List:

|----Vector:數(shù)組數(shù)據(jù)結(jié)構(gòu),是同步的。增刪,查詢都很慢!已經(jīng)唄ArrayList替代了

|----ArrayList:數(shù)組數(shù)據(jù)結(jié)構(gòu),是不同步的。。查詢的速很度快。

|----LinkedList:鏈表數(shù)據(jù)結(jié)構(gòu),是不同步的。增刪的速度很快。

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);?????????? //返回此列表中第一次出現(xiàn)的指定元素的索引,沒(méi)有返回-1

intlastIndexOf(object);???? //返回此列表中最后一次出現(xiàn)的指定元素的索引,沒(méi)有返回-1

ListsubList(intfrom,intto);????? //獲取子集包含頭不包含尾。

3.???????Set集合

Set集合與Collection基本上一樣,只不過(guò)內(nèi)部元素是無(wú)序的,不允許重復(fù)。Add之前,會(huì)判斷(equals方法)集合中是否包含此元素,如果包含返回true丙存入集合,如果不包含,返回false,不存。

n???????1:HashSet:按hash算法來(lái)存儲(chǔ)集合中的元素,因此具有良好的存取和查找功能。

l???????特點(diǎn):

????????不保證順序。

????????不是同步的

????????集合元素可以是null

l???????判斷元素是否相等

????????判斷hash值是否相等

????????Equals判斷內(nèi)容是否相等

n???????1:TreeSet:按存儲(chǔ)集合中的元素的compare或者比較器,來(lái)判斷是否需添加到集合。

l???????特點(diǎn):

????????自然順序或指定順序。

????????不是同步的

????????集合元素可以是null

l???????判斷元素是否相等

????????判斷hash值是否相等

????????Equals判斷內(nèi)容是否相等

3.1.LinkedHashSet的集合特點(diǎn)

是HashSet的一個(gè)子類(lèi),也是根據(jù)元素的hash值來(lái)判斷元素位置,但同時(shí)使用鏈表維護(hù)元素次序。由于需要維護(hù)次序,所以性能略低于hashSet,但在迭代訪問(wèn)集合元素時(shí),將有很好的性能。【有序不許重復(fù)】

3.2.?常用共性方法

1:增加元素:

booleanadd(Object obj);//添加一個(gè)元素,在末尾位置

booleanaddAll(Collection c);//添加一個(gè)集合,在末尾位置

2:刪除元素:

booleanremove(Object obj);//刪除一個(gè)元素。

booleanremoveAll(Collection c)//刪除包含c的元素。

voidclear();//移除此集合的的所有元素

3:判斷元素:

booleancontains(Object obj)//判斷是否包含某個(gè)元素。

booleancontainsAll(Collection c);//在此集合中包含集合c中的所有元素

booleanisEmpty();//判斷是否為空集合。

4:獲取元素:

intsize();//獲取size大小。

Iteratoriterator();//迭代器,用于取出元素的。配合it.next()和hasNext()組合使用。

3.3.Hash表確定元素是否相同

1:判斷兩個(gè)原素的hash值是否相同,如果相同個(gè),判斷兩個(gè)內(nèi)容是否相同

2:判斷hash值相同,之前這塊不是很理解,后來(lái)java培訓(xùn)學(xué)習(xí)時(shí)突然就想通了,其實(shí)是判斷hashCode()是否相同,判斷內(nèi)容用equals()方法。

n???????hashCode規(guī)則:

l???????同一個(gè)對(duì)象多次調(diào)用返回的hashCode值相等。

l???????2個(gè)對(duì)象euqals方法比較返回true時(shí),他們hashCode也應(yīng)相等。

l???????對(duì)象中用作equals方法比較標(biāo)準(zhǔn)的field都應(yīng)用來(lái)計(jì)算hashCode值

n???????重寫(xiě)hashDode規(guī)則:

l???????把每個(gè)對(duì)象的有意義的field,計(jì)算出一個(gè)hashcode值。

l???????用第一步計(jì)算出來(lái)的多個(gè)hashCode來(lái)組合成一個(gè)值返回。

l???????為了避免相加產(chǎn)生偶然相等。可以通過(guò)hashcode*一個(gè)質(zhì)數(shù)相加返回。

例如:

Return name.hashCode*11 + age.hashCode*7;

練習(xí):請(qǐng)定義ArryaList集合,并存儲(chǔ)Person對(duì)象。如newPerson("lisi",20);

并取出。將姓名和年齡打印出來(lái)。

3.4.TreeeSet排序的2種方式

1,??讓對(duì)象本身具備可比性。實(shí)現(xiàn)comparable接口的comparTo()方法。

2,??創(chuàng)建比較器。比較器實(shí)現(xiàn)Compartor接口,Compar()方法作為T(mén)reeSet對(duì)象的構(gòu)造參數(shù)象傳入。注意泛型。

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好,(主要表現(xiàn)在添加、刪除、查詢等),因?yàn)門(mén)reeSet需要二外的紅黑樹(shù)來(lái)維護(hù)次序。只有當(dāng)需要排序時(shí)才使用TreeSet。

HashSet有一個(gè)子類(lèi),LinkedSet對(duì)于普通測(cè)插入刪除這個(gè)要比HashSet要慢些。因?yàn)橐S護(hù)鏈表。

3.6.?安全問(wèn)題解決

通常在創(chuàng)建是就調(diào)用Collections工具類(lèi)的synchronizedSortedSet方法來(lái)包裝集合。

例如

Sorted s =new Collections.synchronizedSortedSet(new Treeset(…))

4.???????Map集合

Map集合用于存儲(chǔ)那些有映射關(guān)系的數(shù)據(jù);

Map也成為雙列集合。

Map存的是一對(duì)元素:一個(gè)Key,一個(gè)Value。Key、Value可以使任何引用類(lèi)型的數(shù)據(jù)。其中Map的Key不允許重復(fù)。

4.1.Map集合子體系

Map:

|----HashMap:哈希表結(jié)構(gòu);Key唯一;不同步;允許null作為鍵,值。hashCode()、equals()確定唯一

|----HashTable:哈希表結(jié)構(gòu);數(shù)據(jù)唯一;同步低效的。不允許null作為鍵,null作為值。

|----TreeMap:二叉樹(shù)結(jié)構(gòu);Key唯一;可排序;不同步但高效;允許null作為鍵,null作為值。

補(bǔ)充:

4.2.Map常用方法

1添加元素:

·value put(key,value):返回前一個(gè)和key關(guān)聯(lián)的值,如果沒(méi)有返回null.

2,刪除元素。

void? clear():清空集合。

value remove(key):根據(jù)指定的key翻出這個(gè)鍵值對(duì)。

3,判斷元素。

boolean containsKey(key):判斷是否包含給定的key

boolean containsValue(value):判斷是否包含給定的value

boolean isEmpty();判斷集合是否為空

4獲取元素。

value get(key):通過(guò)鍵獲取值,如果沒(méi)有該鍵返回null。可以用來(lái)來(lái)判斷是否包含指定鍵。

int size():獲取鍵值對(duì)的個(gè)數(shù)。

4.3.Collection和Collections

collection是集合框架的頂層接口,集成了一些集合的共性方法;添加、刪除、修改、查詢、判斷等。下分為list和set兩個(gè)分支,其又各自有體系,其

中l(wèi)ist有序,可以重復(fù)的,有分為vector arraylistlinkedlist(各個(gè)數(shù)據(jù)結(jié)構(gòu),特點(diǎn))

其中set是無(wú)序不許重復(fù)的,有分為。hashset和treeset(各個(gè)數(shù)據(jù)結(jié)構(gòu),特點(diǎn))

Collections是一個(gè)對(duì)collection操作的工具類(lèi),提供的都是靜態(tài)方法(查找,排序,反轉(zhuǎn),加鎖)

總結(jié)

以上是生活随笔為你收集整理的java集合总结_java集合小总结的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。