欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java ArrayList中存放引用數(shù)據(jù)類型的方式

 更新時(shí)間:2021年10月27日 08:45:37   作者:小白的學(xué)習(xí)筆記  
這篇文章主要介紹了Java ArrayList中存放引用數(shù)據(jù)類型的方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

ArrayList中存放引用數(shù)據(jù)類型

ArrayList中存放引用類型時(shí),存放的是一個(gè)引用,因此在放入ArrayList之后再進(jìn)行改動(dòng)會(huì)影響到ArrayList中的值

看下面一個(gè)例子

import java.util.ArrayList;
public class Student implements Cloneable{
    private int age;
    private String name;
    public static void main(String[] args) {
        ArrayList<Student> students = new ArrayList<Student>();
        Student st = new Student();
        st.age = 10;
        st.name = "marco";
        students.add(st);
        st.age = 20;    //修改age值
        System.out.println(students.get(0).age);    //輸出為20
    }
}

同樣,如果ArrayList中存放的也是ArrayList類型,如ArrayList<ArrayList<Integer>>,對(duì)里面ArrayList的修改同樣會(huì)影響到外層的ArrayList,如果想不受到影響可以在放入ArrayList時(shí)進(jìn)行clone操作,對(duì)于ArrayList來(lái)說(shuō)可以使用new ArrayList<ArrayList<Integer>>(list)來(lái)進(jìn)行復(fù)制。

Java 引用數(shù)據(jù)類型 ArrayList集合

引用數(shù)據(jù)類型(類)

分類

提到引用數(shù)據(jù)類型(類),其實(shí)我們對(duì)它并不陌生,如使用過(guò)的Scanner類、Random類。

我們可以把類的類型為兩種:

  • 第一種,Java為我們提供好的類,如Scanner類,Random類等,這些已存在的類中包含了很多的方法與屬性,可供我們使用。
  • 第二種,我們自己創(chuàng)建的類,按照類的定義標(biāo)準(zhǔn),可以在類中包含多個(gè)方法與屬性,來(lái)供我們使用。

類的定義和使用

java代碼映射成現(xiàn)實(shí)事物的過(guò)程就是定義類的過(guò)程。

我們就拿一部手機(jī)進(jìn)行分析,它能用來(lái)做什么呢?它可以打電話,上網(wǎng),聊微信等,這些就是手機(jī)所提供的功能,也就是方法;手機(jī)也有它的特征,如顏色、尺寸大小、品牌型號(hào)等,這些就是手機(jī)的特征,也就是屬性。

目前,我們只關(guān)注類中的屬性,類中的方法在面向?qū)ο蟛糠衷龠M(jìn)行學(xué)習(xí)。

類的定義格式

創(chuàng)建java文件,與類名相同
public class 類名{
    數(shù)據(jù)類型  屬性名稱1;
    數(shù)據(jù)類型  屬性名稱2;
    …
}

例如:

public class Phone {
    /*
     * 屬性
     */
    String brand;// 品牌型號(hào)
    String color;// 顏色
    double size; // 尺寸大小
}

類的使用方式

有如下步驟

  • 導(dǎo)包:我們將所有的類放到同一個(gè)文件夾下,可以避免導(dǎo)包。
  • 創(chuàng)建對(duì)象:數(shù)據(jù)類型 變量名 = new 數(shù)據(jù)類型();
  • 調(diào)用方法:目前我們定義的自定義類不涉及方法,只是屬性(自定義類中的方法部分在面向?qū)ο蟛糠种v解)
  • 訪問(wèn)屬性:變量名.屬性(這是當(dāng)前的方式,后期會(huì)采取調(diào)用方法的方式替代掉直接訪問(wèn)的方式來(lái)完成對(duì)屬性的訪問(wèn)。)

當(dāng)有了Phone數(shù)據(jù)類型的變量后,我們就可以使用Phone類中的屬性了。對(duì)屬性的訪問(wèn)我們來(lái)演示一下,如下所示:

public class Test {
    public static void main(String[] args) {
        //定義了一個(gè)Phone類型的變量p
        Phone p = new Phone();
        /*
         * 通過(guò)p,使用Phone中的屬性
         */
        //訪問(wèn)p中的brand品牌屬性
     p.brand = "蘋果6s";
    //訪問(wèn)p中的color顏色屬性
        p.color = "白色";
       //訪問(wèn)p中的size尺寸大小屬性
        p.size = 5.5;
        System.out.println("手機(jī)品牌為" + p.brand);
        System.out.println("手機(jī)顏色為" + p.color);
        System.out.println("手機(jī)尺寸大小為" + p.size);
    }
}

自定義類的內(nèi)存圖演示:

上述代碼中,通過(guò)類Phone創(chuàng)建出來(lái)的變量p,它相當(dāng)于我們生活中的盒子,里面包含了它能夠使用的屬性。

通過(guò) p.屬性名 就可以對(duì)屬性進(jìn)行操作

與引用類型數(shù)組類似,引用類型的自定義類型的變量,直接變量時(shí),結(jié)果為對(duì)象地址值,這里可以通過(guò)內(nèi)存圖簡(jiǎn)單解釋。

ArrayList 集合

ArrayList集合是程序中最常見(jiàn)的一種集合,它屬于引用數(shù)據(jù)類型(類)。在ArrayList內(nèi)部封裝了一個(gè)長(zhǎng)度可變的數(shù)組,當(dāng)存入的元素超過(guò)數(shù)組長(zhǎng)度時(shí),ArrayList會(huì)在內(nèi)存中分配一個(gè)更大的數(shù)組來(lái)存儲(chǔ)這些元素,因此可以將ArrayList集合看作一個(gè)長(zhǎng)度可變的數(shù)組。

創(chuàng)建

導(dǎo)包:import java.util.ArrayList;

創(chuàng)建對(duì)象:與其他普通的引用數(shù)據(jù)類型創(chuàng)建方式完全相同,但是要指定容器中存儲(chǔ)的數(shù)據(jù)類型:

ArrayList<要存儲(chǔ)元素的數(shù)據(jù)類型> 變量名 = new ArrayList<要存儲(chǔ)元素的數(shù)據(jù)類型>();

l 集合中存儲(chǔ)的元素,只能為<>括號(hào)中指定的數(shù)據(jù)類型元素;

l “<要存儲(chǔ)元素的數(shù)據(jù)類型>”中的數(shù)據(jù)類型必須是引用數(shù)據(jù)類型,不能是基本數(shù)據(jù)類型;

下面給出8種基本數(shù)據(jù)類型所對(duì)應(yīng)的引用數(shù)據(jù)類型表示形式:

基本數(shù)據(jù)類型

對(duì)應(yīng)的引用數(shù)據(jù)類型表示形式

byte

Byte

short

Short

Int

Integer

long

Long

float

Float

double

Double

char

Character

boolean

Boolean

下面是一些創(chuàng)建arraylist的實(shí)例:

存儲(chǔ)String類型的元素
ArrayList<String> list = new ArrayList<String>();
存儲(chǔ)int類型的數(shù)據(jù)
ArrayList<Integer> list = new ArrayList<Integer>(); 
存儲(chǔ)Phone類型的數(shù)據(jù)
ArrayList<Phone> list = new ArrayList<Phone>();

方法

返回值類型 方法和描述
boolean add(E e)
將指定的元素添加到集合中
void add(int index, E element)
在列表中指定的位置上插入指定的元素。
boolean addAll(Collection<? extends E> c)
追加指定集合的所有元素到這個(gè)列表的末尾,按他們的指定集合的迭代器返回。
boolean addAll(int index, Collection<? extends E> c)
將指定集合中的所有元素插入到該列表中,從指定位置開(kāi)始。
void clear()
從這個(gè)集合中移除所有的元素。
Object clone()
返回該 ArrayList實(shí)例淺拷貝。
boolean contains(Object o)
返回 true如果這個(gè)列表包含指定元素。
void ensureCapacity(int minCapacity)
增加集合的容量,雖說(shuō)arraylist本省就是可變的,但當(dāng)你可以預(yù)先確定一定容量時(shí),可以增加效率
E get(int index)
返回此列表中指定元素的位置
int indexOf(Object o)
返回此列表中指定元素的第一個(gè)出現(xiàn)的索引,或-如果此列表不包含元素,或- 1。
boolean isEmpty()
返回 true如果此列表不包含元素。
Iterator<E> iterator()
在這個(gè)列表中的元素上返回一個(gè)正確的順序。
int lastIndexOf(Object o)
返回此列表中指定元素的最后一個(gè)發(fā)生的索引,或-如果此列表不包含元素,或- 1。
ListIterator<E> listIterator()
返回列表元素的列表迭代器(在適當(dāng)?shù)捻樞颍?/div>
ListIterator<E> listIterator(int index)
在列表中的元素上返回列表迭代器(在適當(dāng)?shù)捻樞颍?,從列表中的指定位置開(kāi)始。
E remove(int index)
移除此列表中指定位置的元素。
boolean remove(Object o)
從該列表中移除指定元素的第一個(gè)發(fā)生,如果它是存在的。
boolean removeAll(Collection<?> c)
從這個(gè)列表中移除包含在指定集合中的所有元素。
boolean removeIf(Predicate<? super E> filter)
刪除滿足給定謂詞的這個(gè)集合的所有元素。
protected void removeRange(int fromIndex, int toIndex)
從列表中刪除所有的元素的索引 fromIndex之間,包容性,和 toIndex,獨(dú)家。
void replaceAll(UnaryOperator<E> operator)
用將運(yùn)算符應(yīng)用到該元素的結(jié)果替換此列表中的每個(gè)元素。
boolean retainAll(Collection<?> c)
僅保留包含在指定集合中的列表中的元素。
E set(int index, E element)
用指定元素替換此列表中指定位置的元素。
int size()
返回此列表中元素的數(shù)目。
void sort(Comparator<? super E> c)
分類列表使用提供的 Comparator比較元素。
Spliterator<E> spliterator()
創(chuàng)建一個(gè)后期綁定和快速失敗 Spliterator超過(guò)此列表中的元素。
List<E> subList(int fromIndex, int toIndex)
返回一個(gè)視圖之間的指定 fromIndex,包容,和 toIndex這份名單的部分,獨(dú)家。
Object[] toArray()
返回一個(gè)數(shù)組,包含在這個(gè)列表中的所有元素在適當(dāng)?shù)捻樞颍◤牡谝粋€(gè)到最后一個(gè)元素)。
<T> T[] toArray(T[] a)
返回一個(gè)數(shù)組,包含在這個(gè)列表中的所有元素在適當(dāng)?shù)捻樞颍◤牡谝坏阶詈笠粋€(gè)元素);返回?cái)?shù)組的運(yùn)行時(shí)類型是指定的數(shù)組的運(yùn)行時(shí)類型。
void trimToSize()
裝飾這 ArrayList實(shí)例是列表的當(dāng)前容量。

下面是一些實(shí)例:

import java.util.ArrayList;
public class ArrayListDemo01 {
    public static void main(String[] args) {
        // 創(chuàng)建ArrayList集合
        ArrayList<String> list = new ArrayList<String>();
        // 向集合中添加元素
        list.add("stu1");
        list.add("stu2");
        list.add("stu3");
        list.add("stu4");
        // 獲取集合中元素的個(gè)數(shù)
        System.out.println("集合的長(zhǎng)度:" + list.size());
        // 取出并打印指定位置的元素
        System.out.println("第1個(gè)元素是:" + list.get(0));
        System.out.println("第2個(gè)元素是:" + list.get(1));
        System.out.println("第3個(gè)元素是:" + list.get(2));
        System.out.println("第4個(gè)元素是:" + list.get(3));
    }
}

注意:ArrayList集合相當(dāng)于是一個(gè)長(zhǎng)度可變的數(shù)組,所以訪問(wèn)集合中的元素也是采用索引方式訪問(wèn),第一個(gè)元素存儲(chǔ)在索引0的位置,第二個(gè)元素存儲(chǔ)在索引1的位置,依次類推

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 淺談Java操作符與其優(yōu)先級(jí)

    淺談Java操作符與其優(yōu)先級(jí)

    這篇文章主要介紹了淺談Java操作符與其優(yōu)先級(jí),具有一定借鑒價(jià)值,需要的朋友可以了解下。
    2017-12-12
  • Nebula?Graph介紹和SpringBoot環(huán)境連接和查詢操作

    Nebula?Graph介紹和SpringBoot環(huán)境連接和查詢操作

    Nebula?Graph?是一款開(kāi)源的、分布式的、易擴(kuò)展的原生圖數(shù)據(jù)庫(kù),能夠承載包含數(shù)千億個(gè)點(diǎn)和數(shù)萬(wàn)億條邊的超大規(guī)模數(shù)據(jù)集,并且提供毫秒級(jí)查詢,這篇文章主要介紹了Nebula?Graph介紹和SpringBoot環(huán)境連接和查詢,需要的朋友可以參考下
    2022-10-10
  • Java排序算法之冒泡排序的原理及優(yōu)化

    Java排序算法之冒泡排序的原理及優(yōu)化

    這篇文章主要介紹了Java排序算法之冒泡排序的原理及優(yōu)化,冒泡排序的思想很簡(jiǎn)單,遍歷數(shù)組,比較相鄰的兩個(gè)元素,順序錯(cuò)誤就把它們交換,直到整個(gè)數(shù)組排序完成,因?yàn)槊拷?jīng)過(guò)一趟排序,越小的元素會(huì)經(jīng)交換而慢慢“浮”到數(shù)列的頂端,因此叫做冒泡排序,需要的朋友可以參考下
    2023-11-11
  • Spring中的Aware接口詳細(xì)解析

    Spring中的Aware接口詳細(xì)解析

    這篇文章主要介紹了Spring中的Aware接口詳細(xì)解析,Aware是一個(gè)具有標(biāo)識(shí)作用的超級(jí)接口,具體實(shí)現(xiàn)是有子接口去決定的,但是子接口至少要有一個(gè)帶一個(gè)參數(shù)的且返回是空的方法,需要的朋友可以參考下
    2023-12-12
  • mybatis取別名typeAliases標(biāo)簽的位置放錯(cuò)導(dǎo)致報(bào)錯(cuò)的解決

    mybatis取別名typeAliases標(biāo)簽的位置放錯(cuò)導(dǎo)致報(bào)錯(cuò)的解決

    這篇文章主要介紹了mybatis取別名typeAliases標(biāo)簽的位置放錯(cuò)導(dǎo)致報(bào)錯(cuò)的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • Java枚舉學(xué)習(xí)之定義和基本特性詳解

    Java枚舉學(xué)習(xí)之定義和基本特性詳解

    枚舉是JAVA?5.0后增加的一個(gè)重要類型??梢杂脕?lái)表示一組取值范圍固定的變量。本文將通過(guò)示例為大家詳細(xì)講解枚舉的定義和基本特性,感興趣的可以了解一下
    2022-08-08
  • Spring中的接口重試機(jī)制解析

    Spring中的接口重試機(jī)制解析

    這篇文章主要介紹了Spring中的接口重試機(jī)制解析,大家在做項(xiàng)目的時(shí)候,往往會(huì)遇到一些接口由于網(wǎng)絡(luò)抖動(dòng)等問(wèn)題導(dǎo)致接口響應(yīng)超時(shí)等,這時(shí)候我們會(huì)希望能夠按照一定的規(guī)則進(jìn)行接口請(qǐng)求重試,需要的朋友可以參考下
    2024-01-01
  • 歸并排序時(shí)間復(fù)雜度過(guò)程推導(dǎo)詳解

    歸并排序時(shí)間復(fù)雜度過(guò)程推導(dǎo)詳解

    這篇文章主要介紹了C語(yǔ)言實(shí)現(xiàn)排序算法之歸并排序,對(duì)歸并排序的原理及實(shí)現(xiàn)過(guò)程做了非常詳細(xì)的解讀,需要的朋友可以參考下,希望能幫助到你
    2021-08-08
  • Java C++實(shí)現(xiàn)相同MD5加密算法的方式

    Java C++實(shí)現(xiàn)相同MD5加密算法的方式

    這篇文章主要介紹了Java與C++實(shí)現(xiàn)相同MD5加密算法的方法,需要的朋友可以參考下面文章內(nèi)容
    2021-09-09
  • Springboot設(shè)置統(tǒng)一的返回格式的方法步驟

    Springboot設(shè)置統(tǒng)一的返回格式的方法步驟

    在我們應(yīng)用中我們通常與前端交互使用json格式,設(shè)置統(tǒng)一的返回json 格式是非常必要的,本文主要介紹了Springboot設(shè)置統(tǒng)一的返回格式的方法步驟,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-01-01

最新評(píng)論