Java ArrayList中存放引用數據類型的方式
ArrayList中存放引用數據類型
ArrayList中存放引用類型時,存放的是一個引用,因此在放入ArrayList之後再進行改動會影響到ArrayList中的值
看下面一個例子
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>>,對裡面ArrayList的修改同樣會影響到外層的ArrayList,如果想不受到影響可以在放入ArrayList時進行clone操作,對於ArrayList來說可以使用new ArrayList<ArrayList<Integer>>(list)來進行復制。
Java 引用數據類型 ArrayList集合
引用數據類型(類)
分類
提到引用數據類型(類),其實我們對它並不陌生,如使用過的Scanner類、Random類。
我們可以把類的類型為兩種:
- 第一種,Java為我們提供好的類,如Scanner類,Random類等,這些已存在的類中包含瞭很多的方法與屬性,可供我們使用。
- 第二種,我們自己創建的類,按照類的定義標準,可以在類中包含多個方法與屬性,來供我們使用。
類的定義和使用
java代碼映射成現實事物的過程就是定義類的過程。
我們就拿一部手機進行分析,它能用來做什麼呢?它可以打電話,上網,聊微信等,這些就是手機所提供的功能,也就是方法;手機也有它的特征,如顏色、尺寸大小、品牌型號等,這些就是手機的特征,也就是屬性。
目前,我們隻關註類中的屬性,類中的方法在面向對象部分再進行學習。
類的定義格式
創建java文件,與類名相同 public class 類名{ 數據類型 屬性名稱1; 數據類型 屬性名稱2; … }
例如:
public class Phone { /* * 屬性 */ String brand;// 品牌型號 String color;// 顏色 double size; // 尺寸大小 }
類的使用方式
有如下步驟
- 導包:我們將所有的類放到同一個文件夾下,可以避免導包。
- 創建對象:數據類型 變量名 = new 數據類型();
- 調用方法:目前我們定義的自定義類不涉及方法,隻是屬性(自定義類中的方法部分在面向對象部分講解)
- 訪問屬性:變量名.屬性(這是當前的方式,後期會采取調用方法的方式替代掉直接訪問的方式來完成對屬性的訪問。)
當有瞭Phone數據類型的變量後,我們就可以使用Phone類中的屬性瞭。對屬性的訪問我們來演示一下,如下所示:
public class Test { public static void main(String[] args) { //定義瞭一個Phone類型的變量p Phone p = new Phone(); /* * 通過p,使用Phone中的屬性 */ //訪問p中的brand品牌屬性 p.brand = "蘋果6s"; //訪問p中的color顏色屬性 p.color = "白色"; //訪問p中的size尺寸大小屬性 p.size = 5.5; System.out.println("手機品牌為" + p.brand); System.out.println("手機顏色為" + p.color); System.out.println("手機尺寸大小為" + p.size); } }
自定義類的內存圖演示:
上述代碼中,通過類Phone創建出來的變量p,它相當於我們生活中的盒子,裡面包含瞭它能夠使用的屬性。
通過 p.屬性名 就可以對屬性進行操作
與引用類型數組類似,引用類型的自定義類型的變量,直接變量時,結果為對象地址值,這裡可以通過內存圖簡單解釋。
ArrayList 集合
ArrayList集合是程序中最常見的一種集合,它屬於引用數據類型(類)。在ArrayList內部封裝瞭一個長度可變的數組,當存入的元素超過數組長度時,ArrayList會在內存中分配一個更大的數組來存儲這些元素,因此可以將ArrayList集合看作一個長度可變的數組。
創建
導包:import java.util.ArrayList;
創建對象:與其他普通的引用數據類型創建方式完全相同,但是要指定容器中存儲的數據類型:
ArrayList<要存儲元素的數據類型> 變量名 = new ArrayList<要存儲元素的數據類型>();
l 集合中存儲的元素,隻能為<>括號中指定的數據類型元素;
l “<要存儲元素的數據類型>”中的數據類型必須是引用數據類型,不能是基本數據類型;
下面給出8種基本數據類型所對應的引用數據類型表示形式:
基本數據類型 |
對應的引用數據類型表示形式 |
byte |
Byte |
short |
Short |
Int |
Integer |
long |
Long |
float |
Float |
double |
Double |
char |
Character |
boolean |
Boolean |
下面是一些創建arraylist的實例:
存儲String類型的元素 ArrayList<String> list = new ArrayList<String>(); 存儲int類型的數據 ArrayList<Integer> list = new ArrayList<Integer>(); 存儲Phone類型的數據 ArrayList<Phone> list = new ArrayList<Phone>();
方法
返回值類型 | 方法和描述 |
---|---|
boolean | add(E e)
將指定的元素添加到集合中
|
void | add(int index, E element)
在列表中指定的位置上插入指定的元素。
|
boolean | addAll(Collection<? extends E> c)
追加指定集合的所有元素到這個列表的末尾,按他們的指定集合的迭代器返回。
|
boolean | addAll(int index, Collection<? extends E> c)
將指定集合中的所有元素插入到該列表中,從指定位置開始。
|
void | clear()
從這個集合中移除所有的元素。
|
Object | clone()
返回該 ArrayList實例淺拷貝。
|
boolean | contains(Object o)
返回 true如果這個列表包含指定元素。
|
void | ensureCapacity(int minCapacity)
增加集合的容量,雖說arraylist本省就是可變的,但當你可以預先確定一定容量時,可以增加效率
|
E | get(int index)
返回此列表中指定元素的位置
|
int | indexOf(Object o)
返回此列表中指定元素的第一個出現的索引,或-如果此列表不包含元素,或- 1。
|
boolean | isEmpty()
返回 true如果此列表不包含元素。
|
Iterator<E> | iterator()
在這個列表中的元素上返回一個正確的順序。
|
int | lastIndexOf(Object o)
返回此列表中指定元素的最後一個發生的索引,或-如果此列表不包含元素,或- 1。
|
ListIterator<E> | listIterator()
返回列表元素的列表迭代器(在適當的順序)。
|
ListIterator<E> | listIterator(int index)
在列表中的元素上返回列表迭代器(在適當的順序),從列表中的指定位置開始。
|
E | remove(int index)
移除此列表中指定位置的元素。
|
boolean | remove(Object o)
從該列表中移除指定元素的第一個發生,如果它是存在的。
|
boolean | removeAll(Collection<?> c)
從這個列表中移除包含在指定集合中的所有元素。
|
boolean | removeIf(Predicate<? super E> filter)
刪除滿足給定謂詞的這個集合的所有元素。
|
protected void | removeRange(int fromIndex, int toIndex)
從列表中刪除所有的元素的索引 fromIndex之間,包容性,和 toIndex,獨傢。
|
void | replaceAll(UnaryOperator<E> operator)
用將運算符應用到該元素的結果替換此列表中的每個元素。
|
boolean | retainAll(Collection<?> c)
僅保留包含在指定集合中的列表中的元素。
|
E | set(int index, E element)
用指定元素替換此列表中指定位置的元素。
|
int | size()
返回此列表中元素的數目。
|
void | sort(Comparator<? super E> c)
分類列表使用提供的 Comparator比較元素。
|
Spliterator<E> | spliterator()
創建一個後期綁定和快速失敗 Spliterator超過此列表中的元素。
|
List<E> | subList(int fromIndex, int toIndex)
返回一個視圖之間的指定 fromIndex,包容,和 toIndex這份名單的部分,獨傢。
|
Object[] | toArray()
返回一個數組,包含在這個列表中的所有元素在適當的順序(從第一個到最後一個元素)。
|
<T> T[] | toArray(T[] a)
返回一個數組,包含在這個列表中的所有元素在適當的順序(從第一到最後一個元素);返回數組的運行時類型是指定的數組的運行時類型。
|
void | trimToSize()
裝飾這 ArrayList實例是列表的當前容量。
|
下面是一些實例:
import java.util.ArrayList; public class ArrayListDemo01 { public static void main(String[] args) { // 創建ArrayList集合 ArrayList<String> list = new ArrayList<String>(); // 向集合中添加元素 list.add("stu1"); list.add("stu2"); list.add("stu3"); list.add("stu4"); // 獲取集合中元素的個數 System.out.println("集合的長度:" + list.size()); // 取出並打印指定位置的元素 System.out.println("第1個元素是:" + list.get(0)); System.out.println("第2個元素是:" + list.get(1)); System.out.println("第3個元素是:" + list.get(2)); System.out.println("第4個元素是:" + list.get(3)); } }
註意:ArrayList集合相當於是一個長度可變的數組,所以訪問集合中的元素也是采用索引方式訪問,第一個元素存儲在索引0的位置,第二個元素存儲在索引1的位置,依次類推
以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。
推薦閱讀:
- Java中ArrayList與順序表的概念與使用實例
- Java中關於泛型、包裝類及ArrayList的詳細教程
- Java集合的Collection接口和List接口詳解
- java關於list集合做刪除操作時的坑及解決
- Java集合框架之List ArrayList LinkedList使用詳解刨析