Table of Contents
ToggleJava ArrayList Class
實作集合框架的 List 接口,可以隨時增加或刪除元素,使用動態陣列來存儲元素,實現可調整大小陣列的功能,ArrayList Class 介紹常見的 contains 、 indexOf 、 sort 、 stream 、 subList 等方法,了解陣列列表的不同操作和方法,本篇增加了範例,並透過單元測試來驗證產出結果。
檔案目錄
./
+- src
+- test
| +- org
| +- ruoxue
| +- java_147
| +- list
| +- arraylist
| +- ArrayListClassTest.java
單元測試
ArrayList Class Java 提供檢查包含、搜索指定、排序、串流操作列表中的元素。
contains
建立一個 ArrayList ,增加三個元素,檢查包含指定的元素。
@Test
public void contains() {
List<String> list = new ArrayList<>();
list.add("Apple");
list.add("Banana");
list.add("Cherry");
boolean contains = list.contains("Apple");
System.out.println(contains);
assertTrue(contains);
contains = list.contains("Grape");
System.out.println(contains);
assertFalse(contains);
}
true
false
containsAll
ArrayList Class Java 建立一個 ArrayList ,內有三個元素,,檢查包含所有指定的元素。
@Test
public void containsAll() {
List<String> list = new ArrayList<>();
list.add("Apple");
list.add("Banana");
list.add("Cherry");
List<String> list2 = new ArrayList<>();
list2.add("Apple");
list2.add("Banana");
boolean contains = list.containsAll(list2);
System.out.println(contains);
assertTrue(contains);
contains = list2.containsAll(list);
System.out.println(contains);
assertFalse(contains);
}
true
false
indexOf
ArrayList Class Java 建立一個 ArrayList ,內有三個元素,搜索指定元素,傳回索引。
@Test
public void indexOf() {
int expected = 1;
List<String> list = new ArrayList<String>();
list.add("Apple");
list.add("Banana");
list.add("Cherry");
int index = list.indexOf("Banana");
System.out.println(index);
assertEquals(expected, index);
index = list.indexOf("Grape");
System.out.println(index);
assertEquals(-1, index);
}
1
-1
lastIndexOf
ArrayList Class Java 建立一個 ArrayList ,從最後搜索指定元素,傳回索引。
@Test
public void lastIndexOf() {
int expected = 3;
List<String> list = new ArrayList<>();
list.add("Apple");
list.add("Banana");
list.add("Cherry");
list.add("Apple");
int index = list.lastIndexOf("Apple");
System.out.println(index);
assertEquals(expected, index);
index = list.indexOf("Grape");
System.out.println(index);
assertEquals(-1, index);
}
3
-1
sort
ArrayList Class in Java 建立一個 ArrayList ,內有三個元素,排序元素。
@Test
public void sort() {
List<String> list = new ArrayList<>();
list.add("Banana");
list.add("Apple");
list.add("Cherry");
list.sort(Comparator.naturalOrder());
System.out.println(list);
list.add("Grape");
list.sort(Comparator.reverseOrder());
System.out.println(list);
}
[Apple, Banana, Cherry]
[Grape, Cherry, Banana, Apple]
stream
ArrayList Class in Java 建立一個 ArrayList ,內有三個元素,執行串流,取得長度小於 6 的元素。
@Test
public void stream() {
int expectedSize = 1;
List<String> list = new ArrayList<>();
list.add("Apple");
list.add("Banana");
list.add("Cherry");
list = list.stream().filter(e -> e.length() < 6).collect(Collectors.toList());
System.out.println(list);
assertEquals(expectedSize, list.size());
}
[Apple]
parallelStream
ArrayList Class in Java 建立一個 ArrayList ,內有三個元素,並行執行串流。
@Test
public void parallelStream() {
List<String> list = new ArrayList<>();
list.add("Apple");
list.add("Banana");
list.add("Cherry");
list.parallelStream().forEach(System.out::println);
System.out.println("----------");
list.parallelStream().forEachOrdered(System.out::println);
}
Banana
Cherry
Apple
----------
Apple
Banana
Cherry
subList
Java ArrayList Class Eexample 建立一個 ArrayList ,內有三個元素,建立指定位置的子列表 。
@Test
public void subList() {
int expectedSize = 2;
List<String> list = new ArrayList<>();
list.add("Apple");
list.add("Banana");
list.add("Cherry");
System.out.println(list);
List<String> list2 = list.subList(0, 2);
System.out.println(list2);
assertEquals(expectedSize, list2.size());
}
[Apple, Banana, Cherry]
[Apple, Banana]
replaceAll
Java ArrayList Class Eexample 建立一個 ArrayList ,內有三個元素,替換所有元素 。
@Test
public void replaceAll() {
List<String> list = new ArrayList<>();
list.add("Apple");
list.add("Banana");
list.add("Cherry");
list.replaceAll(e -> e.toUpperCase());
System.out.println(list);
}
[APPLE, BANANA, CHERRY]
retainAll
Java ArrayList Class Eexample 建立兩個 ArrayList ,內各有三個元素,只保留相同元素 。
@Test
public void retainAll() {
int expectedSize = 1;
List<String> list = new ArrayList<>();
list.add("Apple");
list.add("Banana");
list.add("Cherry");
List<String> list2 = new ArrayList<>();
list2.add("Apple");
list2.add("Lemon");
list2.add("Mango");
list.retainAll(list2);
System.out.println(list);
assertEquals(expectedSize, list.size());
}
[Apple]
ArrayListClassTest.java
ArrayList Class in Java 新增單元測試,驗證是否符合預期。
package org.ruoxue.java_147.list.arraylist;
import static org.junit.Assert.*;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.stream.Collectors;
import org.junit.Test;
public class ArrayListClassTest {
@Test
public void contains() {
List<String> list = new ArrayList<>();
list.add("Apple");
list.add("Banana");
list.add("Cherry");
boolean contains = list.contains("Apple");
System.out.println(contains);
assertTrue(contains);
contains = list.contains("Grape");
System.out.println(contains);
assertFalse(contains);
}
@Test
public void containsAll() {
List<String> list = new ArrayList<>();
list.add("Apple");
list.add("Banana");
list.add("Cherry");
List<String> list2 = new ArrayList<>();
list2.add("Apple");
list2.add("Banana");
boolean contains = list.containsAll(list2);
System.out.println(contains);
assertTrue(contains);
contains = list2.containsAll(list);
System.out.println(contains);
assertFalse(contains);
}
@Test
public void indexOf() {
int expected = 1;
List<String> list = new ArrayList<>();
list.add("Apple");
list.add("Banana");
list.add("Cherry");
int index = list.indexOf("Banana");
System.out.println(index);
assertEquals(expected, index);
index = list.indexOf("Grape");
System.out.println(index);
assertEquals(-1, index);
}
@Test
public void lastIndexOf() {
int expected = 3;
List<String> list = new ArrayList<>();
list.add("Apple");
list.add("Banana");
list.add("Cherry");
list.add("Apple");
int index = list.lastIndexOf("Apple");
System.out.println(index);
assertEquals(expected, index);
index = list.indexOf("Grape");
System.out.println(index);
assertEquals(-1, index);
}
@Test
public void sort() {
List<String> list = new ArrayList<>();
list.add("Banana");
list.add("Apple");
list.add("Cherry");
list.sort(Comparator.naturalOrder());
System.out.println(list);
list.add("Grape");
list.sort(Comparator.reverseOrder());
System.out.println(list);
}
@Test
public void stream() {
int expectedSize = 1;
List<String> list = new ArrayList<>();
list.add("Apple");
list.add("Banana");
list.add("Cherry");
list = list.stream().filter(e -> e.length() < 6).collect(Collectors.toList());
System.out.println(list);
assertEquals(expectedSize, list.size());
}
@Test
public void parallelStream() {
List<String> list = new ArrayList<>();
list.add("Apple");
list.add("Banana");
list.add("Cherry");
list.parallelStream().forEach(System.out::println);
System.out.println("----------");
list.parallelStream().forEachOrdered(System.out::println);
}
@Test
public void subList() {
int expectedSize = 2;
List<String> list = new ArrayList<>();
list.add("Apple");
list.add("Banana");
list.add("Cherry");
System.out.println(list);
List<String> list2 = list.subList(0, 2);
System.out.println(list2);
assertEquals(expectedSize, list2.size());
}
@Test
public void replaceAll() {
List<String> list = new ArrayList<>();
list.add("Apple");
list.add("Banana");
list.add("Cherry");
list.replaceAll(e -> e.toUpperCase());
System.out.println(list);
}
@Test
public void retainAll() {
int expectedSize = 1;
List<String> list = new ArrayList<>();
list.add("Apple");
list.add("Banana");
list.add("Cherry");
List<String> list2 = new ArrayList<>();
list2.add("Apple");
list2.add("Lemon");
list2.add("Mango");
list.retainAll(list2);
System.out.println(list);
assertEquals(expectedSize, list.size());
}
}
心得分享
Java ArrayList Class Eexample 操作比 LinkedList 慢一點,因為如果從陣列列表中刪除任何元素,則需要進行大量移位,提供了幾種 ArrayList 常見方法的操作範例, ArrayList Class in Java 在應用上相當廣泛,熟悉這些方法的操作,能夠提高開發效率,節省維護上的成本。