ArrayList相關方法簡述
- List概念
- 1.1 ArrayList常見方法
- 1.1.1 構造器
- 1.1.2 add 方法
- 1.1.3 get和set方法
- 1.1.4 contains 方法
- 1.1.5 remove方法
- 1.1.6 toArray方法
- 1.1.7 asList方法
List概念
存盤的元素有序、可重復,可以理解為存盤物件的陣列,是Connection的子介面,與陣列相比,長度是可變的,可以動態的對集合中的資料進行增加或減少,有兩個比較常見的實作類ArrayList與LinkedList,兩個實作類的方法大致相同,但對資料處理的性能上卻有一定的差異,
這里我就說一下ArrayList相關方法的使用,不喜勿噴…
1.1 ArrayList常見方法
1.1.1 構造器
| 方法名稱 | 方法使用說明 |
|---|---|
| ArrayList() | 構造一個初始容量為10的空串列 |
| ArrayList(Collection<? extends E> c) | 構造一個包含指定集合的元素的串列,它們在集合的迭代器回傳的順序中回傳, |
| ArrayList(int initialCapacity) | 用指定的初始容量構造一個空串列, |
- 問題一:為什么通過ArrayList() 創建的串列初始容量為10?
原始碼決議
/**
* Constructs an empty list with an initial capacity of ten.
*/
public ArrayList() {
this.elementData = DEFAULTCAPACITY_EMPTY_ELEMENTDATA;
}
通過構造器的原始碼注釋可以說名:構造一個初始容量為10的空串列
問題二:通過第二個構造器創建集合時會有什么坑點?
當傳入的是由一個陣列轉變過來的集合時會出現UnsupportedOperationException(當不支持請求的操作時,拋出該例外),需要通過new Array()構造器再次操作,傳入操作后的集合就可以解決該例外問題,
案例演示
//1.構造一個初始容量為十的空串列,
//private static final int DEFAULT_CAPACITY = 10;//原始碼容量私有化
List list_1=new ArrayList();
System.out.println("無參構造器構建list:"+list_1);
//2.構造一個包含指定集合的元素的串列
List<Integer> list_2=new ArrayList<>();
System.out.println("包含指定集合的元素的串列list的size:"+list_2.size());
//3.構造具有指定初始容量的空串列
List<Integer> list_3=new ArrayList<>(3);
System.out.println("指定初始容量的空串列list:"+list_3);
1.1.2 add 方法
- 方法介紹
| 方法名稱 | 方法描述 |
|---|---|
| public boolean add(E e) | 將指定的元素添加到當前串列的尾部 |
| public void add(int index,E element) | 在當前串列的指定位置添加指定元素 |
| public boolean addAll(Collection<? extends E> c) | 將指定的串列添加到此串列的尾部 |
| public boolean addAll( int index,Collection<? extends E e> c ) | 在當前串列的指定位置添加指定的串列 |
- 案例演示
//1、構建初始容量為10的空串列
List<String> list = new ArrayList<>();
//2、測驗add(E e)方法:將元素添加到當前串列的尾部
list.add("彭于晏");
list.add("高圓圓");
//測驗add(int index,E elemtn) 當前表指定位置添加指定元素,
//原來該位置的元素向后移一位
list.add(1,"薛之謙");
//3、測驗addAll(Collection<? extends E > c)
//將指定的串列添加到此串列的尾部
List<String> myList = new ArrayList<>();
myList.add("馬云最帥");
myList.add("聰明絕頂");
list.addAll(myList);
//addAll( int index,Collection<? extends E e> c )與add(int index,E elemtn) 同理
System.out.println("當前串列list中的元素:" + list);
1.1.3 get和set方法
- 方法介紹
| 方法名稱 | 方法描述 |
|---|---|
| public E get(int index) | 回傳此串列指定索引處的元素 |
| public E set(int index ,E element) | 用指定的元素替換此串列中指定位置的元素 |
- 案例演示
List<String> list=new ArrayList<>();
//1.測驗set方法
// IndexOutOfBoundsException -( index < 0 || index >= size()
//list.set(0,"高圓圓");
list.add("高圓圓");
String s1=list.set(0,"佟麗婭");
System.out.println(s1);
//2.測驗get方法
String s2=list.get(0);
System.out.println(s2);
注意:
1. 當在使用set方法是索引的范圍不能大于等于size(),否則會出現ArrayIndexOutOfBoundsException(用非法索引訪問陣列時拋出的例外)
/**
* Checks if the given index is in range. If not, throws an appropriate
* runtime exception. This method does *not* check if the index is
* negative: It is always used immediately prior to an array access,
* which throws an ArrayIndexOutOfBoundsException if index is negative.
*/
private void rangeCheck(int index) {
if (index >= size)
throw new IndexOutOfBoundsException(outOfBoundsMsg(index));
}
因此,操作的索引應該小于size()大小,
- 當需要對操作后的元素進行再次利用時,可以使用set方法進行回收,原因,使用set方法后的回傳值為當前位置的元素,
1.1.4 contains 方法
- 方法介紹
| 方法名稱 | 方法描述 |
|---|---|
| public boolean contains(Object o) | 如果此串列包含指定的元素,則回傳true |
| public boolean containsAll(Collection<?> C) | 如果此串列包含指定的串列,則回傳true |
- 案例演示
//構建初始容量為10的空串列
List<String> list=new ArrayList<>();
//在當前串列尾部添加指定元素
list.add("羅永浩");
list.add("彭于晏");
list.add("鄭伊健");
//判斷當前元素是否存在與串列中
boolean flag=list.contains("星哥");
System.out.println(flag);
List<String> mylist=new ArrayList<>();
mylist.add("蘇焱");
//判斷當前串列中是否包含指定串列元素
boolean myflag=list.containsAll(mylist);
System.out.println(myflag);
注意:
- contains方法判斷元素是否存在是根據元素的equals方法進行比較,若元素中沒有重寫equals方法,那么contains將比較物件,此處我沒有重寫equals方法的原因是,元素為String型別,String類中已經重寫了equals方法,在使用contains方法時關注equals重寫問題
String類中重寫了equals方法的原始碼決議
public boolean equals(Object anObject) {
if (this == anObject) {
return true;
}
if (anObject instanceof String) {
String anotherString = (String)anObject;
int n = value.length;
if (n == anotherString.value.length) {
char v1[] = value;
char v2[] = anotherString.value;
int i = 0;
while (n-- != 0) {
if (v1[i] != v2[i])
return false;
i++;
}
return true;
}
}
return false;
}
1.1.5 remove方法
- 方法介紹
| 方法名稱 | 方法描述 |
|---|---|
| public E remove(int index ) | 洗掉該串列中指定位置的元素 |
| public boolean remove(Object o) | 洗掉該串列中指定的元素 |
| public boolean removeAll(Collection<?> c) | 從此串列中洗掉指定集合包含的所有元素 |
| public boolean retainAll()collection<?> c | 除了集合c中的元素全部洗掉 |
- 案例演示
//構建初始容量為10的空串列
List<String> list=new ArrayList<>();
list.add("羅永浩");
list.add("彭于晏");
list.add("鄭伊健");
//測驗public E remove(int index)
String s1=list.remove(1);
System.out.println("洗掉的元素為:"+s1+"\n洗掉后集合list:"+list);
//測驗public boolean remove(Object o)
boolean flag_1=list.remove("鄭伊健");
System.out.println("洗掉結果為:"+flag_1+"\n洗掉后集合list:"+list);
//測驗public boolean removeAll(Collection<?> c)
List<String> mylist=new ArrayList<>();
mylist.add("李佳琪");
mylist.add("攀哥");
mylist.add("羅永浩");
boolean flag_2=mylist.removeAll(list);
System.out.println("洗掉結果為:"+flag_2+"\n洗掉后集合list:"+mylist);
//測驗public boolean retainAll(Collection<?> c)
mylist.add("羅永浩");
boolean flag_3=mylist.retainAll(list);
System.out.println("洗掉結果為:"+flag_3+"\n洗掉后集合list:"+mylist);
總結:若要對集合操作但是又要將移除的元素進行再次操作時,可以使用set方法和remove方法
1.1.6 toArray方法
- 作用:將集合轉換為陣列
- 方法介紹
| 方法名稱 | 方法描述 |
|---|---|
| public Object[] toArray() | 當回一個包含當前串列所有元素的陣列 |
| public T[] toArray(T[] a) | 當回一個包含當前串列所有元素的陣列,指定型別 |
- 案例演示
//構建初始容量為10的空串列
List<String> list=new ArrayList<>();
//在當前串列的尾部添加元素
list.add("張無忌");
list.add("令狐沖");
list.add("段譽");
//測驗public Object[] toArray()
Object[] o1=list.toArray();
//測驗public <T> T[] toArray(T[] a);
String[] s1=list.toArray(new String[]{});
System.out.println(Arrays.toString(s1));
1.1.7 asList方法
- 方法介紹
| 方法名稱 | 方法描述 |
|---|---|
| public static List asList(T… a) | 回傳由指定陣列支持的一個固定大小的串列 |
- 案例演示
//構建初始容量為10的空串列
List<String> list=new ArrayList<>();
//在當前串列的尾部添加元素
list.add("張無忌");
list.add("令狐沖");
list.add("段譽");
//集合變陣列(toArray()方法)
String[] names = list.toArray(new String[]{});
System.out.println("集合轉陣列:" + Arrays.toString(names));
//陣列轉為集合:Arrays.asList)
List<String> list_6 = Arrays.asList(names);
System.out.println("陣列轉為集合:" + list_6);
//需求:將當前元素串列添加資料、洗掉資料
//此處使用new Array()操作,是為了解決前面說的UnsupportedOperationException例外
List<String> list_new = new ArrayList<>(list_6);
list_new.add("山山");//會出現UnsupportedOperationException,解決方案已給(上一行代碼)
System.out.println("list_new:" + list_new);
謝謝大家閱讀,我會繼續努力提高我的相關技術…
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/241313.html
標籤:java
