AJPFX關於Collection介面的總結

来源:https://www.cnblogs.com/AJPFX/archive/2019/05/09/10841862.html
-Advertisement-
Play Games

###15Collection-List-ArrayList/LinkedList/* * Collection介面中的方法* A:添加功能* boolean add(Object obj):把obj這個元素,添加到集合中去* boolean addAll(Collection c):將 c 這個集 ...


###15Collection-List-ArrayList/LinkedList/
*  * Collection介面中的方法
* A:添加功能
*                 boolean add(Object obj):把obj這個元素,添加到集合中去
*                 boolean addAll(Collection c):將 c 這個集合中的所有元素,都添加到本集合中來
* B:刪除功能
*                 void clear():刪除集合中的所有元素。
*                 boolean remove(Object obj):從集合中刪除  obj 這個元素
*                 boolean removeAll(Collection c):從集合中刪除c中含有的所有元素 
* C:判斷功能
*                 boolean isEmpty():判斷集合是否為空。
*                 boolean contains(Object obj):判斷集合中是否存在 obj這個元素。
*                 boolean containsAll(Collection c):判斷集合中是否存在 c 集合中的所有元素。
* D:遍歷功能
*                 Iterator iterator():就是用來獲取集合中每一個元素。
* E:長度功能
*                 int size():獲取集合中的元素個數
* F:交集功能
*                 boolean retainAll(Collection c): 保留本集合和c這個集合中的共同元素
* G:把集合轉換成數組
*                 Object[] toArray():把集合變成 Object類型的數組。 
*/

/*
* List介面中的方法(List介面繼承了Collection介面,所以下麵只列出了List介面的特有方法)
* List的特有功能:

* A:添加功能
*                 void add(int index, Object obj):在索引為 index的位置,添加 obj這個元素
* B:刪除功能
*                 Object remove(int index):刪除索引為index的元素,並把這個元素返回
* C:修改功能
*                 Object set(int index, Object obj):把索引為index的位置,修改為 obj這個元素, 並且把修改之前的元素返回。
* D:獲取功能
*                 int indexOf(Object obj):返回 obj這個元素在集合中第一次出現的索引
*                 Object get(int index):獲取索引為 index的元素對象
*                 ListIterator listIterator():列表迭代器
* E:截取功能
*                 List subList(int fromIndex, int toIndex):返回一個新的集合,這個集合裡面的元素,是原來集合中的一部分,直接看下麵代碼
*         
###15.08_集合框架(迭代器的原理及源碼解析)(瞭解)
Iterator it = iterator iterator();//獲取迭代器
it.hasNext()//判斷是否有元素一般while(it.hasNext())
It.next();//獲取元素

###15.12_集合框架(ListIterator)(瞭解)
* boolean hasNext()是否有下一個
* boolean hasPrevious()是否有前一個
* Object next()返回下一個元素
* Object previous();返回上一個元素

###15.13_集合框架(Vector的特有功能)(面試用開發中不用)
* A:Vector類概述
* B:Vector類特有功能
        * public void addElement(E obj)
        * public E elementAt(int index)
        * public Enumeration elements()
B:List有三個兒子,我們到底使用誰呢?
                查詢多用ArrayList
                增刪多用LinkedList
                如果都多ArrayList
集合框架(LinkedList的特有功能)(掌握)
* A:LinkedList類概述
* B:LinkedList類特有功能
        * public void addFirst(E e)及addLast(E e) //在開始加入元素//在最後加入元素
        * public E getFirst()及getLast()////獲取第一個元素//獲取最後元素
        * public E removeFirst()及public E removeLast() //刪除第一個元素//刪除最後一個元素
        * public E get(int index);// 獲取索引處的元素

_集合框架(棧和隊列數據結構)(掌握)
* 棧
        * 先進後出 
* 隊列
        * 先進先出

_集合框架(泛型概述和基本使用)(掌握)
* A:泛型概述
* B:泛型好處
        * 提高安全性(將運行期的錯誤轉換到編譯期) 
        * 省去強轉的麻煩
* C:泛型基本使用
        * <>中放的必須是引用數據類型 
* D:泛型使用註意事項
        * 前後的泛型必須一致,或者後面的泛型可以省略不寫(1.7的新特性菱形泛型)  
集合框架(增強for的概述和使用)(掌握)
* A:增強for概述
        * 簡化數組和Collection集合的遍歷
* B:格式:

                for(元素數據類型 變數 : 數組或者Collection集合) {
                        使用變數即可,該變數就是元素
                }
_集合框架(三種迭代的能否刪除)(掌握)
* 普通for迴圈,可以刪除,但是索引要--
* 迭代器,可以刪除,但是必須使用迭代器自身的remove方法,否則會出現併發修改異常
* 增強for迴圈不能刪除只能遍歷

_集合框架(靜態導入的概述和使用)(瞭解)
* A:靜態導入概述
* B:格式:
        * import static 包名….類名.方法名;
        * 可以直接導入到方法的級別
* C:註意事項
        * 方法必須是靜態的,如果有多個同名的靜態方法,容易不知道使用誰?
        這個時候要使用,必須加首碼。由此可見,意義不大,所以一般不用,但是要能看懂。
_集合框架(可變參數的概述和使用)(掌握)
* A:可變參數概述
        * 定義方法的時候不知道該定義多少個參數
* B:格式
        * 修飾符 返回值類型 方法名(數據類型…  變數名){}
* C:註意事項:
        * 這裡的變數其實是一個數組
        * 如果一個方法有可變參數,並且有多個參數,那麼,可變參數肯定是最後一個
/**
         * * A:可變參數概述
                        * 定義方法的時候不知道該定義多少個參數
                * B:格式
                        * 修飾符 返回值類型 方法名(數據類型…  變數名){}
                * C:註意事項:
                        * 這裡的變數其實是一個數組
                        * 如果一個方法有可變參數,並且有多個參數,那麼,可變參數肯定是最後一個
         */
        public static void main(String[] args) {
                int[] arr = {11,22,33,44,55};
                //print(arr);
                print(11,22,33,44,55);
                System.out.println("---------------");
                //print();
        }
        
        /*public static void print(int[] arr) {
                for (int i = 0; i < arr.length; i++) {
                        System.out.println(arr[i]);
                }
        }*/
public static void print(int ... arr) {                        //可變參數其實是一個數組
                for (int i = 0; i < 
錯誤!未找到目錄項。
arr.length; i++) {
                        System.out.println(arr[i]);
                }
        }

集合框架(Arrays工具類的asList()方法的使用)(掌握)
* A:案例演示
        * Arrays工具類的asList()方法的使用
                Integer[] i = {1,2,3,4,5};
                List<Integer> l = Arrays.asList(i);//將數組轉成集合只能用引用類型數組
                System.out.println(l);

        * Collection中toArray(T[] a)泛型版的集合轉數組
        
_集合框架(集合嵌套之ArrayList嵌套ArrayList)(掌握)
* A:案例演示
        * 集合嵌套之ArrayList嵌套ArrayList
HashSet方法
1)基本數據類型去掉重覆元素並且無索引(進 出不同)
2)引用數據類型:要重寫toString方法
  如果要去除重覆就要重寫hashCode()方法與equals()方法
Hashcode()設置的原則:/如果對象的成員變數值一樣,那麼就想辦法讓這個方法的返回值一樣,否則讓返回值不一樣
HashSet中想去掉重覆元素必須重寫hashCode()和equals()方法;

LinkedHashSet方法
特點:底層是鏈表實現的 是Set()集合中唯一一個能保證怎麼存怎麼取得功能
因為是HashSet的子類,索引也是保證元素的唯一性

TreeSet 集合: 
一般類型 用來對元素進行排序的並且保證元素的唯一(去除重覆元素,併排序)
引用數據類型:首先:重寫toString()方法;(如果不重寫輸出的是地址值)
實現介面implements comparable<本類名> 此時類名會報錯(ctrl+1) 
自動創建一個方法compareTo(類名) {
判斷成員變數
}
以上三步缺一不可
        /*@Override
        //按照年齡排序
        public int compareTo(Person o) {
                int num = this.age - o.age;        //年齡是比較的主要條件
                return num == 0 ? this.name.compareTo(o.name) : num;//姓名是比較的次要條件
        }*/
        /*@Override
        //按照姓名排序
        public int compareTo(Person o) {
                int num = this.name.compareTo(o.name);                //姓名是主要條件
                return num == 0 ? this.age - o.age : num;        //年齡是次要條件
        }*/
        /*
         * aaa
         * bbb
         */
        public int compareTo(Person o) {
                int length = this.name.length() - o.name.length();                                //比較長度為主要條件
                int num = length == 0 ? this.name.compareTo(o.name) : length;        //比較內容為次要條件
                return num == 0 ? this.age - o.age : num;                                                //比較年齡為次要條件
        }            
面試手寫 
        public boolean equals(Object obj) {
                System.out.println("執行了嗎");
                Person p = (Person)obj;
                return this.name.equals(p.name) && this.age == p.age;
        }
        @Override
        public int hashCode() {
                final int NUM = 38;
                return name.hashCode() * NUM + age;
        }*/

HashSet()
* 1.特點
        * TreeSet是用來排序的, 可以指定一個順序, 對象存入之後會按照指定的順序排列
* 2.使用方式
        * a.自然順序(Comparable)
                * TreeSet類的add()方法中會把存入的對象提升為Comparable類型
                * 調用對象的compareTo()方法和集合中的對象比較
                * 根據compareTo()方法返回的結果進行存儲
        * b.比較器順序(Comparator)
                * 創建TreeSet的時候可以制定 一個Comparator
                * 如果傳入了Comparator的子類對象, 那麼TreeSet就會按照比較器中的順序排序
                * add()方法內部會自動調用Comparator介面中compare()方法排序
                * 調用的對象是compare方法的第一個參數,集合中的對象是compare方法的第二個參數
        * c.兩種方式的區別
                * TreeSet構造函數什麼都不傳, 預設按照類中Comparable的順序(沒有就報錯ClassCastException)
                * TreeSet如果傳入Comparator, 就優先按照Comparator


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 心知天氣數據API 的QPS 在高峰時期已經達到數千的量級,如何承載這樣海量的併發請求,使客戶能穩定及時的獲取到所需數據自然也是心知技術團隊一路以來不斷探索的主題。 ...
  • 提出問題 「領域驅動設計」之於微服務,好比麥當勞之於漢堡(個人更喜歡肯德基,漢堡要大些,麥當勞的漢堡,想吃頓飽飯,請先給我上6個😂)。但是TDD測試驅動、MDD模型驅動好像也很火啊,到底什麼在驅動? 分析問題 不用著急,這是三個5分鐘就能區分開的概念。開發中在協同工作。 首先糾正兩個誤區。DDD是 ...
  • 一.SpringAOP的概述。 AOP(Aspect Oriented Programming),面向切麵編程,通過預編譯方式和運行期間動態代理實現程式的功能的統一維護的技術。AOP是OOP(面向對象編程)的擴展和延伸。舉個例子,讓大家對AOP印象更加深刻點。 比如許可權校驗。實際開發中,我們知道不是 ...
  • 一、JDK的安裝 1、打開下載好的安裝包(我在這裡附上一個百度雲連接,https://pan.baidu.com/s/1o3nx0kbmecAISeneGqykLQ 提取碼:jnw6) 傻瓜式安裝,直接點下一步就行。 2、安裝路徑 安裝路徑隨意,只要不是中文路徑就Ok!!!我比較懶,直接使用的預設安 ...
  • 參考自:https://blog.csdn.net/dreaming__ldx/article/details/84976834 https://blog.csdn.net/acterminate/article/details/79339494 題意: 給你一個數組,將數組裡的所有元素進行全排列, ...
  • 線程的理解應該結合進程來對比理解更直接 如果我們操作系統當做一個工廠的話,那麼創建一個進程就相當於在這個工廠裡面新增了一個車間,車間裡面存放了很多資源,而車間要運行起來很顯然的標誌就是流水線,而這些流水線就是線程,可以說線程是執行代碼的最小單位。 而線程和進程兩者在使用層面上有很大的相似性,所以開啟 ...
  • Python是一種廣泛使用的解釋型、高級編程、通用型編程語言,由吉多·範羅蘇姆創造,第一版發佈於1991年。可以視之為一種改良(加入一些其他編程語言的優點,如面向對象)的LISP。Python的設計哲學強調代碼的可讀性和簡潔的語法(尤其是使用空格縮進劃分代碼塊,而非使用大括弧或者關鍵詞)。相比於C+ ...
  • dubbo集群概述 dubbo集群功能的切入點在ReferenceConfig.createProxy方法以及Protocol.refer方法中。 在ReferenceConfig.createProxy方法中,如果用戶指定多個提供者url或註冊中心url,那麼會創建多個Invoker,然後用Sta ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...