Java教程 第33章 ArrayList

ArrayList 類是一個可以動態(tài)修改的數(shù)組患雏,與普通數(shù)組的區(qū)別就是它是沒有固定大小的限制,我們可以添加或刪除元素罢维。

ArrayList 繼承了 AbstractList 淹仑,并實現(xiàn)了 List 接口。

第33章_ArrayList_內(nèi)容1.png

ArrayList 類位于 java.util 包中肺孵,使用前需要引入它匀借,語法格式如下:

import java.util.ArrayList; // 引入 ArrayList 類

ArrayList<E> objectName =new ArrayList<>();  // 初始化
  • E: 泛型數(shù)據(jù)類型,用于設(shè)置 objectName 的數(shù)據(jù)類型平窘,只能為引用數(shù)據(jù)類型吓肋。
  • objectName: 對象名。

ArrayList 是一個數(shù)組隊列瑰艘,提供了相關(guān)的添加是鬼、刪除肤舞、修改、遍歷等功能均蜜。

添加元素

ArrayList 類提供了很多有用的方法萨赁,添加元素到 ArrayList 可以使用 add() 方法:

import java.util.ArrayList;

public class RunoobTest {
    public static void main(String[] args) {
        ArrayList<String> sites = new ArrayList<String>();
        sites.add("Google");
        sites.add("Runoob");
        sites.add("Taobao");
        sites.add("Weibo");
        System.out.println(sites);
    }
}

以上實例,執(zhí)行輸出結(jié)果為:

[Google, Runoob, Taobao, Weibo]

訪問元素

訪問 ArrayList 中的元素可以使用 get() 方法:

import java.util.ArrayList;

public class RunoobTest {
    public static void main(String[] args) {
        ArrayList<String> sites = new ArrayList<String>();
        sites.add("Google");
        sites.add("Runoob");
        sites.add("Taobao");
        sites.add("Weibo");
        System.out.println(sites.get(1));  // 訪問第二個元素
    }
}

注意:數(shù)組的索引值從 0 開始兆龙。

以上實例杖爽,執(zhí)行輸出結(jié)果為:

Runoob

修改元素

如果要修改 ArrayList 中的元素可以使用 set() 方法:

import java.util.ArrayList;

public class RunoobTest {
    public static void main(String[] args) {
        ArrayList<String> sites = new ArrayList<String>();
        sites.add("Google");
        sites.add("Runoob");
        sites.add("Taobao");
        sites.add("Weibo");
        sites.set(2, "Wiki"); // 第一個參數(shù)為索引位置,第二個為要修改的值
        System.out.println(sites);
    }
}

以上實例紫皇,執(zhí)行輸出結(jié)果為:

[Google, Runoob, Wiki, Weibo]

刪除元素

如果要刪除 ArrayList 中的元素可以使用 remove() 方法:

import java.util.ArrayList;

public class RunoobTest {
    public static void main(String[] args) {
        ArrayList<String> sites = new ArrayList<String>();
        sites.add("Google");
        sites.add("Runoob");
        sites.add("Taobao");
        sites.add("Weibo");
        sites.remove(3); // 刪除第四個元素
        System.out.println(sites);
    }
}

以上實例慰安,執(zhí)行輸出結(jié)果為:

[Google, Runoob, Taobao]

計算大小

如果要計算 ArrayList 中的元素數(shù)量可以使用 size() 方法:

import java.util.ArrayList;

public class RunoobTest {
    public static void main(String[] args) {
        ArrayList<String> sites = new ArrayList<String>();
        sites.add("Google");
        sites.add("Runoob");
        sites.add("Taobao");
        sites.add("Weibo");
        System.out.println(sites.size());
    }
}

以上實例,執(zhí)行輸出結(jié)果為:

4

迭代數(shù)組列表

我們可以使用 for 來迭代數(shù)組列表中的元素:

import java.util.ArrayList;

public class RunoobTest {
    public static void main(String[] args) {
        ArrayList<String> sites = new ArrayList<String>();
        sites.add("Google");
        sites.add("Runoob");
        sites.add("Taobao");
        sites.add("Weibo");
        for (int i = 0; i < sites.size(); i++) {
            System.out.println(sites.get(i));
        }
    }
}

以上實例聪铺,執(zhí)行輸出結(jié)果為:

Google
Runoob
Taobao
Weibo

也可以使用 for-each 來迭代元素:

import java.util.ArrayList;

public class RunoobTest {
    public static void main(String[] args) {
        ArrayList<String> sites = new ArrayList<String>();
        sites.add("Google");
        sites.add("Runoob");
        sites.add("Taobao");
        sites.add("Weibo");
        for (String i : sites) {
            System.out.println(i);
        }
    }
}

以上實例化焕,執(zhí)行輸出結(jié)果為:

Google
Runoob
Taobao
Weibo

其他的引用類型

ArrayList 中的元素實際上是對象,在以上實例中铃剔,數(shù)組列表元素都是字符串 String 類型撒桨。

如果我們要存儲其他類型,而 <E> 只能為引用數(shù)據(jù)類型键兜,這時我們就需要使用到基本類型的包裝類凤类。

基本類型對應(yīng)的包裝類表如下:

基本類型 引用類型
boolean Boolean
byte Byte
short Short
int Integer
long Long
float Float
double Double
char Character

此外,BigInteger普气、BigDecimal 用于高精度的運算谜疤,BigInteger 支持任意精度的整數(shù),也是引用類型现诀,但它們沒有相對應(yīng)的基本類型夷磕。

ArrayList<Integer> li=new Arraylist<>();     // 存放整數(shù)元素
ArrayList<Character> li=new Arraylist<>();   // 存放字符元素

以下實例使用 ArrayList 存儲數(shù)字(使用 Integer 類型):

import java.util.ArrayList;

public class RunoobTest {
    public static void main(String[] args) {
        ArrayList<Integer> myNumbers = new ArrayList<Integer>();
        myNumbers.add(10);
        myNumbers.add(15);
        myNumbers.add(20);
        myNumbers.add(25);
        for (int i : myNumbers) {
            System.out.println(i);
        }
    }
}

以上實例,執(zhí)行輸出結(jié)果為:

10
15
20
25

ArrayList 排序

Collections 類也是一個非常有用的類仔沿,位于 java.util 包中坐桩,提供的 sort() 方法可以對字符或數(shù)字列表進行排序。

以下實例對字母進行排序:

import java.util.ArrayList;
import java.util.Collections;  // 引入 Collections 類

public class RunoobTest {
    public static void main(String[] args) {
        ArrayList<String> sites = new ArrayList<String>();
        sites.add("Taobao");
        sites.add("Wiki");
        sites.add("Runoob");
        sites.add("Weibo");
        sites.add("Google");
        Collections.sort(sites);  // 字母排序
        for (String i : sites) {
            System.out.println(i);
        }
    }
}

以上實例封锉,執(zhí)行輸出結(jié)果為:

Google
Runoob
Taobao
Weibo
Wiki

以下實例對數(shù)字進行排序:

import java.util.ArrayList;
import java.util.Collections;  // 引入 Collections 類

public class RunoobTest {
    public static void main(String[] args) {
        ArrayList<Integer> myNumbers = new ArrayList<Integer>();
        myNumbers.add(33);
        myNumbers.add(15);
        myNumbers.add(20);
        myNumbers.add(34);
        myNumbers.add(8);
        myNumbers.add(12);

        Collections.sort(myNumbers);  // 數(shù)字排序

        for (int i : myNumbers) {
            System.out.println(i);
        }
    }
}

以上實例绵跷,執(zhí)行輸出結(jié)果為:

8
12
15
20
33
34

Java ArrayList 方法

Java ArrayList 常用方法列表如下:

方法 描述
add() 將元素插入到指定位置的 arraylist 中
addAll() 添加集合中的所有元素到 arraylist 中
clear() 刪除 arraylist 中的所有元素
clone() 復(fù)制一份 arraylist
contains() 判斷元素是否在 arraylist
get() 通過索引值獲取 arraylist 中的元素
indexOf() 返回 arraylist 中元素的索引值
removeAll() 刪除存在于指定集合中的 arraylist 里的所有元素
remove() 刪除 arraylist 里的單個元素
size() 返回 arraylist 里元素數(shù)量
isEmpty() 判斷 arraylist 是否為空
subList() 截取部分 arraylist 的元素
set() 替換 arraylist 中指定索引的元素
sort() 對 arraylist 元素進行排序
toArray() 將 arraylist 轉(zhuǎn)換為數(shù)組
toString() 將 arraylist 轉(zhuǎn)換為字符串
ensureCapacity() 設(shè)置指定容量大小的 arraylist
lastIndexOf() 返回指定元素在 arraylist 中最后一次出現(xiàn)的位置
retainAll() 保留 arraylist 中在指定集合中也存在的那些元素
containsAll() 查看 arraylist 是否包含指定集合中的所有元素
trimToSize() 將 arraylist 中的容量調(diào)整為數(shù)組中的元素個數(shù)
removeRange() 刪除 arraylist 中指定索引之間存在的元素
replaceAll() 將給定的操作內(nèi)容替換掉數(shù)組中每一個元素
removeIf() 刪除所有滿足特定條件的 arraylist 元素
forEach() 遍歷 arraylist 中每一個元素并執(zhí)行特定操作
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市烘浦,隨后出現(xiàn)的幾起案子抖坪,更是在濱河造成了極大的恐慌,老刑警劉巖闷叉,帶你破解...
    沈念sama閱讀 218,682評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件擦俐,死亡現(xiàn)場離奇詭異,居然都是意外死亡握侧,警方通過查閱死者的電腦和手機蚯瞧,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,277評論 3 395
  • 文/潘曉璐 我一進店門嘿期,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人埋合,你說我怎么就攤上這事备徐。” “怎么了甚颂?”我有些...
    開封第一講書人閱讀 165,083評論 0 355
  • 文/不壞的土叔 我叫張陵蜜猾,是天一觀的道長。 經(jīng)常有香客問我振诬,道長蹭睡,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,763評論 1 295
  • 正文 為了忘掉前任赶么,我火速辦了婚禮肩豁,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘辫呻。我一直安慰自己清钥,他們只是感情好,可當我...
    茶點故事閱讀 67,785評論 6 392
  • 文/花漫 我一把揭開白布放闺。 她就那樣靜靜地躺著祟昭,像睡著了一般。 火紅的嫁衣襯著肌膚如雪雄人。 梳的紋絲不亂的頭發(fā)上从橘,一...
    開封第一講書人閱讀 51,624評論 1 305
  • 那天,我揣著相機與錄音础钠,去河邊找鬼。 笑死叉谜,一個胖子當著我的面吹牛旗吁,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播停局,決...
    沈念sama閱讀 40,358評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼很钓,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了董栽?” 一聲冷哼從身側(cè)響起码倦,我...
    開封第一講書人閱讀 39,261評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎锭碳,沒想到半個月后袁稽,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,722評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡擒抛,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年推汽,在試婚紗的時候發(fā)現(xiàn)自己被綠了补疑。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,030評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡歹撒,死狀恐怖莲组,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情暖夭,我是刑警寧澤锹杈,帶...
    沈念sama閱讀 35,737評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站迈着,受9級特大地震影響竭望,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜寥假,卻給世界環(huán)境...
    茶點故事閱讀 41,360評論 3 330
  • 文/蒙蒙 一市框、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧糕韧,春花似錦枫振、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,941評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至雀扶,卻和暖如春杖小,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背愚墓。 一陣腳步聲響...
    開封第一講書人閱讀 33,057評論 1 270
  • 我被黑心中介騙來泰國打工予权, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人浪册。 一個月前我還...
    沈念sama閱讀 48,237評論 3 371
  • 正文 我出身青樓扫腺,卻偏偏與公主長得像,于是被迫代替她去往敵國和親村象。 傳聞我的和親對象是個殘疾皇子笆环,可洞房花燭夜當晚...
    茶點故事閱讀 44,976評論 2 355

推薦閱讀更多精彩內(nèi)容