คลาส ArrayList คืออะไร
ArrayList คือการใช้งานอาร์เรย์ที่ไม่แน่นอนของอินเทอร์เฟซรายการ ซึ่งเป็นส่วนหนึ่งของ Collection Framework ซึ่งรับผิดชอบรายการ (หรืออาร์เรย์แบบไดนามิก) ที่อยู่ในแพ็คเกจ java.utils คลาสนี้ใช้การดำเนินการรายการทางเลือกทั้งหมดและให้วิธีการควบคุมขนาดของอาร์เรย์ที่ใช้ในการจัดเก็บรายการ ArrayList ขึ้นอยู่กับแนวคิดของอาเรย์แบบไดนามิก กล่าวคือความสามารถในการเพิ่มและลบองค์ประกอบในขณะที่เพิ่มหรือลดได้ตามต้องการArrayList เก็บอะไร?
เฉพาะประเภทการอ้างอิง ออบเจ็กต์ใดๆ รวมถึงคลาสของบุคคลที่สาม สตริง สตรีมเอาต์พุต คอลเลกชันอื่นๆ คลาส Wrapper ใช้เพื่อจัดเก็บชนิดข้อมูลดั้งเดิมตัวสร้าง ArrayList
-
อาร์เรย์รายการ()
ตัวสร้างว่างที่มีความจุอาร์เรย์ภายในเริ่มต้น = 10
ArrayList<String> list = new ArrayList<>();ขอแนะนำให้ระบุประเภทของค่าที่เก็บไว้ในวงเล็บมุม ในตัวอย่างด้านบน -
String. -
ArrayList(คอลเลกชัน <? ขยาย E> c)
Constructor ยอมรับคอลเลกชั่นอื่น โดยสร้างอาร์เรย์ใหม่พร้อมกับองค์ประกอบของคอลเลกชั่นที่ส่งผ่าน:
ArrayList<String> list2 = new ArrayList<>(list);ลำดับขององค์ประกอบในรายการใหม่จะเหมือนกับรายการเดิม
-
ArrayList(int ความจุเริ่มต้น)
พารามิเตอร์ Constructor คือค่าของขนาดเริ่มต้นของอาร์เรย์ภายใน
ArrayList<String> list2 = new ArrayList<>(10000);หาก ArrayList พื้นฐานมีพื้นที่ไม่เพียงพอเมื่อมีการเพิ่มองค์ประกอบใหม่ จะมีการสร้างอาร์เรย์ขนาดใหญ่ขึ้นใหม่ และข้อมูลจะถูกคัดลอกไปไว้ในนั้น หากคุณทราบล่วงหน้าเมื่อเขียนโค้ดว่าองค์ประกอบจำนวนมากจะถูกประมวลผลในอาร์เรย์ คุณควรระบุค่าที่มากขึ้นเพื่อวัตถุประสงค์ในการเพิ่มประสิทธิภาพ
วิธีการ ArrayList
-
เพิ่ม(อีอี)
เพิ่มองค์ประกอบใหม่ต่อท้ายรายการ ส่งคืนค่า
boolean-value ( จริง - สำเร็จเท็จ - ไม่ได้เพิ่ม):ArrayList<String> list = new ArrayList<>(); list.add("Hello"); -
เพิ่ม (ดัชนี int องค์ประกอบ E)
เพิ่มองค์ประกอบ
elementที่ดัชนีตำแหน่ง เมื่อเพิ่ม องค์ประกอบทั้งหมดทางด้านขวาของดัชนีที่ระบุจะเลื่อนไปทางขวา 1 ตำแหน่ง:list.add(0, "Amigo");มีประโยชน์มากเมื่อคุณต้องการแทรกองค์ประกอบที่ใดก็ได้ในรายการ แต่สำหรับการแทรกบ่อยครั้งที่จุดเริ่มต้นและตรงกลางของ ArrayList อาจไม่ใช่ตัวเลือกที่ดีนัก คุณควรพิจารณา LinkedList
-
addAll(คอลเลกชัน <? ขยาย E> คอลเลกชัน)
เพิ่มองค์ประกอบทั้งหมดของคอลเลกชันลงในรายการตามลำดับที่ปรากฏในคอลเลกชัน
-
addAll (ดัชนี int, คอลเลกชัน <? ขยาย E> คอลเลกชัน)
Добавление всех элементов
collectionв список начиная с индексаindex. При этом все элементы сдвинутся вправо на количество элементов в спискеcollection:ArrayList<String> secondList = new ArrayList<>(); secondList.addAll(list); System.out.println("First addition: " + secondList); secondList.addAll(1, list); System.out.println("Second addition in the middle: " + secondList);Вывод:
Первое добавление: [Amigo, Hello] Второе добавление в середину: [Amigo, Amigo, Hello, Hello]Методы
addAll()также возвращают boolean-результат добавления элементов. -
clear()
Удаление всех элементов из списка.
- clone()
returns an object-копию массива:
ArrayList<String> copyOfSecondList = (ArrayList<String>) secondList.clone(); secondList.clear(); System.out.println(copyOfSecondList);Вывод:
[Amigo, Amigo, Hello, Hello]Следует обратить внимание, что метод
clone()возвращаетObject, так что после его вызова потребуется сделать приведение к необходимому классу.При клонировании создается новый независимый an object. В примере показано, How очищение клонированного an object не сказалось на составе его клона.
-
contains(Object o)
Проверка наличие an object в списке, возвращает
boolean-meaning.System.out.println(copyOfSecondList.contains("Hello")); System.out.println(copyOfSecondList.contains("Check"));Вывод:
true false -
ensureCapacity(int minCapacity)
Увеличивает размер внутреннего массива, чтобы в него поместилось количество элементов, переданных в
minCapacity. Если массив достаточно вместителен, ниHowие преобразования не производятся.Этот метод полезен, когда возникает потребность вместить большое количество элементов в несколько итераций. Например, при создании списка емкость его внутреннего массива — 10. При загрузке данных по сети они обрабатываются асинхронно порциями и результаты помещаются в массив. Если ожидается доставка 10 000 элементов, может быть неэффективно просто добавлять эти данные каждый раз: достаточно будет в начале обработки вызвать метод
ensureCapaciry(10000)и записывать туда данные по мере необходимости. -
forEach(Consumer<? super E> action)
Обработать в цикле ArrayList можно стандартными способами, цикл for:
// First way for(int i = 0; i< secondList.size(); i++) { System.out.println(secondList.get(i)); } И цикл for-each: // Second way for(String s : secondList) { System.out.println(s); }В классе ArrayList есть метод для обработки каждого element, который называется также, forEach. В качестве аргумента передается реализация интерфейса Consumer, в котором нужно переопределить метод accept():
secondList.forEach(new Consumer<String>() { @Override public void accept(String s) { System.out.println(s); } });Вывод:
Amigo Amigo Hello HelloМетод accept принимает в качестве аргумента очередной элемент того типа, который хранит в себе ArrayList. Пример для Integer:
ArrayList<Integer> integerList = new ArrayList<>(); integerList.forEach(new Consumer<Integer>() { @Override public void accept(Integer integer) { System.out.println(integer); } });Метод
action()будет выполнен для каждого element. -
get(int index)
returns элемент, который расположен в указанной позиции списка.
Если
index < 0orindex >=максимального количества элементов списка, будет выброшено исключениеIndexOutOfBoundsException.Это основной метод получения element из списка, время извлечения element по индексу всегда будет одинаковым, независимо от размера ArrayList.
-
indexOf(Object o)
Метод возвращает индекс первого вхождения element в списке. Если element не существует в списке, метод вернет -1.
-
isEmpty()
Метод возвращает true, если список пустой, false в обратном случае.
Если в списке содержатся только элементы
null, метод вернет false. Иными словами,nullэлементы также учитываются этим методом. -
iterator()
returns итератор для списка для последующего использования в цикле or при любой другой обработке.
Итератор для ArrayList — fail-fast. Это значит, что если коллекция изменится во время итерации, будет выброшено исключение ConcurrentModificationException. Подробнее об fail-fast и его противоположности fail-safe можно почитать здесь.
-
lastIndexOf(Object o)
Функционал метода похож на
indexOf(), отличие в том, что возвращается индекс последнего element в списке.Если элемент не найден, также возвращает -1.
-
remove(int index)
Удаление element в указанной позиции индекса. После удаления сдвигает все элементы влево для заполнения освободившегося пространства.
Если
index<0or>=количество элементов списка, будет выброшено исключениеIndexOutOfBoundsException. В результате метод возвращает элемент, который был удален. -
remove(Object o)
Метод удаляет из списка переданный элемент
o. Если элемент присутствует в списке, он удаляется, а все элементы смещаются влево. Если элемент существует в списке и успешно удален, метод возвращает true, в обратном случае — false. -
removeAll(Collection<?> c)
Если необходимо удалить несколько элементов, не стоит делать это в цикле по условию: гораздо удобнее и безопаснее воспользоваться методом
removeAll(). Он принимает коллекцию элементов, которая будет удалена из списка.Коллекция должна содержать элементы того же типа, которые хранит целевой список. В обратном случае будет выброшен
ClassCastException. Метод вернет true, если список был изменен в результате вызова метода. -
set(int index, E element)
Замена element в указанной позиции
indexна переданныйelement. Индекс также должен быть больше нуля и меньше индекса последнего element, иначе будет выброшено исключениеIndexOutOfBoundsException. -
size()
Лучший способ (практически единственный) для того, чтобы узнать размер массива.
-
sort(Comparator<? super E> c)
Сортировка списка по заданному правилу. Правило сортировки представляет собой реализованный интерфейс
Comparatorс переопределенным методомcompareTo().Переопределение нужно, если коллекция содержит an objectы собственного класса. При работе со стандартными классами (
Integer,Stringи так далее) переопределениеcompareTo()требуется только для нестандартной сортировки. -
toArray()
Превращает список в фиксированный массив. Обратите внимание, что метод возвращает массив an objectов (
Пример:Object[]). Если необходимо привести список в массив an objectов определенного типа, в качестве параметра в метод можно передать массив, куда будут перемещены элементы списков.String[] array = new String[secondList.size()]; secondList.toArray(array); for(int i = 0; i< array.length; i++) { System.out.println(array[i]); }Вывод:
Amigo Amigo Hello Hello
ด้านล่างนี้เป็นวิธีการหลักของ ArrayList
ลิงค์สำหรับอ่านเพิ่มเติม
- บทความ โดยละเอียดเกี่ยวกับอาร์เรย์แบบไดนามิกหรือเจาะจงมากขึ้นเกี่ยวกับ
ArrayListและLinkedListซึ่งมีบทบาทในภาษา Java - บทความเกี่ยวกับ การลบ องค์ประกอบออกจาก ArrayList
- บรรยายเรื่องการทำงานกับ ArrayList ในไดอะแกรมและรูปภาพ
GO TO FULL VERSION