国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Collection集合知識(shí)點(diǎn)總結(jié)

I_Am / 1204人閱讀

摘要:和的區(qū)別是非線程安全的,效率高是基于線程安全的,效率低底層基于鏈表實(shí)現(xiàn),鏈表內(nèi)存是散亂的,每一個(gè)元素存儲(chǔ)本身內(nèi)存地址的同時(shí)還存儲(chǔ)下一個(gè)元素的地址?;旧隙际且詾榛A(chǔ)。

什么是集合

Java是一門面向?qū)ο蟮恼Z(yǔ)言.

為了方便操作多個(gè)對(duì)象,那么我們就得把這多個(gè)對(duì)象存儲(chǔ)起來(lái)

想要存儲(chǔ)多個(gè)對(duì)象(變量),我們就需要一個(gè)容器

集合就是一個(gè)放數(shù)據(jù)的容器(集合類存放的都是對(duì)象的引用,而非對(duì)象本身)

Collection的由來(lái):

集合可以存儲(chǔ)多個(gè)元素,但我們對(duì)多個(gè)元素也有不同的需求

多個(gè)元素,元素之間不能重復(fù)的

多個(gè)元素,元素按某種規(guī)則排序的

針對(duì)不同的需求:java就提供了很多集合類,多個(gè)集合類的數(shù)據(jù)結(jié)構(gòu)不同。但是,結(jié)構(gòu)不重要,重要的是能夠存儲(chǔ)東西,能夠判斷,獲取

把集合共性的內(nèi)容不斷往上提取,最終形成集合的繼承體系---->Collection

Collection的繼承結(jié)構(gòu)

常見(jiàn)問(wèn)題:

數(shù)組和集合的區(qū)別

1:長(zhǎng)度的區(qū)別

數(shù)組的長(zhǎng)度固定

集合的長(zhǎng)度可變

2:內(nèi)容不容

數(shù)組存儲(chǔ)的是同一種類型的元素

集合可以存儲(chǔ)不同類型的元素(但是一般我們不這樣干..)

3:元素的數(shù)據(jù)類型

數(shù)組可以存儲(chǔ)基本數(shù)據(jù)類型,也可以存儲(chǔ)引用類型

集合只能存儲(chǔ)引用類型(你存儲(chǔ)的是簡(jiǎn)單的int,它會(huì)自動(dòng)裝箱成Integer)

什么時(shí)候使用集合,什么時(shí)候使用數(shù)組?

使用數(shù)組的缺陷:

數(shù)組長(zhǎng)度設(shè)置過(guò)小就造成溢出

如果數(shù)組的長(zhǎng)度設(shè)置過(guò)大,就造成內(nèi)存空間浪費(fèi)(因?yàn)閿?shù)組的長(zhǎng)度是固定的)

為什么還要使用數(shù)組呢 ?

集合的底層都是通過(guò)數(shù)組來(lái)實(shí)現(xiàn)的

2.數(shù)組的效率更高.例如:IO流 byte[] arr=new byte[1024];就是使用的數(shù)組

怎么選擇集合?

需要唯一嗎?

    需要:Set

            需要制定順序嗎?

                        需要:TreeSet

                        不需要:HashSet

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

  不需要:List

                    需要頻繁增加或者刪除元素嗎?

                        需要:LinkedList

                        不需要:ArrayList

前綴名就是該集合的數(shù)據(jù)結(jié)構(gòu).后綴名就是該集合所屬的體系

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

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

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

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




Collection的常見(jiàn)方法

數(shù)組轉(zhuǎn)換成集合

集合轉(zhuǎn)換成數(shù)組

Collection的主要子類List和Set

List常見(jiàn)方法:

List:有順序的collection,并且可以包含重復(fù)元素。

├ArrayList 
             - 數(shù)組結(jié)構(gòu),查詢?cè)乜?添加慢(一般情況下),線程不安全,效率高
         

└Vector 
           - 數(shù)組結(jié)構(gòu),查詢?cè)乜?線程安全.效率比ArrayList低
           - 現(xiàn)在幾乎不適用

├LinkedList 
             - 鏈表結(jié)構(gòu),添加元素快,查詢慢,線程不安全,效率高

細(xì)節(jié)說(shuō)明:
LinkedList不同于前面兩種List,它不是基于數(shù)組的,所以不受數(shù)組性能的限制。
他的每一個(gè)節(jié)點(diǎn)(Node)都包含了三方面的內(nèi)容:
1.節(jié)點(diǎn)本身的數(shù)據(jù): E item;
2.上一個(gè)節(jié)點(diǎn)的信息:Node prev;
3.下一個(gè)節(jié)點(diǎn)的信息:Node next;
所以當(dāng)對(duì)LinkedList做添加,刪除動(dòng)作的時(shí)候就不用像基于數(shù)組的ArrayList一樣,必須進(jìn)行大量的數(shù)據(jù)移動(dòng)。只要更改nextNode的相關(guān)信息就可以實(shí)現(xiàn)了,這是LinkedList的優(yōu)勢(shì)。 所以LinkedList集合添加數(shù)組效率高

LinkedList的常用方法:

注意事項(xiàng):LinkedList在內(nèi)存中不是連續(xù)的,ArrayList在內(nèi)存中是連續(xù)的.

List集合的遍歷方式:
方式一:迭代器模式,假設(shè)集合名為(al)

Iterator iterator = al.iterator();
while (iterator.hasNext()) {
String s = iterator.next();
System.out.println(s);
}

擴(kuò)展:使用ListIterator方式進(jìn)行遍歷,可以在遍歷的過(guò)程中對(duì)集合進(jìn)行增刪改查,只有l(wèi)ist有這種方式,使用ListIterator方式還能進(jìn)行反向遍歷
方式二:增強(qiáng)for

for (String s : al) {
System.out.println(s);
}

方式三:普通for (List特有)

for (int i = 0; i 
List總結(jié):

基于Array的List(Vector,ArrayList)適合查詢,而LinkedList 適合添加,刪除操作

所有的List中可以有null元素,例如[ tom,null,1 ]

所有的List中可以有相同的元素,例如Vector中可以有 [ tom,koo,too,koo ]

所有的List中只能容納單個(gè)不同類型的對(duì)象組成的表(單列集合),而不是Key-Value鍵值對(duì)。例如:[ tom,1,c ]

List是有序的Collection,使用此接口能夠精確的控制每個(gè)元素插入的位置。用戶能夠使用索引(元素在List中的位置,類似于數(shù)組下 >標(biāo))來(lái)訪問(wèn)List中的元素,這類似于Java的數(shù)組。

ArrayList和Vector的區(qū)別:ArrayList是非線程安全的,效率高;Vector是基于線程安全的,效率低

LinkedList:底層基于鏈表實(shí)現(xiàn),鏈表內(nèi)存是散亂的,每一個(gè)元素存儲(chǔ)本身內(nèi)存地址的同時(shí)還存儲(chǔ)下一個(gè)元素的地址。鏈表增刪快,查找慢

List接口有三個(gè)常用實(shí)現(xiàn)類:LinkedList,ArrayList,Vector

Set :不包含重復(fù)元素的Collection。
├HashSet (數(shù)據(jù)結(jié)構(gòu)是哈希表)

HashSet 怎么確認(rèn)唯一?
首先判斷的是兩個(gè)元素的哈希值確認(rèn)元素是否相同,如果相同,再判斷兩個(gè)對(duì)象的內(nèi)容是否相同

判斷哈希值是否相同,即是判斷hashCode方法,判斷內(nèi)容是否相同,即是判斷equals方法
注意:如果哈希值不同,是不需要判斷equals方法的

如果兩個(gè)哈希值相同會(huì)造成哈希沖突,一般情況下,哈希值都是不會(huì)沖突的(這里不做詳細(xì)介紹)    

記住:如果元素要存儲(chǔ)到HashSet集合中,必須覆蓋hashCode和equals方法.
一般情況下,如果定義的類會(huì)產(chǎn)生很多對(duì)象,比如人,學(xué)生,書,通常都是覆蓋hashCode和equals方法.建立對(duì)象是否相同的依據(jù).




└LinkedhashSet     (HashSet的一個(gè)子類,一個(gè)鏈表)
    LinkedhashSet可以保證元素的有序!

└TreesSet    (排序,不重復(fù),無(wú)索引)
     

Set的遍歷方式:

方式一:迭代器

Set set = new HashSet();
Iterator it = set.iterator();
while (it.hasNext()) {
  String str = it.next();
  System.out.println(str);
}

方式二:增強(qiáng)for

for (String str : set) {
      System.out.println(str);
}
Set知識(shí)點(diǎn)講解

雖然Set同List都實(shí)現(xiàn)了Collection接口,但是他們的實(shí)現(xiàn)方式卻大不一樣。List基本上都是以Array為基礎(chǔ)。但是Set則是在 HashMap的基礎(chǔ)上來(lái)實(shí)現(xiàn)的,這個(gè)就是Set和List的根本區(qū)別。HashSet的存儲(chǔ)方式是把HashMap中的Key作為Set的對(duì)應(yīng)存儲(chǔ)項(xiàng)。

這個(gè)也是為什么在Set中不能像在List中一樣有重復(fù)的項(xiàng)的根本原因,因?yàn)镠ashMap的key是不能有重復(fù)的。

HashSet中的元素是不能重復(fù)的,如果使用add(Object obj)方法添加已經(jīng)存在的對(duì)象,則會(huì)覆蓋前面的對(duì)象

HashSet實(shí)現(xiàn)的基礎(chǔ)是Map(HashMap)

HashSet是一種不包含重復(fù)的元素的無(wú)序Collection。

元素?zé)o放入順序,元素不可重復(fù)(注意:元素雖然無(wú)放入順序,但是元素在set中的位置是有該元素的HashCode決定的,其位置其實(shí)是固定的)

集合排序

方式一(讓Bean類實(shí)現(xiàn)Comparable接口重寫compareTo方法) 自然排序

返回值 0 , 不存

    正數(shù) ,       右邊  
    負(fù)數(shù) ,       左邊 
    
    

方式二(自定義一個(gè)類實(shí)現(xiàn)Comparator接口重寫compare方法,通過(guò)構(gòu)造方法傳入自定義類的對(duì)象)比較器排序


比如:String ,Integer 對(duì)象 ,實(shí)現(xiàn)特殊的排序需求, 需要傳遞比較器的子類對(duì)象 .

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/69211.html

相關(guān)文章

  • Java集合總結(jié)【面試題+腦圖】,將識(shí)點(diǎn)一網(wǎng)打盡!

    摘要:而在集合中,值僅僅是一個(gè)對(duì)象罷了該對(duì)象對(duì)本身而言是無(wú)用的。將這篇文章作為集合的總結(jié)篇,但覺(jué)得沒(méi)什么好寫就回答一些面試題去了,找了一會(huì)面試題又覺(jué)得不夠系統(tǒng)。 前言 聲明,本文用的是jdk1.8 花了一個(gè)星期,把Java容器核心的知識(shí)過(guò)了一遍,感覺(jué)集合已經(jīng)無(wú)所畏懼了?。?哈哈哈....),現(xiàn)在來(lái)總結(jié)一下吧~~ 回顧目錄: Collection總覽 List集合就這么簡(jiǎn)單【源碼剖析】 Ma...

    yearsj 評(píng)論0 收藏0
  • Java常見(jiàn)集合知識(shí)詳解

    摘要:集合的種類常見(jiàn)的集合類分如下幾個(gè)種類詳解接口是和接口的父接口,也是集合類除外根接口。接口集合中元素的存放特點(diǎn)是元素有序,同一元素可重復(fù)??偨Y(jié)中集合是一個(gè)非常重要的知識(shí)點(diǎn),在實(shí)際運(yùn)用中也是常常會(huì)使用到。 集合的種類 常見(jiàn)的集合類分如下幾個(gè)種類: Collection - List - ArrayList - LinkedList - Set - HashSet...

    lewinlee 評(píng)論0 收藏0
  • Java識(shí)點(diǎn)總結(jié)(Java容器-EnumSet)

    摘要:知識(shí)點(diǎn)總結(jié)容器知識(shí)點(diǎn)總結(jié)容器是一個(gè)專為枚舉設(shè)計(jì)的集合類,中所有值都必須是指定枚舉類型的枚舉值,該枚舉類型在創(chuàng)建時(shí)顯式或隱性的指定。集合不容許加入元素。 Java知識(shí)點(diǎn)總結(jié)(Java容器-EnumSet) @(Java知識(shí)點(diǎn)總結(jié))[Java, Java容器, JavaCollection, JavaSet] EnumSet EnumSet是一個(gè)專為枚舉設(shè)計(jì)的集合類 ,EnumSet中...

    kycool 評(píng)論0 收藏0
  • Java識(shí)點(diǎn)總結(jié)(Java容器-Collection

    摘要:知識(shí)點(diǎn)總結(jié)容器知識(shí)點(diǎn)總結(jié)容器函數(shù)庫(kù)是包下的一些接口和類,類是用來(lái)產(chǎn)生對(duì)象存放數(shù)據(jù)用的,而接口是訪問(wèn)數(shù)據(jù)的方式。底層也是數(shù)組實(shí)現(xiàn),線程安全,效率低效率高,線程不安全。 Java知識(shí)點(diǎn)總結(jié)(Java容器-Collection) @(Java知識(shí)點(diǎn)總結(jié))[Java, Java容器, JavaCollection] [toc] Collection Collection函數(shù)庫(kù)是java.uti...

    GeekGhc 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<