<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                ## 一、概述 在編程時,可以使用數組來保存多個對象,但數組長度不可變化,一旦在初始化數組時指定了數組長度,這個數組長度就是不可變的,如果需要保存數量變化的數據,數組就有點無能為力了。而且數組無法保存具有映射關系的數據,如成績表為語文一79,數學一80。這種數據看上去像兩個數組,但這兩個數組的元素之間有一定的關聯關系。 為了保存數量不確定的數據,以及保存具有映射關系的數據,[](http://c.biancheng.net/java/)Java 提供了集合類。Java 所有的集合類都位于 java.util 包下,提供了一個表示和操作對象集合的統一構架,包含大量集合接口,以及這些接口的實現類和操作它們的算法。 > 集合類和數組不一樣,數組元素既可以是基本類型的值,也可以是對象(實際上保存的是對象的引用變量);而集合里只能保存對象(實際上只是保存對象的引用變量,但通常習慣上認為集合里保存的是對象)。 集合框架是一個類庫的集合,包含實現集合的接口。 * Collection 接口:該接口是最基本的集合接口。 * List 接口:該接口實現了 Collection 接口。List 是有序集合,允許有相同的元素。使用 List 能夠精確地控制每個元素插入的位置,用戶能夠使用索引來訪問 List 中的元素,與數組類似。 * Set 接口:該接口也實現了 Collection 接口。它不能包含重復的元素,SortedSet 是按升序排列的 Set 集合。 * Map 接口:包含鍵值對,Map 不能包含重復的鍵。SortedMap 是一個按升序排列的 Map 集合。 :-: ![](http://cndpic.dodoke.com/97337811bb31b2d6c30e29e7e53bc7bf) 【選擇】下列不屬于 Collection 子接口的是()(選擇一項) ``` A. List B. Map C. Queue D. Set ``` ## 二、Collection 接口 Collection 接口是 List 接口和 Set 接口的父接口,通常情況下不被直接使用。Collection 接口定義了一些通用的方法,通過這些方法可以實現對集合的基本操作。 | 方法名稱 | 說明 | | --- | --- | | boolean add(E e) | 向集合中添加一個元素,E 是元素的數據類型 | | boolean addAll(Collection c) | 向集合中添加集合 c 中的所有元素 | | void clear() | 刪除集合中的所有元素 | | boolean contains(Object o) | 判斷集合中是否存在指定元素 | | boolean containsAll(Collection c) | 判斷集合中是否包含集合 c 中的所有元素 | | boolean isEmpty() | 判斷集合是否為空 | | Iterator<E> iterator() | 返回一個 Iterator 對象,用于遍歷集合中的元素 | | boolean remove(Object o) | 從集合中刪除一個指定元素 | | boolean removeAll(Collection c) | 從集合中刪除所有在集合 c 中出現的元素 | | boolean retainAll(Collection c) | 僅僅保留集合中所有在集合 c 中出現的元素 | | int size() | 返回集合中元素的個數 | | Object\[\] toArray() | 返回包含此集合中所有元素的數組 | ## 三、List 集合 List 接口實現了 Collection 接口,它主要有兩個實現類:ArrayList 類和 LinkedList 類。在 List 集合中允許出現重復元素。與 Set 集合不同的是,在 List 集合中的元素是有序的,可以根據索引位置來檢索 List 集合中的元素,第一個添加到 List 集合中的元素的索引為 0,第二個為 1,依此類推。 ### 3.1 ArrayList 類 ArrayList 類提供了快速的基于索引的成員訪問方式,對尾部成員的增加和刪除支持較好。使用 ArrayList 創建的集合,允許對集合中的元素進行快速的隨機訪問,不過,向 ArrayList 中插入與刪除元素的速度相對較慢。 #### ArrayList 類的常用構造方法 * ArrayList():構造一個初始容量為 10 的空列表。 * ArrayList(Collection c):構造一個包含指定 Collection 的元素的列表,這些元素是按照該 Collection 的迭代器返回它們的順序排列的。 #### ArrayList 類的常用方法 | 方法名稱 | 說明 | | --- | --- | | E get(int index) | 獲取集合中指定索引位置的元素,E 為元素的數據類型 | | int index(Object o) | 返回集合中第一次出現指定元素的索引,如果不包含該元素,則返回 -1 | | int lastIndexOf(Object o) | 返回集合中最后一次出現指定元素的索引,如果不包含該元素,則返回 -1 | | E set(int index, E e) | 將此集合中指定索引位置的元素修改為指定的對象。返回此集合中指定索引位置的原元素。 | | List subList(int fromlndex, int tolndex) | 返回一個新的集合,新集合中包含 fromlndex 和 tolndex 索引之間的所有元素。包含 fromlndex 處的元素,不包含 tolndex 索引處的元素。 | 【例題】使用 ArrayList 類向集合中添加三個商品信息,包括商品編號、名稱和價格,然后遍歷集合輸出這些商品信息。 ``` public class Product { private int id; // 商品編號 private String name; // 名稱 private float price; // 價格 public Product(int id, String name, float price) { this.name = name; this.id = id; this.price = price; } // 這里是上面3個屬性的setter/getter方法,這里省略 public String toString() { return "商品編號:" + id + ",名稱:" + name + ",價格:" + price; } } public class Test { public static void main(String[] args) { Product pd1 = new Product(4, "辣條", 10); Product pd2 = new Product(5, "方便面", 12); Product pd3 = new Product(3, "飲料", 49); List list = new ArrayList(); list.add(pd1); list.add(pd2); list.add(pd3); System.out.println("*************** 商品信息 ***************"); for (int i = 0; i < list.size(); i++) { System.out.println((Product) list.get(i)); } } } ``` 【例題】下面的案例代碼演示了 subList() 方法的具體用法。 ``` public static void main(String[] args) { List list = new ArrayList(); list.add("one"); list.add("two"); list.add("three"); list.add("four"); list.add("five"); list.add("six"); list.add("seven"); System.out.println("list 集合中的元素數量:" + list.size()); System.out.println("list 集合中的元素如下:"); Iterator it = list.iterator(); while (it.hasNext()) { System.out.print(it.next() + "、"); } List sublist = new ArrayList(); // 從list集合中截取索引2~5的元素,保存到sublist集合中 sublist = list.subList(2, 5); System.out.println("\nsublist 集合中元素數量:" + sublist.size()); System.out.println("sublist 集合中的元素如下:"); it = sublist.iterator(); while (it.hasNext()) { System.out.print(it.next() + "、"); } } ``` ### 3.2 LinkList 類 LinkedList 類采用鏈表結構保存對象,這種結構的優點是便于向集合中插入或者刪除元素。需要頻繁向集合中插入和刪除元素時,使用 LinkedList 類比 ArrayList 類效果高,但是 LinkedList 類隨機訪問元素的速度則相對較慢。這里的隨機訪問是指檢索集合中特定索引位置的元素。 | 方法名稱 | 說明 | | --- | --- | | void addFirst(E e) | 將指定元素添加到此集合的開頭 | | void addLast(E e) | 將指定元素添加到此集合的末尾 | | E getFirst() | 返回此集合的第一個元素 | | E getLast() | 返回此集合的最后一個元素 | | E removeFirst() | 刪除此集合中的第一個元素 | | E removeLast() | 刪除此集合中的最后一個元素 | 【例題】在倉庫管理系統中要記錄入庫的商品名稱,并且需要輸出第一個錄入的商品名稱和最后—個商品名稱。 ``` public static void main(String[] args) { LinkedList<String> products = new LinkedList<String>(); // 創建集合對象 String p1 = new String("六角螺母"); String p2 = new String("10A 電纜線"); String p3 = new String("5M 卷尺"); String p4 = new String("4CM 原木方板"); products.add(p1); // 將 p1 對象添加到 LinkedList 集合中 products.add(p2); // 將 p2 對象添加到 LinkedList 集合中 products.add(p3); // 將 p3 對象添加到 LinkedList 集合中 products.add(p4); // 將 p4 對象添加到 LinkedList 集合中 String p5 = new String("標準文件夾小柜"); products.addLast(p5); // 向集合的末尾添加p5對象 System.out.print("*************** 商品信息 ***************"); System.out.println("\n目前商品有:"); for (int i = 0; i < products.size(); i++) { System.out.print(products.get(i) + "\t"); } System.out.println("\n第一個商品的名稱為:" + products.getFirst()); System.out.println("最后一個商品的名稱為:" + products.getLast()); products.removeLast(); // 刪除最后一個元素 System.out.println("刪除最后的元素,目前商品有:"); for (int i = 0; i < products.size(); i++) { System.out.print(products.get(i) + "\t"); } } ``` 【選擇】已知 ArrayList 的對象是 list,以下哪個方法是判斷 ArrayList 中包含"dodoke"()(選擇一項) ``` A. list.contains("dodoke"); B. list.add("dodoke"); C. list.remove("dodoke"); D. list.get("dodoke"); ``` 【編程】使用集合 ArrayList 對字符串進行存儲和管理。效果圖如下: ``` 列表中元素的個數為:6 第1個為語文 第2個為數學 第3個為英語 第4個為化學 第5個為物理 第6個為生物 ``` ``` import java.util.ArrayList; import java.util.List; public class ListTest { public static void main(String[] args) { // 用 ArrayList 存儲學科的名稱 // 輸出列表中元素的個數 // 遍歷輸出所有列表元素 } } ``` 【選擇】下列哪個方法可以獲取列表指定位置處的元素()(選擇一項) ``` A. add(E e) B. remove() C. size() D. get(int index) ``` 【編程】定義一個員工信息類 Employee,使用 ArrayList 對員工信息進行添加和顯示。效果如下: ``` 員工姓名 員工薪資 張三 5000.0 李四 5500.0 趙六 4000.0 ``` ``` import java.util.List; import java.util.ArrayList; public class EmployeeTest { public static void main(String[] args) { // 定義 ArrayList 對象 // 創建三個 Employee 類的對象 // 添加員工信息到 ArrayList 中 // 顯示員工的姓名和薪資 } } ``` ## 四、Set 集合 Set 集合也實現了 Collection 接口,它主要有兩個實現類:HashSet 類和 TreeSet類。Set 集合中的對象不按特定的方式排序,只是簡單地把對象加入集合,集合中不能包含重復的對象,并且最多只允許包含一個 null 元素。 ### 4.1 HashSet 類 HashSet 類是按照哈希算法來存儲集合中的元素,使用哈希算法可以提高集合元素的存儲速度,當向 Set 集合中添加一個元素時,HashSet 會調用該元素的 hashCode() 方法,獲取其哈希碼,然后根據這個哈希碼計算出該元素在集合中的存儲位置。 #### HashSet 類的常用構造方法 * HashSet():構造一個新的空的 Set 集合。 * HashSet(Collection c):構造一個包含指定 Collection 集合元素的新 Set 集合。 ``` HashSet hs = new HashSet(); // 調用無參的構造函數創建HashSet對象 HashSet<String> hss = new HashSet<String>(); // 創建泛型的 HashSet 集合對象 ``` 【例題】使用 HashSet 創建一個 Set 集合,并向該集合中添加 5 本圖書名稱。 ``` public static void main(String[] args) { HashSet<String> bookSet = new HashSet<String>(); // 創建一個空的 Set 集合 String book1 = new String("如何成為 Java 編程高手"); String book2 = new String("Java 程序設計一百例"); String book3 = new String("從零學 Java 語言"); String book4 = new String("論 java 的快速開發"); bookSet.add(book1); // 將 book1 存儲到 Set 集合中 bookSet.add(book2); // 將 book2 存儲到 Set 集合中 bookSet.add(book3); // 將 book3 存儲到 Set 集合中 bookSet.add(book4); // 將 book4 存儲到 Set 集合中 System.out.println("新進圖書有:"); Iterator<String> it = bookSet.iterator(); while (it.hasNext()) { System.out.println("《" + (String) it.next() + "》"); // 輸出 Set 集合中的元素 } System.out.println("共采購 " + bookSet.size() + " 本圖書!"); } ``` ### 4.2 TreeSet 類 TreeSet 類同時實現了 Set 接口和 SortedSet 接口。SortedSet 接口是 Set 接口的子接口,可以實現對集合進行自然排序,因此使用 TreeSet 類實現的 Set 接口默認情況下是自然排序的,這里的自然排序指的是升序排序。 TreeSet 只能對實現了 Comparable 接口的類對象進行排序,因為 Comparable 接口中有一個 compareTo(Object o) 方法用于比較兩個對象的大小。例如 a.compareTo(b),如果 a 和 b 相等,則該方法返回 0;如果 a 大于 b,則該方法返回大于 0 的值;如果 a 小于 b,則該方法返回小于 0 的值。 TreeSet 類除了實現 Collection 接口的所有方法之外,還提供了如下方法。 | 方法名稱 | 說明 | | --- | --- | | E first() | 返回集合中的第一個元素。E 表示集合中元素的數據類型 | | E last() | 返回此集合中的最后一個元素 | | E poolFirst() | 獲取并移除此集合中的第一個元素 | | E poolLast() | 獲取并移除此集合中的最后一個元素 | | SortedSet<E> subSet(E fromElement, E toElement) | 返回一個新的集合,新集合包含原集合中 fromElement 對象與?toElement對象之間的所有對象。包含 fromElement 對象,不包含 toElement 對象 | | SortedSet<E> headSet(E toElement) | 返回一個新的集合,新集合包含原集合中 toElement 對象之前的所有對象。不包含 toElement 對象。 | | SortedSet<E> tailSet(E fromElement) | 返回一個新的集合,新集合包含原集合中 fromElement 對象之后的所有對象。包含 fromElement 對象。 | 【例題】本次有 5 名學生參加考試,當老師錄入每名學生的成績后,程序將按照從低到高的排列順序顯示學生成績。此外,老師可以查詢本次考試是否有滿分的學生存在,不及格的成績有哪些,90 分以上成績的學生有幾名。 ``` public static void main(String[] args) { TreeSet<Double> scores = new TreeSet<Double>(); // 創建 TreeSet 集合 Scanner input = new Scanner(System.in); System.out.println("------------學生成績管理系統-------------"); for (int i = 0; i < 5; i++) { System.out.println("第" + (i + 1) + "個學生成績:"); double score = input.nextDouble(); // 將學生成績轉換為Double類型,添加到TreeSet集合中 scores.add(Double.valueOf(score)); } Iterator<Double> it = scores.iterator(); // 創建 Iterator 對象 System.out.println("學生成績從低到高的排序為:"); while (it.hasNext()) { System.out.print(it.next() + "\t"); } System.out.println("\n請輸入要查詢的成績:"); double searchScore = input.nextDouble(); if (scores.contains(searchScore)) { System.out.println("成績為: " + searchScore + " 的學生存在!"); } else { System.out.println("成績為: " + searchScore + " 的學生不存在!"); } // 查詢不及格的學生成績 SortedSet<Double> score1 = scores.headSet(60.0); System.out.println("\n不及格的成績有:"); for (int i = 0; i < score1.toArray().length; i++) { System.out.print(score1.toArray()[i] + "\t"); } // 查詢90分以上的學生成績 SortedSet<Double> score2 = scores.tailSet(90.0); System.out.println("\n90 分以上的成績有:"); for (int i = 0; i < score2.toArray().length; i++) { System.out.print(score2.toArray()[i] + "\t"); } } ``` 【選擇】下列有關 HashSet 的描述正確的是()(選擇兩項) ``` A. HashSet 是 Set 的一個重要實現類 B. HashSet 中的元素無序但可以重復 C. HashSet 中只允許一個 null 元素 D. 不適用于存取和查找 ``` 【選擇】以下關于 Set 對象和創建錯誤的是()(選擇一項) ``` A. Set set = new Set(); B. Set set = new HashSet(); C. HashSet set = new HashSet(); D. Set set = new HashSet(10); ``` 【選擇】關于 Iterator 的描述錯誤的是()(選擇一項) ``` A. Iterator 可以對集合 Set 中的元素進行遍歷 B. hasNext() 方法用于檢查集合中是否還有下一個元素 C. next() 方法返回集合中的下一個元素 D. next() 方法的返回值為 false 時,表示集合中的元素已經遍歷完畢 ``` 【選擇】定義一個 Worker 類,關于 hashCode() 方法的說法正確的是()(選擇一項) ``` A. 在 Worker 類中,hashCode() 方法必須被重寫 B. 如果 hashCode 的值相同,則兩個 Worker 類的對象就認為是相等的 C. hashCode 的值不同時,則兩個對象必定不同 D. 以上說法均正確 ``` 【編程】定義一個學生類,使用 HashSet 對學生類的對象進行管理:執行添加操作,然后解決重復數據的添加問題。 ``` [學號:3,姓名:張三,成績:65.0] [學號:1,姓名:李四,成績:87.0] [學號:2,姓名:王五,成績:95.0] ``` 【選擇】下列相關迭代器描述不正確的是()(選擇一項) ``` A. Iterator 接口可以以統一的方式對各種集合元素進行遍歷 B. hashNext() 是 Iterator 接口的一個方法,是用來檢測集合中是否還有下一個元素 C. next() 是 Iterator 接口的一個方法,是用來返回集合中的下一個元素 D. hasNext() 是 Iterator 接口的一個方法,是用來返回集合中的下一個元素 ``` 【選擇】以下關于 Set 和 List 的說法正確的是()(選擇一項) ``` A. Set 中的元素是可以重復的 B. List 中的元素是無序的 C. HashSet 中只允許有一個 null 元素 D. List 中的元素是不可以重復的 ``` ## 五、Map 集合 Map 是一種鍵-值對(key-value)集合,Map 集合中的每一個元素都包含一個鍵對象和一個值對象。其中,鍵對象不允許重復,而值對象可以重復,并且值對象還可以是 Map 類型的,就像數組中的元素還可以是數組一樣。 Map 接口主要有兩個實現類:HashMap 類和 TreeMap 類。其中,HashMap 類按哈希算法來存取鍵對象,而 TreeMap 類可以對鍵對象進行排序。 Map接口的常用方法 | 方法名稱 | 說明 | | --- | --- | | V get(Object key) | 返回 Map 中指定鍵對象所對應的值。V 表示值的數據類型 | | V put(K key, V value) | 向 Map 中添加鍵-值對,返回 key 以前對應的 value,如果沒有, 則返回 null。 | | V remove(Object key) | 從 Map 中刪除 key 對應的鍵-值對,返回 key 對應的 value,如果沒有,則返回null。 | | Set entrySet() | 返回 Map 中所有鍵-值對的 Set 集合,此 Set 集合中元素的數據類型為 Map.Entry。 | | Set keySet() | 返回 Map 中所有鍵對象的 Set 集合。 | 【例題】每名學生都有屬于自己的唯一編號,即學號。在畢業時需要將該學生的信息從系統中移除。 ``` public static void main(String[] args) { HashMap users = new HashMap(); // 將學生信息鍵值對存儲到 Map 中 users.put("11", "張浩太"); users.put("22", "劉思誠"); users.put("33", "王強文"); users.put("44", "李國量"); users.put("55", "王路路"); System.out.println("******** 學生列表 ********"); Iterator it = users.keySet().iterator(); // 遍歷 Map while (it.hasNext()) { Object key = it.next(); Object val = users.get(key); System.out.println("學號:" + key + ",姓名:" + val); } Scanner input = new Scanner(System.in); System.out.println("請輸入要刪除的學號:"); int num = input.nextInt(); if (users.containsKey(String.valueOf(num))) { // 判斷是否包含指定鍵 users.remove(String.valueOf(num)); // 如果包含就刪除 } else { System.out.println("該學生不存在!"); } System.out.println("******** 學生列表 ********"); it = users.keySet().iterator(); while (it.hasNext()) { Object key = it.next(); Object val = users.get(key); System.out.println("學號:" + key + ",姓名:" + val); } } ``` 【選擇】HashMap 的數據是以 key-value 的形式存儲的,以下關于 HashMap 的說法正確的是()(選擇一項) ``` A. HashMap 中的鍵不能為 null B. HashMap 中的 Entry 對象是有序排列的 C. key 值不允許重復 D. value 值不允許重復 ``` 【編程】已知數據,世界杯冠軍及奪冠年份:德國(2014)、西班牙(2010)、意大利(2006)、巴西(2002)、法國(1998),將奪冠年份作為 key 值,冠軍隊名作為 value 值,存儲至少三條數據到 HashMap 中,并循環打印輸出如下: ``` 使用迭代器方法進行輸出: 意大利 德國 西班牙 使用 EntrySet 進行輸出: 2006-意大利 2014-德國 2010-西班牙 ``` ``` import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.Map.Entry; import java.util.Set; public class FootballTest { public static void main(String[] args) { // 定義 HashMap 的對象并添加數據 // 使用迭代器的方式遍歷 // 使用 EntrySet 同時獲取 key 和 value } } ``` 【選擇】已知 HashMap 對象,空白處應添加的語句是()(選擇一項) ``` Map<String, String> hashMap = new HashMap<>(); hashMap.put("1", "stu01"); hashMap.put("2", "stu02"); Set<String> keySet = hashMap.keySet(); for (String key : keySet) { // 根據 key 值輸出 value 的值 System.out.println( ); } ``` ``` A. hashMap.get(key); B. hashMap.getValue(); C. hashMap.getKey(); D. hashMap.Value(); ```
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看