国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Java02-迭代器,數(shù)據(jù)結(jié)構(gòu),List,Set ,Map,Collections工具類

這篇具有很好參考價值的文章主要介紹了Java02-迭代器,數(shù)據(jù)結(jié)構(gòu),List,Set ,Map,Collections工具類。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

目錄

什么是遍歷?

一、Collection集合的遍歷方式

1.迭代器遍歷

方法

流程

案例

2. foreach(增強for循環(huán))遍歷

案例

3.Lamdba表達式遍歷

案例

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

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

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

棧(Stack)

隊列(Queue)

鏈表(Link)

散列表(Hash Table)

樹(Tree)

List接口

ArraysList集合

LinkedList集合?

Set接口?

HaseSet集合

LinkedHaseSet集合

TreeSet集合

工具類

Collecations集合工具類

補充

可變參數(shù)


什么是遍歷?

????????遍歷就是一個一個的把容器中的元素訪問一遍

一、Collection集合的遍歷方式

Collection集合的遍歷方式有三種:

  1. 迭代器
  2. foreach(增強for循環(huán))
  3. JDK 1.8開始之后的新技術(shù) Lambda表達式

1.迭代器遍歷

方法

public Iterator iterator(): 獲取集合對應的迭代器,用來遍歷集合中的元素

E next():獲取下一個元素值!

boolean hasNext():判斷是否有下一個元素,有返回true ;反之,則返回false

流程

1.先獲取當前集合的迭代器,迭代器需要寫泛型,指定類型

? ? ? ? ? ? ? Iterator<E> it = lists.iterator();

2.定義一個while循環(huán),問一次取一次

???通過it.hasNext()詢問是否有下一個元素,有就通過

? ? ? ? ? ? ? it.next()取出下一個元素?

????????出現(xiàn)異常NoSuchElementException,出現(xiàn)沒有此元素異常!

案例

public class CollectionDemo01 {
    public static void main(String[] args) {
        Collection<String> lists = new ArrayList<>();
        lists.add("張三");
        lists.add("李四");
        lists.add("王五");
        lists.add("趙六");
        System.out.println(lists);
        // lists = [張三, 李四, 王五, 趙六]

        // 1.得到集合的迭代器對象。
        Iterator<String> it = lists.iterator();

        // 2.使用while循環(huán)遍歷。
        while(it.hasNext()){
            String ele = it.next();
            System.out.println(ele);
        }

    }
}
[張三, 李四, 王五, 趙六]
張三
李四
王五
趙六

2. foreach(增強for循環(huán))遍歷

????????foreach可以遍歷集合或者數(shù)組

缺點:foreach遍歷無法知道遍歷到了哪個元素了,因為沒有索引

案例

public class CollectionDemo02 {
    public static void main(String[] args) {
        Collection<String> lists = new ArrayList<>();
        lists.add("張三");
        lists.add("李四");
        lists.add("王五");
        lists.add("趙六");
        System.out.println(lists);
        // lists = [張三, 李四, 王五, 趙六]
        //  ele
        for (String ele : lists) {
            System.out.println(ele);
        }
    }
}
[張三, 李四, 王五, 趙六]
張三
李四
王五
趙六

3.Lamdba表達式遍歷

????????JDK 1.8開始之后的新技術(shù)Lambda表達式,調(diào)用foeEach

案例

public class CollectionDemo03 {
    public static void main(String[] args) {
        Collection<String> lists = new ArrayList<>();
        lists.add("張三");
        lists.add("李四");
        lists.add("王五");
        lists.add("趙六");
        System.out.println(lists);
        // lists = [張三, 李四, 王五, 趙六]
        //  ele
        lists.forEach(s -> {
            System.out.println(s);
        });
        
//        lists.forEach(s -> System.out.println(s));
//
//        lists.forEach(System.out::println);
    }
}

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

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

數(shù)據(jù)結(jié)構(gòu):數(shù)據(jù)是以什么方式組合在一起的

數(shù)據(jù)結(jié)構(gòu)不僅要存儲元素,還要提供對元素進行增刪改查的操作

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

常見的數(shù)據(jù)結(jié)構(gòu):棧、隊列、鏈表、散列表、樹

棧(Stack)

????????棧(stack)是限制插入和刪除只能在一個位置上進行的表,該位置是表的末端,叫做棧頂 (top)。它是后進先出(LIFO)的。對棧的基本操作只有 push(進棧)和 pop(出棧)兩種,前者相當于插入,后者相當于刪除最后的元素

Java02-迭代器,數(shù)據(jù)結(jié)構(gòu),List,Set ,Map,Collections工具類,Java,數(shù)據(jù)結(jié)構(gòu),java

隊列(Queue)

????????隊列是一種特殊的線性表 ,特殊之處在于它只允許在表的前端(front)進行刪除操作,而在表的后端(rear)進行插入操作,和棧一樣,隊列是一種操作受限制的線性表。進行插入操作的端稱為隊尾,進行刪除操作的端稱為隊頭

Java02-迭代器,數(shù)據(jù)結(jié)構(gòu),List,Set ,Map,Collections工具類,Java,數(shù)據(jù)結(jié)構(gòu),java

鏈表(Link)

1

Java02-迭代器,數(shù)據(jù)結(jié)構(gòu),List,Set ,Map,Collections工具類,Java,數(shù)據(jù)結(jié)構(gòu),java

散列表(Hash Table)

???????? 散列表算法希望能盡量做到不經(jīng)過任何比較,通過一次存取就能得到所查找的數(shù)據(jù)元素
構(gòu)造散列函數(shù)的方法有:

????????直接定址法: 取關鍵字或關鍵字的某個線性函數(shù)值為散列地址。

????????????????即:h(key) = key 或 h(key) = a * key + b,其中 a 和 b 為常數(shù)。

????????數(shù)字分析法

????????平方取值法: 取關鍵字平方后的中間幾位為散列地址。

????????折疊法:將關鍵字分割成位數(shù)相同的幾部分,然后取這幾部分的疊加和作為散列地址。

????????

????????除留余數(shù)法:取關鍵字被某個不大于散列表表長 m 的數(shù) p 除后所得的余數(shù)為散列地址, 即:h(key) = key MOD p p ≤ m

????????隨機數(shù)法:選擇一個隨機函數(shù),取關鍵字的隨機函數(shù)值為它的散列地址,

即:h(key) = random(key)

樹(Tree)

樹具有的特點:

  1. 每一個節(jié)點有零個或者多個子節(jié)點

  2. 沒有父節(jié)點的節(jié)點稱之為根節(jié)點,一個樹最多有一個根節(jié)點。

  3. 每一個非根節(jié)點有且只有一個父節(jié)點

名詞 含義
節(jié)點 指樹中的一個元素
節(jié)點的度 節(jié)點擁有的子樹的個數(shù),二叉樹的度不大于2
葉子節(jié)點 度為0的節(jié)點,也稱之為終端結(jié)點
高度 葉子結(jié)點的高度為1,葉子結(jié)點的父節(jié)點高度為2,以此類推,根節(jié)點的高度最高
根節(jié)點在第一層,以此類推
父節(jié)點 若一個節(jié)點含有子節(jié)點,則這個節(jié)點稱之為其子節(jié)點的父節(jié)點
子節(jié)點 子節(jié)點是父節(jié)點的下一層節(jié)點
兄弟節(jié)點 擁有共同父節(jié)點的節(jié)點互稱為兄弟節(jié)點

樹基本結(jié)構(gòu)介紹

樹的進階

注意事項:

? ? ? ? 除了java.util.PriorityQueue沒有實現(xiàn)Cloneable接口外,Java合集框架中的其他類所有類都實現(xiàn)了java.util.Cloneable和java.util.Serializable接口

? ? ? ? 所以,除了優(yōu)先隊列,其他合集都可以克隆和實例化

Java02-迭代器,數(shù)據(jù)結(jié)構(gòu),List,Set ,Map,Collections工具類,Java,數(shù)據(jù)結(jié)構(gòu),java

左邊高,向右旋

如果右旋,無法滿足條件的話,放棄右旋,用左旋

List接口

????????List系列集合:添加的元素,是有序,可重復,有索引的

  • LinkedList: 添加的元素,是有序,可重復,有索引的

  • ArrayList: 添加的元素,是有序,可重復,有索引的

  • Vector 是線程安全的,速度慢,工作中很少使用

List接口中常用方法

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

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

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

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

ArraysList集合

????????ArrayList實現(xiàn)類集合底層基于數(shù)組存儲數(shù)據(jù)的,查詢快,增刪慢

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

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

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

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

底層

特點:元素增刪慢,查找快

LinkedList集合?

????????LinkedList是支持雙鏈表,定位前后的元素是非??斓?,增刪首尾的元素也是最快的。
提供了很多操作首尾元素的特殊API可以做棧和隊列的實現(xiàn)

是一個雙向鏈表

底層

特點:

方法:

  • public void addFirst(E e):將指定元素插入此列表的開頭。

  • public void addLast(E e):將指定元素添加到此列表的結(jié)尾。

  • public E getFirst():返回此列表的第一個元素。

  • public E getLast():返回此列表的最后一個元素。

  • public E removeFirst():移除并返回此列表的第一個元素。

  • public E removeLast():移除并返回此列表的最后一個元素。

  • public E pop():從此列表所表示的堆棧處彈出一個元素。

  • public void push(E e):將元素推入此列表所表示的堆棧。

  • public boolean isEmpty():如果列表不包含元素,則返回true

Set接口?

介紹

? ? ? ? Set是一個用于存儲和處理無重復元素的高效數(shù)據(jù)結(jié)構(gòu)

特點

? ? ? ? 沒有重復元素,沒有提過索引遍歷

可以使用HaseSet、LinkedHashSet、TreeSet類

研究兩個問題(面試熱點):
1)Set集合添加的元素是不重復的,是如何去重復的?
2)Set集合元素無序的原因是什么?

HaseSet集合

HashSet:添加的元素,是無序,不重復,無索引的

底層

LinkedHaseSet集合

????????LinkedHashSet底層依然是使用哈希表存儲元素的,但是每個元素都額外帶一個鏈來維護添加順序
????????增刪查快,而且有序。

????????缺點:多了一個存儲順序的鏈會占內(nèi)存空間,而且不允許重復,無索引。

TreeSet集合

????????TreeSet: 不重復,無索引,按照大小默認升序排序

????????TreeSet集合自自排序的方式:

  1. 有值特性的元素直接可以升序排序。(浮點型,整型)
  2. 字符串類型的元素會按照首字符的編號排序。
  3. 對于自定義的引用數(shù)據(jù)類型,TreeSet默認無法排序,執(zhí)行的時候直接報錯,因為說明排序規(guī)則。


????????自定義的引用數(shù)據(jù)類型的排序?qū)崿F(xiàn):
對于自定義的引用數(shù)據(jù)類型,TreeSet默認無法排序
所以我們需要定制排序的大小規(guī)則,程序員定義大小規(guī)則的方案有2種:
第1種:直接為對象的類實現(xiàn)比較器規(guī)則接口Comparable,重寫比較方法(拓展方式)
????????如果程序員認為比較者大于被比較者 返回正數(shù)
????????如果程序員認為比較者小于被比較者 返回負數(shù)
????????如果程序員認為比較者等于被比較者 返回0

第2種:直接為集合設置比較器Comparator對象,重寫比較方法
????????如果程序員認為比較者大于被比較者 返回正數(shù)
????????如果程序員認為比較者小于被比較者 返回負數(shù)
????????如果程序員認為比較者等于被比較者 返回0
注意:如果類和集合都帶有比較規(guī)則,優(yōu)先使用集合自帶的比較規(guī)則

Map接口

????????Map集合是一種雙列集合,每個元素包含兩個值。
????????Map集合的每個元素的格式:key=value(鍵值對元素)。
????????Map集合也被稱為“鍵值對集合”

Map集合的完整格式:{key1=value1 , key2=value2 , key3=value3 , ...}

特點:

  1. Map集合的特點都是由鍵決定的
  2. Map集合的鍵是無序,不重復的,無索引的。Map集合后面重復的鍵對應的元素會覆蓋前面的整個元素
  3. Map集合的值無要求
  4. Map集合的鍵值對都可以為null

注意:

  • Map集合的鍵和值都可以存儲自定義類型。
  • 如果希望Map集合認為自定義類型的鍵對象重復了,必須重寫對象的hashCode()和equals()方法

實現(xiàn)類:

????????HashMap:元素按照鍵是無序,不重復,無索引,值不做要求。
????????LinkedHashMap:元素按照鍵是有序,不重復,無索引,值不做要求。

????????TreeMap:按照鍵是可排序不重復的鍵值對集合

HashMap集合

LinkedHashMap集合

TreeMap集合

工具類

Collecations集合工具類

????????java.utils.Collections:是集合工具類

????????Collections并不屬于集合,是用來操作集合的工具類。

Collections有幾個常用的API:

? ? ? ? ?public static <T> boolean addAll(Collection<? super T> c, T... elements)

? ? ? ? ? ? ?給集合對象批量添加元素!

? ? ? ? ?public static void shuffle(List<?> list) :打亂集合順序。

? ? ? ? ?public static <T> void sort(List<T> list):將集合中元素按照默認規(guī)則排序。

? ? ? ? ?public static <T> void sort(List<T> list,Comparator<? super T> ):將集合中元素按照指定規(guī)則排序。

補充

可變參數(shù)

????????可變參數(shù)用在形參中可以接收多個數(shù)據(jù)
????????可變參數(shù)的格式:數(shù)據(jù)類型... 參數(shù)名稱

????????可變參數(shù)的作用

  • 傳輸參數(shù)非常靈活,方便
  • 可以不傳輸參數(shù)
  • 可以傳輸一個參數(shù)
  • 可以傳輸多個參數(shù)
  • 可以傳輸一個數(shù)組

????????可變參數(shù)在方法內(nèi)部本質(zhì)上就是一個數(shù)組
????????可變參數(shù)的注意事項:文章來源地址http://www.zghlxwxcb.cn/news/detail-633669.html

  1. 一個形參列表中可變參數(shù)只能有一個
  2. 可變參數(shù)必須放在形參列表的最后面
public class MethodDemo {
    public static void main(String[] args) {
        sum(); // 可以不傳輸參數(shù)。
        sum(10); // 可以傳輸一個參數(shù)。
        sum(10,20,30); // 可以傳輸多個參數(shù)。
        sum(new int[]{10,30,50,70,90}); // 可以傳輸一個數(shù)組。
    }

    public static void sum(int...nums){
        // 可變參數(shù)在方法內(nèi)部本質(zhì)上就是一個數(shù)組。
        System.out.println("元素個數(shù):"+nums.length);
        System.out.println("元素內(nèi)容:"+ Arrays.toString(nums));
        System.out.println("--------------------------");
    }
}

到了這里,關于Java02-迭代器,數(shù)據(jù)結(jié)構(gòu),List,Set ,Map,Collections工具類的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權(quán),不承擔相關法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • 【數(shù)據(jù)結(jié)構(gòu)】 | java中 map和set 詳解

    【數(shù)據(jù)結(jié)構(gòu)】 | java中 map和set 詳解

    ??? 博客新人,希望大家一起加油進步 ??? 乾坤未定,你我皆黑馬 我們首先來看一下集合的框架結(jié)構(gòu): Set實現(xiàn)了Collection接口,Map是一個單獨存在的接口。 而下面又分別各有兩個類,分別是TreeSet(HashSet)和 HashSet(HashMap) Map和Set的作用是用來查找和搜索的;以后涉及到

    2023年04月10日
    瀏覽(20)
  • 【數(shù)據(jù)結(jié)構(gòu)】搜索樹 與 Java集合框架中的Set,Map

    【數(shù)據(jù)結(jié)構(gòu)】搜索樹 與 Java集合框架中的Set,Map

    作者主頁:paper jie_博客 本文作者:大家好,我是paper jie,感謝你閱讀本文,歡迎一建三連哦。 本文錄入于《JAVA數(shù)據(jù)結(jié)構(gòu)》專欄,本專欄是針對于大學生,編程小白精心打造的。筆者用重金(時間和精力)打造,將javaSE基礎知識一網(wǎng)打盡,希望可以幫到讀者們哦。 其他專欄:《

    2024年02月08日
    瀏覽(31)
  • 第12章_集合框架(Collection接口,Iterator接口,List,Set,Map,Collections工具類)

    第12章_集合框架(Collection接口,Iterator接口,List,Set,Map,Collections工具類)

    1.1 生活中的容器 1.2 數(shù)組的特點與弊端 一方面,面向?qū)ο笳Z言對事物的體現(xiàn)都是以對象的形式,為了方便對多個對象的操作,就要對對象進行存儲。 另一方面,使用數(shù)組存儲對象方面具有 一些弊端 ,而Java 集合就像一種容器,可以 動態(tài)地 把多個對象的引用放入容器中。 數(shù)

    2024年01月25日
    瀏覽(38)
  • Java學數(shù)據(jù)結(jié)構(gòu)(3)——樹Tree & B樹 & 紅黑樹 & Java標準庫中的集合Set與映射Map & 使用多個映射Map的案例

    Java學數(shù)據(jù)結(jié)構(gòu)(3)——樹Tree & B樹 & 紅黑樹 & Java標準庫中的集合Set與映射Map & 使用多個映射Map的案例

    1.B樹,階M,數(shù)據(jù)樹葉上,根的兒子數(shù)在2和M之間,除根外,非樹葉節(jié)點兒子為M/2和M之間; 2.B樹的插入引起分裂,B樹的刪除,引起合并和領養(yǎng); 3.紅黑樹,根是黑的,紅色節(jié)點的兒子必須是黑的,所有路徑的黑色節(jié)點數(shù)相同; 4.紅黑樹的插入,顏色翻轉(zhuǎn),單旋轉(zhuǎn),插入節(jié)點定

    2024年02月11日
    瀏覽(34)
  • 「數(shù)據(jù)結(jié)構(gòu)」Map&Set

    「數(shù)據(jù)結(jié)構(gòu)」Map&Set

    ?? 個人主頁 :Ice_Sugar_7 ?? 所屬專欄 :Java數(shù)據(jù)結(jié)構(gòu) ?? 歡迎點贊收藏加關注哦! Map和Set是專門用來進行搜索的容器或者數(shù)據(jù)結(jié)構(gòu),它們適合動態(tài)查找(即在查找時可能會進行一些插入和刪除的操作) 我們一般把搜索的數(shù)據(jù)稱為 (Key) ,和對應的稱為 值(

    2024年02月22日
    瀏覽(24)
  • [數(shù)據(jù)結(jié)構(gòu)]-map和set

    [數(shù)據(jù)結(jié)構(gòu)]-map和set

    前言 作者 : 小蝸牛向前沖 名言 : 我可以接受失敗,但我不能接受放棄 ??如果覺的博主的文章還不錯的話,還請 點贊,收藏,關注??支持博主。如果發(fā)現(xiàn)有問題的地方歡迎?大家在評論區(qū)指正 ? 目錄 一、鍵值對 二、set 1、set的基本知識 2、set的使用? 三、map 1、map的基本

    2024年02月04日
    瀏覽(24)
  • 【數(shù)據(jù)結(jié)構(gòu)】 Map和Set詳解

    【數(shù)據(jù)結(jié)構(gòu)】 Map和Set詳解

    Map和set是一種專門用來 進行搜索的容器或者數(shù)據(jù)結(jié)構(gòu) ,其搜索的效率與其具體的實例化子類有關。以前常見的 搜索方式有: 直接遍歷,時間復雜度為O(N),元素如果比較多效率會非常慢 二分查找,時間復雜度為 ,但搜索前必須要求序列是有序的 上述排序比較適合靜態(tài)類型的

    2024年02月09日
    瀏覽(28)
  • 【高階數(shù)據(jù)結(jié)構(gòu)】Map 和 Set(詳解)

    【高階數(shù)據(jù)結(jié)構(gòu)】Map 和 Set(詳解)

    (???(??? )??,我是 Scort 目前狀態(tài):大三非科班啃C++中 ??博客主頁:張小姐的貓~江湖背景 快上車??,握好方向盤跟我有一起打天下嘞! 送給自己的一句雞湯??: ??真正的大師永遠懷著一顆學徒的心 作者水平很有限,如果發(fā)現(xiàn)錯誤,可在評論區(qū)指正,感謝?? ????

    2024年01月23日
    瀏覽(59)
  • 【高階數(shù)據(jù)結(jié)構(gòu)】封裝Map和Set

    【高階數(shù)據(jù)結(jié)構(gòu)】封裝Map和Set

    (???(??? )??,我是 Scort 目前狀態(tài):大三非科班啃C++中 ??博客主頁:張小姐的貓~江湖背景 快上車??,握好方向盤跟我有一起打天下嘞! 送給自己的一句雞湯??: ??真正的大師永遠懷著一顆學徒的心 作者水平很有限,如果發(fā)現(xiàn)錯誤,可在評論區(qū)指正,感謝?? ????

    2024年01月20日
    瀏覽(28)
  • 【1++的數(shù)據(jù)結(jié)構(gòu)】之map與set(一)

    【1++的數(shù)據(jù)結(jié)構(gòu)】之map與set(一)

    ??作者主頁:進擊的1++ ?? 專欄鏈接:【1++的數(shù)據(jù)結(jié)構(gòu)】 像list vector dequeue等這樣的容器我們稱為序列式容器,原因是由于其底層是線性的數(shù)據(jù)結(jié)構(gòu),存儲的是元素本身。 關聯(lián)式容器 與序列式容器的區(qū)別在于:關聯(lián)式容器中存儲的是鍵值對,其數(shù)據(jù)檢索時效率更高。 那么什

    2024年02月11日
    瀏覽(19)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包