集合框架總結(jié)

1.集合的體系結(jié)構(gòu):

|--Collection(單列集合的根接口)

|--List(子接口):元素是有序的,元素可以重復(fù)。因為該集合體系有索引。

|--ArrayList:底層的數(shù)據(jù)結(jié)構(gòu)使用的是數(shù)組結(jié)構(gòu)。特點:查詢速度很快。但是增刪稍慢。線程不同步(即線程不安全)(存取有序,怎么存怎么取.不能按你想的排序)。

|--因為底層采用數(shù)組的數(shù)據(jù)結(jié)構(gòu),而數(shù)組中的元素在堆內(nèi)存中是連續(xù)分配的,而且有索引,所以查詢快,增刪稍慢

|--在使用迭代器遍歷元素時,不能再使用集合的方法操作集合中的元素

|--調(diào)用集合的contains()或remove()方法時底層會調(diào)用equals方法,如果存入集合的對象沒有實現(xiàn)equals(),

則調(diào)用Object的equals()方法

|--LinkedList:底層使用的鏈表數(shù)據(jù)結(jié)構(gòu)。特點:增刪速度很快,查詢稍慢。線程不同步(線程不安全)。

|--Vector:底層是數(shù)組數(shù)據(jù)結(jié)構(gòu)。線程同步(線程安全)。被ArrayList替代了。因為效率低。

|--Set(子接口):元素是無序(存入和取出的順序不一定一致),元素不可以重復(fù)。

|--HashSet:底層數(shù)據(jù)結(jié)構(gòu)是哈希表。是線程不安全的。不同步。

|--HashSet是如何保證元素唯一性的呢?

|--是通過元素的兩個方法,hashCode和equals來完成。

|--如果元素的HashCode值相同,才會判斷equals是否為true。

|--如果元素的hashcode值不同,不會調(diào)用equals。

|--注意,對于判斷元素是否存在,以及刪除等操作,依賴的方法是元素的hashcode和equals方法。

|--LinkedHashSet特點:可以保證怎么存就怎么取,并且具有上面元素唯一的特性

|--TreeSet:可以對Set集合中的元素進行排序。

|--底層數(shù)據(jù)結(jié)構(gòu)是二叉樹。 保證元素唯一性的依據(jù):compareTo方法return 0.

|--TreeSet排序的第一種方式:讓元素自身具備比較性。元素需要實現(xiàn)Comparable接口,覆蓋compareTo方法。

這種方式也成為元素的自然順序,或者叫做默認順序。

|--TreeSet的第二種排序方式。當(dāng)元素自身不具備比較性時,或者具備的比較性不是所需要的。

這時就需要讓集合自身具備比較性。在集合初始化時,就有了比較方式。

創(chuàng)建一個比較器(實現(xiàn)Comparator接口,重寫compare方法),在創(chuàng)建TreeSet集合時將比較器傳遞給集合.

|--Map集合:該集合存儲鍵值對(雙列集合)。一對一對往里存。而且要保證鍵的唯一性。

|--Hashtable:底層是哈希表數(shù)據(jù)結(jié)構(gòu),不可以存入null鍵null值。該集合是線程同步(線程安全)的。jdk1.0.效率低。

|--HashMap:底層是哈希表數(shù)據(jù)結(jié)構(gòu),允許使用 null 值和 null 鍵,該集合是不同步的(線程不安全)。將hashtable替代,jdk1.2.效率高。

|--TreeMap:底層是二叉樹數(shù)據(jù)結(jié)構(gòu)。不同步。可以用于給map集合中的鍵進行排序。

|--和Set很像。其實,Set底層就是使用了Map集合

|--map集合的兩種取出方式:

|--Set keySet:將map中所有的鍵存入到Set集合。因為set具備迭代器。

所有可以迭代方式取出所有的鍵,在根據(jù)get方法。獲取每一個鍵對應(yīng)的值。

Map集合的取出原理:將map集合轉(zhuǎn)成set集合。在通過迭代器取出。

|--Set> entrySet:將map集合中的映射關(guān)系存入到了set集合中,而這個關(guān)系的數(shù)據(jù)類型就是:Map.Entry

Entry其實就是Map中的一個static內(nèi)部接口。

為什么要定義在內(nèi)部呢?

因為只有有了Map集合,有了鍵值對,才會有鍵值的映射關(guān)系。

關(guān)系屬于Map集合中的一個內(nèi)部事物。而且該事物在直接訪問Map集合中的元素。

2.泛型練習(xí)

編寫一個泛型方法,實現(xiàn)指定位置數(shù)組元素的交換

編寫一個泛型方法,接收一個任意數(shù)組,并顛倒數(shù)組中的所有元素

注意:只有對象類型才能作為泛型方法的實際參數(shù)

在泛型中可以同時有多個類型

public V getValue(K key) return { return map.get(key)}

案例:

package com.heima.generic;

//自定義泛型練習(xí)

public class ArraysUtil {

//編寫一個泛形方法,實現(xiàn)指定位置數(shù)組元素的交換

public static void exchange(T[] t,int index1,int index2){

T temp = t[index1];

t[index1] = t[index2];

t[index2] = temp;

}

//編寫一個泛形方法,接收一個任意數(shù)組,并顛倒數(shù)組中的所有元素

public static void reverse(T[] t){

int startIndex = 0;

int endIndex = t.length -1;

while(startIndex

T temp = t[startIndex];

t[startIndex] = t[endIndex];

t[endIndex] = temp;

startIndex++;

endIndex--;

}

}

}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 前言 java的集合框架基本上是必備的知識,也感覺是面試的重災(zāi)區(qū)吧,,雖然我沒有去面試過。集合框架確實是一個值得理...
    Zane96閱讀 1,670評論 0 2
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法,類相關(guān)的語法,內(nèi)部類的語法,繼承相關(guān)的語法,異常的語法,線程的語...
    子非魚_t_閱讀 34,623評論 18 399
  • 有句俗話:可憐天下父母心。 在我兒時,每當(dāng)做錯事,媽媽教訓(xùn)完我最后總說:唉!可憐天下父母心。你現(xiàn)在不懂,長大就懂了...
    無等等閱讀 372評論 3 5
  • 需求第二定律 需求對價格的彈性,和價格變化之后流逝的時間長度成正比。也就是說,隨著時間的推移,需求對價格的彈性會增...
    勢從千里奔閱讀 5,050評論 0 1
  • 這是這幾期里寫的最累的一篇,直接投入時間至少超過50小時~~~ 本輯提到的單曲試聽:搖滾編年史/英倫入侵_anth...
    GuoJia郭佳閱讀 9,193評論 0 13

友情鏈接更多精彩內(nèi)容