JAVA入門筆記~基礎(chǔ)知識(shí)day10

Collection集合的遍歷方法

1. 迭代器

  1. 先獲取集合的迭代器對(duì)象
    1. 方法:Iterator<E> iterator() 得到當(dāng)前集合的迭代器對(duì)象
    2. 代碼:Iterator<String> it = names.iterator();
  2. 使用whils循環(huán)通過對(duì)it.hasNext()詢問是否有下一個(gè)元素
    1. 有就返回true然后進(jìn)入循環(huán)通過it.Next()取出下一個(gè)元素
    2. 沒有就返回false,結(jié)束循環(huán)
  3. 注意: 迭代器不能通過Next()去訪問超過了最大個(gè)數(shù)的元素!!!

2. foreach

for(被遍歷集合或者數(shù)組中元素的類型    變量名稱  :   被遍歷集合或者數(shù)組){
}

? 小結(jié): foreach遍歷原理就是迭代器,寫法是簡化寫法

3. JDK1.8之后新增技術(shù)

  1. 集合對(duì)象.forEach(System.out::println);

Java數(shù)據(jù)結(jié)構(gòu)

1. 什么是數(shù)據(jù)結(jié)構(gòu)

  1. 數(shù)據(jù)結(jié)構(gòu)指的是數(shù)據(jù)以什么方法組織在一起
  2. 不同的數(shù)據(jù)結(jié)構(gòu),增刪改查的性能是不一樣的
  3. 不同的集合底層會(huì)采用不同的數(shù)據(jù)結(jié)構(gòu),我們要知道集合的底層是基于哪種數(shù)據(jù)結(jié)構(gòu)存儲(chǔ)和操作數(shù)據(jù)的.

2. 常見數(shù)據(jù)結(jié)構(gòu)

  1. 隊(duì)列(queue)
    先進(jìn)先出,后進(jìn)后出
    場景:各種排隊(duì),叫號(hào)系統(tǒng)
  2. 棧(stack)
    后進(jìn)先出,先進(jìn)后出
    壓棧 == 入棧
    彈棧 == 出棧
    場景:彈夾的裝彈射擊步驟
  3. 線性表(數(shù)組)
    線性表是內(nèi)存中的連續(xù)存儲(chǔ)區(qū)域
    分成若干等分的小區(qū)域(每個(gè)區(qū)域大小是一樣的)
    元素存在索引
    特點(diǎn): 查詢?cè)乜?根據(jù)索引快速計(jì)算出元素的地址,然后立即去定位)
    增刪元素慢(創(chuàng)建新數(shù)組,遷移元素)
  4. 鏈表
    元素不是內(nèi)存中的連續(xù)區(qū)域存儲(chǔ)
    元素是游離存儲(chǔ)的,每個(gè)元素會(huì)記錄下一個(gè)元素的地址
    特點(diǎn): 查詢?cè)芈?br> 增刪元素快
  5. 紅黑樹
    二叉樹: binary tree 永遠(yuǎn)只有一個(gè)根節(jié)點(diǎn),是每個(gè)結(jié)點(diǎn)不超過2個(gè)節(jié)點(diǎn)的樹(tree)
    排序二叉樹:小的左邊,大的右邊,但是可能樹很高,性能變差.為了做排序和搜索!
    紅黑樹(就是自平衡的排序二叉樹):樹盡量的保證到了很矮小,但是又排好序了,性能最高的樹.增刪改查性能都好!

List系列集合的使用

1. ArrayList

public void add(int index, E element): 將指定的元素,添加到該集合中的指定位置上。

public E get(int index):返回集合中指定位置的元素。

public E remove(int index): 移除列表中指定位置的元素, 返回的是被移除的元素。

public E set(int index, E element):用指定元素替換集合中指定位置的元素,返回值的更新前的元素。

2. LinkedList

  • 底層是基于鏈表的,增刪比較快,查詢慢??!

  • 所以LinkedList多了很多操作首尾元素的特殊功能

    public void addFirst(E e):將指定元素插入此列表的開頭。
    
    public void addLast(E e):將指定元素添加到此列表的結(jié)尾。
    
    public E getFirst():返回此列表的第一個(gè)元素。
    
    public E getLast():返回此列表的最后一個(gè)元素。
    
    public E removeFirst():移除并返回此列表的第一個(gè)元素。
    
    public E removeLast():移除并返回此列表的最后一個(gè)元素。
    
    public E pop():從此列表所表示的堆棧處彈出一個(gè)元素。
    
    public void push(E e):將元素推入此列表所表示的堆棧。
    

Set系列集合的使用

1. HashSet

  • 添加的元素,是無序,不重復(fù),無索引的。

2. LinkedHashSet

  • 添加的元素,是有序,不重復(fù),無索引的。

3. Set系列集合元素去重復(fù)的流程

  1. 對(duì)于基本數(shù)據(jù)類型的值,Set集合可以直接判斷進(jìn)行去重復(fù)。

  2. 對(duì)于引用數(shù)據(jù)類型的值,Set集合是按照如下流程進(jìn)行是否重復(fù)的判斷。

    1. Set集合會(huì)讓兩兩對(duì)象,先調(diào)用自己的hashCode()方法得到彼此的哈希值(所謂的內(nèi)存地址)

    2. 然后比較兩個(gè)對(duì)象的哈希值是否相同,如果不相同直接認(rèn)為兩個(gè)對(duì)象不重復(fù)。

    3. 如果相同,會(huì)繼續(xù)讓兩個(gè)對(duì)象進(jìn)行equals比較內(nèi)容是否相同,如果相同認(rèn)為真的重復(fù)了

    4. 如果不相同認(rèn)為不重復(fù)。

                      調(diào)用hashCode()方法獲取兩個(gè)對(duì)象的哈希值
                             /                     \
                          false                    true
                          /                          \
                      不重復(fù)                          兩個(gè)對(duì)象進(jìn)行equals比較
                                                          /          \
                                                       false        true
                                                             /             \
                                                       不重復(fù)          重復(fù)了
    

4. Set系列集合元素?zé)o序的根本原因

  • Set系列集合添加元素?zé)o序的根本原因是因?yàn)榈讓硬捎昧斯1泶鎯?chǔ)元素。

小結(jié)

  1. Set集合的增刪改查性能都挺好的!
    1. 缺點(diǎn)是:無序不重復(fù)的,無索引的。
  2. 對(duì)于引用數(shù)據(jù)類型,如果希望Set集合識(shí)別是同一個(gè)對(duì)象。
    1. 可以重寫對(duì)象的hashCode和equals方法
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

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