」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > Java集合框架

Java集合框架

發佈於2024-11-07
瀏覽:487

问什么是 Java Collection Framework?

Ans Java Collection 框架是一个功能强大的内置库,提供了一组最常用数据结构和算法的优化实现。它广泛用于构建 Java 应用程序和解决实际软件开发问题挑战。


Java集合框架有何优势?

Ans Java Collection 框架的一些优点是

  1. 统一架构:每个数据结构都源自接口,例如可迭代接口和集合接口,提供通用实现的感觉。
  2. 易于使用:它通过提供预构建的数据结构和算法来简化开发过程。开发者可以更加专注于业务逻辑,而不是手动实现和优化常用的数据结构和标准算法。
  3. 灵活性:如果我们想改变底层数据结构,我们可以轻松地做到这一点,而不必担心改变数据结构会改变数据检索和访问模式(大部分)。
  4. 线程安全:由于java提供了一种在不同线程上单独运行进程的方法,Java Collection Framework提供了不同的类来在多线程环境和单线程应用程序中运行。

JAVA 集合框架层次结构

JAVA COLLECTION FRAMEWORK


可迭代接口
Java 中的 Iterable 接口是 Collection Framework 的关键组件。它是所有可迭代集合类型的根接口。实现 Iterable 接口允许对象成为“for-each 循环”(也称为增强 for 循环)的目标。
它还提供了一个迭代器对象,可用于实现此可迭代接口的所有数据结构的前向迭代。

使用 FOR EACH 循环的示例(增强型 FOR 循环)

ArrayList内部实现了List,List Interface扩展了Collection Interface,Collection Interface扩展了Iterable Interface。

List list = new ArrayList();//声明一个数据结构
list.add("Java");//添加元素
list.add("Collections");//添加元素
list.add("Framework");//添加元素
for (String element : list) {//使用增强的for循环进行迭代
System.out.println(element);
}

使用 ITERABLE 对象的示例

Iterator iterator = list.iterator();
while (iterator.hasNext()) {
字符串元素 = iterator.next();
System.out.println(element);
}

因此,我们可以创建自定义可迭代,实现可迭代接口并重写 next、hasNext 和 remove 方法。这是相同的示例。

import java.util.Iterator;
class CustomIterable implements Iterable {
    private final int[] numbers = {1, 2, 3, 4, 5};

    @Override
    public Iterator iterator() {
        return new Iterator() {
            private int index = 0;
            private int lastReturnedIndex = -1;

            @Override
            public boolean hasNext() {
                return index 



笔记 :

  1. Java 中的迭代器是快速失败的。这意味着如果集合在迭代时被修改(除了通过迭代器自己的remove()方法),它会抛出ConcurrentModificationException。
  2. remove() 方法只能删除元素,并且每次调用 next() 时只能调用一次。否则,它将抛出 IllegalStateException。

采集接口

这是数据结构和内部实现变得灵活的接口。大多数类都间接实现此接口,允许通过更改分配给它的 Collection 引用的对象来更改实现。

//ArrayList
Collection c = new ArrayList():
c.add(1);
c.add(2);
c.contains(1);

Collection c1 = new LinkedList():
c1.addAll(c);//Array added to a linked list

/*What if i dont want arraylist but now i want a priority queue for applying efficient algorithms such as findmax and find min*/
//Just Change Object - SIMPLE!
Collection c = new **PriorityQueue**():
c.add(1);
c.add(2);
c.contains(1);

集合接口方法

  1. int size : 返回集合的大小。
  2. boolean isEmpty : 如果集合为空则返回 true。
  3. boolean contains(Object o) :如果集合中存在对象 o,则返回 true。
  4. Iterator iterator() :返回指向集合的迭代器。
  5. Object[] toArray() :将集合转换为 Object 类型的数组。
  6. T[] toArray(T[] a) :返回包含集合所有元素的数组;返回数组的运行时类型是指定数组的运行时类型。
  7. boolean add(E e) :将元素 e 添加到集合中。如果操作成功则返回true。
  8. boolean remove(Object o) :从集合中删除对象 o。如果操作成功则返回true。
  9. boolean containsAll(Collection> c) :如果两个集合中的所有元素相同,则返回 true。如果操作成功则返回 true。 10.boolean addAll(Collection extends E> c) :添加两个集合的所有元素。如果操作成功则返回true。
  10. boolean removeAll(Collection> c) :从调用者集合中删除集合 c 的元素。如果操作成功则返回true。
  11. boolean keepAll(Collection> c) :仅保留集合 c.
  12. 中存在的元素
  13. voidclear() :清除集合中的所有元素。

通过实现集合类,我们可以重写上面的方法来创建自定义集合。以下是相同的示例。

import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.NoSuchElementException;

public class CustomCollection implements Collection {
    private final ArrayList list = new ArrayList();

    @Override
    public int size() {
        return list.size();
    }

    @Override
    public boolean isEmpty() {
        return list.isEmpty();
    }

    @Override
    public boolean contains(Object o) {
        return list.contains(o);
    }

    @Override
    public Iterator iterator() {
        return new Iterator() {
            private int index = 0;

            @Override
            public boolean hasNext() {
                return index  T[] toArray(T[] a) {
        return list.toArray(a);
    }

    @Override
    public boolean add(E e) {
        return list.add(e);
    }

    @Override
    public boolean remove(Object o) {
        return list.remove(o);
    }

    @Override
    public boolean containsAll(Collection> c) {
        return list.containsAll(c);
    }

    @Override
    public boolean addAll(Collection extends E> c) {
        return list.addAll(c);
    }

    @Override
    public boolean removeAll(Collection> c) {
        return list.removeAll(c);
    }

    @Override
    public boolean retainAll(Collection> c) {
        return list.retainAll(c);
    }

    @Override
    public void clear() {
        list.clear();
    }
}


列表接口

Java中的List接口是Java Collections Framework的一部分,并且扩展了Collection接口。它表示一个有序集合(也称为序列),允许位置访问、重复元素以及对其元素进行迭代。 List 接口由几个类实现,例如 ArrayList、LinkedList、Vector 和 Stack。

列表界面的主要特征:

  1. 有序集合:列表保留元素的插入顺序,这意味着可以通过索引访问元素。
  2. 允许重复:列表可以包含重复元素,与不允许重复的集合不同。
  3. 位置访问:可以通过索引访问、添加或删除列表中的元素。
  4. 迭代:List 接口允许增强 for 循环,以及使用 Iterator 或 ListIterator 进行迭代。

List接口常用方法:
所有集合接口方法也由List接口实现,因为List接口扩展了Collection接口。

  1. void add(int index, E element):在此列表中的指定索引处插入指定元素 E。
  2. E get(int index):返回此列表中指定位置的元素。
  3. E remove(int index):删除列表中指定位置的元素。
  4. E set(int index, E element):用指定元素替换此列表中指定位置的元素。
  5. int indexOf(Object o):返回指定元素第一次出现的索引,如果列表不包含该元素,则返回 -1。
  6. int lastIndexOf(Object o):返回指定元素最后一次出现的索引,如果列表不包含该元素,则返回 -1。
  7. List subList(int fromIndex, int toIndex):返回此列表中指定的 fromIndex(包括)和 toIndex(不包括)之间的部分的视图。
import java.util.ArrayList;
import java.util.List;

public class ListExample {
    public static void main(String[] args) {
        List list = new ArrayList();
        list.add("Java");
        list.add("Collections");
        list.add("Framework");

        // Accessing elements by index
        System.out.println("First Element: "   list.get(0));

        // Removing an element by index
        list.remove(1);
        System.out.println("After Removal: "   list);

        // Updating an element
        list.set(1, "Updated Element");
        System.out.println("Updated List: "   list);

        // Using a sublist
        List sublist = list.subList(0, 1);
        System.out.println("Sublist: "   sublist);
    }
}

版本聲明 本文轉載於:https://dev.to/harsh_khanpara_e78fd42c5a/java-collection-framework-4fm8?1如有侵犯,請聯絡[email protected]刪除
最新教學 更多>
  • 從初學者到建構者:掌握 PHP 程式設計藝術
    從初學者到建構者:掌握 PHP 程式設計藝術
    想要學PHP程式設計?逐步指南幫您輕鬆入門!首先,安裝PHP([官方網站](https://www.php.net/))。掌握變數、條件語句和迴圈等基本語法。透過建立一個簡單的登入表單來實踐:提交表單後,處理輸入並驗證憑證。透過這些步驟和練習,您將掌握PHP程式設計的基礎知識。 PHP程式設計入門指...
    程式設計 發佈於2024-11-07
  • 使用 HTML、CSS 和 JavaScript 建立簡單的密碼管理器
    使用 HTML、CSS 和 JavaScript 建立簡單的密碼管理器
    您是否厭倦了使用弱密碼或忘記登入憑證?在本教程中,我們將使用 HTML、CSS 和 JavaScript 建立一個簡單的密碼管理器。此密碼管理器將允許您安全地儲存您的登入憑證並在需要時檢索它們。 代碼:這裡
    程式設計 發佈於2024-11-07
  • 為什麼在向 Spring MVC 控制器發送 JSON 請求時收到 406(不可接受)錯誤?
    為什麼在向 Spring MVC 控制器發送 JSON 請求時收到 406(不可接受)錯誤?
    Spring JSON 請求返回406(不可接受)當嘗試向Spring MVC 控制器發送JSON 請求時,一些用戶遇到“ 406 不可接受」錯誤。此問題源自於請求的內容類型(“application/json”)與控制器的回應能力不符。 在 Spring MVC 中,控制器方法以「@Respons...
    程式設計 發佈於2024-11-07
  • 如何在 Chrome DevTools 中輕鬆識別和監控表單元素事件?
    如何在 Chrome DevTools 中輕鬆識別和監控表單元素事件?
    了解元素互動觸發的事件要在可自訂表單元素上正確識別和處理事件,必須了解互動時觸發的特定事件。 Chrome DevTools 提供了一個強大的工具,monitorEvents,來協助完成此過程。 使用monitorEvents()檢查目標元素: 右鍵單擊該元素並選擇“Inspect”或在DevToo...
    程式設計 發佈於2024-11-07
  • 不到一分鐘即可完成帶有身份驗證和用戶面板的 Laravel + React 項目
    不到一分鐘即可完成帶有身份驗證和用戶面板的 Laravel + React 項目
    我最近在X 上發布了一個視頻,其中我在不到一分鐘的時間內設置了一個帶有身份驗證和用戶個人資料頁面的Laravel React專案!我認為為任何喜歡遵循詳細指南的人分享書面版本會很有幫助。 在本指南中,我將向您展示如何使用React 前端和內建身份驗證快速設定新的Laravel 項目,所有這些都使用...
    程式設計 發佈於2024-11-07
  • Django 請求生命週期解釋
    Django 請求生命週期解釋
    In the world of web development, understanding the request life cycle is crucial for optimizing performance, debugging issues, and building robust app...
    程式設計 發佈於2024-11-07
  • 使用 OpenVINO 和 Postgres 建立快速且有效率的語意搜尋系統
    使用 OpenVINO 和 Postgres 建立快速且有效率的語意搜尋系統
    照片由 real-napster 在 Pixabay上拍摄 在我最近的一个项目中,我必须构建一个语义搜索系统,该系统可以高性能扩展并为报告搜索提供实时响应。我们在 AWS RDS 上使用 PostgreSQL 和 pgvector,并搭配 AWS Lambda 来实现这一目标。面临的挑战是允许用户...
    程式設計 發佈於2024-11-07
  • 如何消除 Matplotlib 大數字刻度標籤中的相對偏移?
    如何消除 Matplotlib 大數字刻度標籤中的相對偏移?
    刪除Matplotlib 軸中的相對偏移在Matplotlib 中針對大量數字進行繪圖可能會導致軸的刻度標籤出現相對偏移。為了說明這一點,請考慮以下繪圖:plot([1000, 1001, 1002], [1, 2, 3])這會在橫座標軸上產生刻度,如下圖所示:0.0 0.5 1.0...
    程式設計 發佈於2024-11-07
  • 為什麼 Python 正規表示式中有時會缺少 \'r\' 前綴?
    為什麼 Python 正規表示式中有時會缺少 \'r\' 前綴?
    Python 正規表示式:「r」前綴之謎在Python 正規表示式領域,神秘的「r」前綴經常引發人們對其必要性的質疑。為了闡明這個主題,讓我們深入研究一個令人費解的場景:丟失“r”的奇怪案例示例1 提出了一個令人費解的觀察結果:import re print(re.sub('\s ', ' ', '...
    程式設計 發佈於2024-11-07
  • 如何在沒有資料庫的情況下根據第一個下拉選擇自動更新下拉選項?
    如何在沒有資料庫的情況下根據第一個下拉選擇自動更新下拉選項?
    如何在不使用資料庫的情況下根據第一個下拉清單中的選擇自動更新第二個下拉清單中的選項您有兩個下拉列表,其中選項不是從資料庫中檢索的。第一個下拉清單允許使用者選擇一個類別。第二個下拉清單中的選項取決於第一個下拉清單中的選擇。 例如,如果使用者在第一個下拉清單中選擇First 選項,第二個下拉清單應顯示選...
    程式設計 發佈於2024-11-07
  • C 中的頭文件
    C 中的頭文件
    什麼是頭文件 C 中的頭文件是帶有「.h」副檔名的文件,其中包含函數、巨集、常數的聲明,有時還包含可以在多個原始檔之間共享的資料類型。 預處理器指令 預處理器指令是程式中的一行,它不是程式語句,而是實際上預處理器的命令。 例如:- #包括 #定義 在此指令中,#...
    程式設計 發佈於2024-11-07
  • 如何解決 Python 中的意外縮排錯誤:逐步指南
    如何解決 Python 中的意外縮排錯誤:逐步指南
    Python 中意外的縮排:解決指南縮排錯誤是 Python 程式設計師常見的挫折感。當一行程式碼的縮排多於或少於預期時,就會出現「意外縮排」錯誤,導致程式碼結構不正確。解決這個問題的方法如下:瞭解縮排規則Python利用縮排來區分程式碼區塊。每個子區塊(例如迴圈和條件語句)必須以一定數量的空格開頭...
    程式設計 發佈於2024-11-07
  • Python 的 Enter 和 Exit 魔術方法是什麼以及如何在上下文管理器中使用它們?
    Python 的 Enter 和 Exit 魔術方法是什麼以及如何在上下文管理器中使用它們?
    理解Python的神奇方法:enter與exitThe enter 和exit 方法是用於處理上下文管理器協定的特殊Python 函數。此協定支援在 with 語句中方便地使用對象,確保正確的初始化和清理。 當將with 語句與定義了enter 和exit 的物件一起使用時方法,它委託以下行為:_...
    程式設計 發佈於2024-11-07
  • 關於 UUID 您需要了解的一切。
    關於 UUID 您需要了解的一切。
    A 通用唯一标识符 (UUID) 是计算机系统中用于唯一标识信息的 128 位标签。 UUID 被设计为在空间和时间上都是唯一的,允许它们在没有中央权威的情况下独立生成,从而最大限度地减少重复的风险。 UUID 有多种用途,包括: 识别数据库中的记录。 标记分布式系统中的对象。 在唯一性至关重要的应...
    程式設計 發佈於2024-11-07
  • Java集合框架
    Java集合框架
    问什么是 Java Collection Framework? Ans Java Collection 框架是一个功能强大的内置库,提供了一组最常用数据结构和算法的优化实现。它广泛用于构建 Java 应用程序和解决实际软件开发问题挑战。 Java集合框架有何优势? Ans Java Collecti...
    程式設計 發佈於2024-11-07

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3