Java集合---ArrayList

来源:https://www.cnblogs.com/e-link/archive/2022/09/02/16651591.html
-Advertisement-
Play Games

集合和數組的區別 共同點:都是存儲數據的容器 不同點:數組的容量是固定的,集合的容量是可變的 ArrayList的構造方法和添加方法 public ArrayList() 創建一個空的集合對象 構造一個初始容量為 10 的空列表。 public boolean add(E element) 將指定的 ...


集合和數組的區別

  共同點:都是存儲數據的容器

   不同點:數組的容量是固定的,集合的容量是可變的

ArrayList的構造方法和添加方法

public ArrayList()

創建一個空的集合對象  構造一個初始容量為 10 的空列表。

public boolean add(E element)  將指定的元素追加到此集合的末尾
public void add(int index, E element) 在此集合中的指定位置插入指定的元素

 

  在出現E的地方我們使用引用數據類型替換即可 , 在<E>中指定數據類型,集合就預設存儲該類型的數據,不是該類型數據就會報錯,

  ArrayList 沒加<E>,可以存儲任意數據類型  

  ArrayList<E>: 可調整大小的數組實現 ;<E>是一種特殊的數據類型,泛型。

  <> 泛型: 對集合容器存儲的數據類型進行限制

  舉例:ArrayList<String> :存儲String類型的元素ArrayList<Student>:存儲Student類型的數據

  ArrayList<String> array = new ArrayList<String>(); :紅字尖括弧裡面的部分可以不寫【jdk7之後】;即ArrayList<String> array = new ArrayList<>();

ArrayList類常用方法

成員方法【E代表元素】

public boolean remove(Object o)刪除指定的元素,返回刪除是否成功
public E remove(int index) 刪除指定索引處的元素,返回被刪除的元素
public E set(int index,E element) 修改指定索引處的元素,返回被修改的元素
public E get(int index) 返回指定索引處的元素
public int size() 返回集合中的元素的個數【類似數組的length】

 

import java.util.ArrayList;

class Test {
    public static void main(String[] args) {
        //創建集合 ,創建一個String類型的集合,
        ArrayList<String> array = new ArrayList<String>();

        //添加元素 預設在末尾追加
        array.add("hello");
        array.add("world");
        array.add("java");

        //public boolean remove(Object o):刪除指定的元素,返回刪除是否成功
       // System.out.println(array.remove("world")); 刪除成功返回True
       // System.out.println(array.remove("javaee")); 沒有這個元素,刪除失敗,返回False

        //public E remove(int index):刪除指定索引處的元素,返回被刪除的元素
//        System.out.println(array.remove(1)); 返回刪除該元素的值,該處返回world這個元素

        //IndexOutOfBoundsException  數組下標越界異常
//        System.out.println(array.remove(3));刪除沒有該下標的元素會造成   數組下標越界異常

        //public E set(int index,E element):修改指定索引處的元素,返回被修改的元素
//        System.out.println(array.set(1,"javaee")); 

        //IndexOutOfBoundsException 數組下標越界異常
//        System.out.println(array.set(3,"javaee"));

        //public E get(int index):返回指定索引處的元素
//        System.out.println(array.get(0));
//        System.out.println(array.get(1));
//        System.out.println(array.get(2));
        //System.out.println(array.get(3)); //IndexOutOfBoundsException數組下標越界異常//public int size():返回集合中的元素的個數
        System.out.println(array.size());

        //輸出集合
        System.out.println("array:" + array);
    }
}

ArrayList存儲字元串並遍歷

  創建一個存儲學生對象的集合,存儲3個學生對象,使用程式實現在控制台遍歷該集合

/*
    思路:
        1:定義學生類
        2:創建集合對象
        3:創建學生對象
        4:添加學生對象到集合中
        5:遍歷集合,採用通用遍歷格式實現
 */

public class ArrayListTest {
    public static void main(String[] args) {
        //創建集合對象
        ArrayList<Student> array = new ArrayList<>();

        //創建學生對象
        Student s1 = new Student("張三", 30);
        Student s2 = new Student("李四", 33);
        Student s3 = new Student("麻子", 18);

        //添加學生對象到集合中
        array.add(s1);
        array.add(s2);
        array.add(s3);

        //遍歷集合,採用通用遍歷格式實現
        for (int i = 0; i < array.size(); i++) {
            Student s = array.get(i);
            System.out.println(s.getName() + "," + s.getAge()); // 列印出student類的屬性
        }
    }

    public class Student { // 一個student類
        private String name; // 私有類
        private int age;

        public Student() { // 空參構造構造方法
        }

        public Student(String name, int age) { // 有參構造方法
            this.name = name;
            this.age = age;
        }

        public String getName() { // 獲取私有屬性方法
            return name;
        }

        public void setName(String name) {  // 獲取私有屬性方法
            this.name = name;
        }

        public int getAge() {  // 獲取私有屬性方法
            return age;
        }

        public void setAge(int age) {   // 獲取私有屬性方法
            this.age = age;
        }
    }
}

鍵盤錄入學生信息到集合

創建一個存儲學生對象的集合,存儲3個學生對象,使用程式實現在控制台遍歷該集合

package array;

import java.util.ArrayList;
import java.util.Scanner;

/*
    思路:
        1:定義學生類,為了鍵盤錄入數據方便,把學生類中的成員變數都定義為String類型
        2:創建集合對象
        3:鍵盤錄入學生對象所需要的數據
        4:創建學生對象,把鍵盤錄入的數據賦值給學生對象的成員變數
        5:往集合中添加學生對象
        6:遍歷集合,採用通用遍歷格式實現
 */
public class ArrayListTest {
    public static void main(String[] args) {
        //創建集合對象
        ArrayList<Student> array = new ArrayList<Student>();

        //為了提高代碼的復用性,我們用方法來改進程式
        addStudent(array);
        addStudent(array);
        addStudent(array);

        //遍歷集合,採用通用遍歷格式實現
        for (int i = 0; i < array.size(); i++) {
            Student s = array.get(i); // 此處獲得的是該集合中元素的地址
            System.out.println(s.getName() + "," + s.getAge());
        }
    }

    /* 兩個明確: 返回值類型:void
    參數:ArrayList<Student> array
    */
    public static void addStudent(ArrayList<Student> array) {
        //鍵盤錄入學生對象所需要的數據,Scanner類
        Scanner sc = new Scanner(System.in);
        System.out.println("請輸入學生姓名:");
        String name = sc.nextLine();
        System.out.println("請輸入學生年齡:");
        int age = sc.nextInt(); //創建學生對象,把鍵盤錄入的數據賦值給學生對象的成員變數
        Student s = new Student();
        s.setName(name);
        s.setAge(age); //往集合中添加學生對象
        array.add(s);
    }

    static class Student {
        private String name;
        private int age;

        public Student() {
        }

        public Student(String name, int age) {
            this.name = name;
            this.age = age;
        }

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }

        public int getAge() {
            return age;
        }

        public void setAge(int age) {
            this.age = age;
        }
    }
}

關於remove()方法的細節問題

package com.heima.test;

import java.util.ArrayList;

public class Test4 {
    /*
        需求:創建一個存儲String的集合
        內部存儲(test,張三,李四,test,test)字元串
        刪除所有的test字元串,刪除後,將集合剩餘元素列印在控制台

        思路:
        1. 創建集合對象
        2. 調用add方法,添加字元串
        3. 遍歷集合,取出每一個字元串元素
        4. 加入if判斷,如果是test字元串,調用remove方法刪除
        5. 列印集合元素

       // 註意: 根據元素進行刪除, 只能刪除集合中的第一個元素
        list.remove("test");
     */
    public static void main(String[] args) {
        // 1. 創建集合對象
        ArrayList<String> list = new ArrayList<>();
        // 2. 調用add方法,添加字元串
        list.add("test");
        list.add("張三");
        list.add("李四");
        list.add("test");
        list.add("test");
        // 3. 遍歷集合,取出每一個字元串元素
        for (int i = 0; i < list.size(); i++) {
            String s = list.get(i);
            // 4. 加入if判斷,如果是test字元串,調用remove方法刪除
            //if(s.equals("test")){}這種方法不推薦,萬一s是一個null,就會出現空指針異常,所以使用常量調用equeals避免產生空指針異常
            if("test".equals(s)){
                list.remove(i);
                i--; //每次刪除目標元素之後,其餘元素會上移將刪除後的下標補齊,然後指針才下移到i+1的下標,判斷元素
            }
        }
        System.out.println(list);
    }
}


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

-Advertisement-
Play Games
更多相關文章
  • JavaScript 預解析 1.預解析 js引擎運行js代碼,分為兩步:預解析、代碼執行 1.預解析:js引擎會把js裡面所有的var還有function提升到當前作用域的最前面 2.代碼執行:按照代碼書寫的順序從上往下執行 2.變數預解析(變數提升)和函數預解析(函數提升) 1.變數提升:就是把 ...
  • Vue路由傳參的兩種方式query和params 點擊打開視頻講解更加詳細 一、router-link 1. 不帶參數 <router-link :to="{name:'home'}"> <router-link :to="{path:'/home'}"> //name,path都行, 建議用nam ...
  • JavaScript 函數 函數概念 函數:就是封裝了一段可以被重覆執行調用的代碼塊,目的就是讓大量的代碼重覆使用 函數的使用 函數的使用 分兩步:聲明函數和調用函數 //1.聲明函數 //function 函數名() { //函數體 //} function sayHi(){ console.lo ...
  • Vue路由跳轉的四種方式用法及區別 點擊打開視頻講解更加詳細 一、router-link <router-link :to="{name:'home'}"> <router-link :to="{path:'/home'}"> //name,path都行, 建議用name // 註意:router- ...
  • 作為一名H5開發人員可以使用hbuilder或apicloud。但是,到打包和發佈時,被申請ios證書和上架ipa文件給了困難。由於官方提供的方法,申請證書需要使用Mac電腦然後使用Mac電腦中的密鑰鏈訪問,去申請證書csr文件。然後再去蘋果開發者中心申請。 但是,Mac或未使用的Mac朋友都被 ...
  • 蒼穹之邊,浩瀚之摯,眰恦之美; 悟心悟性,善始善終,惟善惟道! —— 朝槿《朝槿兮年說》 寫在開頭 提起Java領域中的鎖,是否有種“道不盡紅塵奢戀,訴不完人間恩怨“的”感同身受“之感?細數那些個“玩意兒”,你對Java的熱情是否還如初戀般“人生若只如初見”? Java中對於鎖的實現真可謂是“百花齊 ...
  • 定義:建造者模式也稱為生成器模式,將一個個簡單對象一步步構造成一個複雜的對象,將複雜對象的構建和它的表示分離,使得同樣的構建過程有不同的表示; 主要解決:系統中複雜對象的創建過程,通常由各個部分的子對象採用一定的演算法構成;由於需求的變化 ,這個複雜對象的各個部分通常面臨著劇烈的變化,但是將他們組合在 ...
  • Serverless 架構將成為未來雲計算領域重要的技術架構,將會被更多的業務所採納。進一步深究,Serverless 架構在什麼場景下有優秀的表現,在什麼場景下可能表現得並不是很理想呢?或者說,有哪些場景更適合 Serverless 架構呢? ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...