Rate this post

ArrayList là một phần của framework collection Java và nó là một lớp của gói java.util. Nó cung cấp cho chúng ta mảng động trong Java. Mặc dù, nó có thể chậm hơn so với mảng tiêu chuẩn nhưng có thể hữu ích trong các chương trình cần nhiều thao tác trong mảng. Lớp này được tìm thấy trong gói java.util. Ưu điểm chính của ArrayList là nếu chúng ta khai báo mảng thì cần phải nói đến kích thước nhưng trong ArrayList thì không cần nói đến kích thước ArrayList nếu bạn muốn nói đến kích thước thì bạn có thể làm được.

Các bài viết liên quan:

Hình minh họa:

Ví dụ 1: Việc triển khai sau đây minh họa cách tạo và sử dụng ArrayList có đề cập đến kích thước của nó.

// Java program to demonstrate the
// working of ArrayList in Java

import java.io.*;
import java.util.*;

class ArrayListExample {
	public static void main(String[] args)
	{
		// Size array bang 5
		int n = 5;

		
      //khai bao arraylist voi khoi tao size n
		ArrayList<Integer> arrli
			= new ArrayList<Integer>(n);

	     //thêm object vao cuoi array
		for (int i = 1; i <= n; i++)
			arrli.add(i);

		// in element trong arraylist
		System.out.println(arrli);

		// Remove element at index 3
		arrli.remove(3);

		//hien thi arraylist
		System.out.println(arrli);

		// in tung element trong arraylist
		for (int i = 0; i < arrli.size(); i++)
			System.out.print(arrli.get(i) + " ");
	}
}

Ví dụ 2: Việc triển khai sau đây minh họa cách tạo và sử dụng ArrayList mà không đề cập đến kích thước.

// Java program to demonstrate the
// working of ArrayList in Java

import java.io.*;
import java.util.*;

class ArrayListExample {
	public static void main(String[] args)
	{

		
      //khai bao arraylist voi kich thuoc dong
		ArrayList<Integer> arrli = new ArrayList<>();

		//them tung thanh phan vao array
		for (int i = 1; i <= 5; i++)
			arrli.add(i);

		// in tung element
		System.out.println(arrli);

		// xoa element tai index 3
		arrli.remove(3);

		//hien thi array sau khi xoa
		System.out.println(arrli);

		// in elements tung cai mot
		for (int i = 0; i < arrli.size(); i++)
			System.out.print(arrli.get(i) + " ");
	}
}

Đầu ra:

Đầu ra giống như Ví dụ 1. Vì ArrayList là một mảng động và chúng ta không phải chỉ định kích thước khi tạo nó, nên kích thước của mảng sẽ tự động tăng lên khi chúng ta tự động thêm và xóa các phần tử. Mặc dù việc triển khai thư viện thực tế có thể phức tạp hơn, nhưng sau đây là một ý tưởng rất cơ bản giải thích hoạt động của mảng khi mảng trở nên đầy và nếu chúng ta cố gắng thêm một mục:

  • Tạo bộ nhớ có kích thước lớn hơn trên bộ nhớ heap (ví dụ: bộ nhớ có kích thước gấp đôi).
  • Sao chép các phần tử bộ nhớ hiện tại sang bộ nhớ mới.
  • Mục mới được thêm ngay bây giờ vì hiện có bộ nhớ lớn hơn.
  • Xóa bộ nhớ cũ.

Các tính năng quan trọng của ArrayList:

  • ArrayList kế thừa lớp AbstractList và triển khai List interface.
  • ArrayList được khởi tạo theo kích thước. Tuy nhiên, kích thước sẽ tự động tăng lên nếu collection tăng lên hoặc thu nhỏ lại nếu các đối tượng bị xóa khỏi collection.
  • Java ArrayList cho phép chúng ta truy cập ngẫu nhiên vào danh sách.
  • ArrayList không thể được sử dụng cho các kiểu nguyên thủy, như int, char, v.v. Chúng ta cần một class bao bọc cho những trường hợp như vậy.
  • ArrayList trong Java có thể được xem như một vector trong C++.
  • ArrayList không được Synchronized. Lớp Synchronized tương đương của nó trong Java là Vector.

Hãy hiểu sâu hơn về ArrayList trong Java. Nhìn vào hình ảnh dưới đây:

Trong hình minh họa ở trên, AbstractList, CopyOnWriteArrayList và AbstractSequentialList là các lớp triển khai list interface. Một chức năng riêng biệt được thực hiện trong mỗi class được đề cập.

  • AbstractList: class này được sử dụng để triển khai một danh sách không thể sửa đổi, mà danh sách này chỉ cần mở rộng class AbstractList này và chỉ triển khai các phương thức get() và size().
  • CopyOnWriteArrayList: class này implement list interface. Đây là phiên bản nâng cao của ArrayList trong đó tất cả các sửa đổi (thêm, đặt, xóa, v.v.) được triển khai bằng cách tạo một bản sao mới của danh sách.
  • AbstractSequentialList: class này triển khai interface collection và class AbstractCollection. Class này được sử dụng để implement một danh sách không thể sửa đổi, mà danh sách này chỉ cần mở rộng Lớp AbstractList này và chỉ triển khai các phương thức get() và size().

Constructor trong ArrayList

Để tạo một ArrayList, chúng ta cần tạo một đối tượng của lớp ArrayList. Lớp ArrayList bao gồm các hàm tạo quan trọng cho phép có thể tạo danh sách mảng. Sau đây là các hàm tạo có sẵn trong lớp này:

  1. ArrayList(): Hàm tạo này được sử dụng để xây dựng một danh sách mảng trống. Nếu chúng ta muốn tạo một ArrayList trống với tên arr, thì nó có thể được tạo như sau:
ArrayList arr = new ArrayList();
  1. ArrayList(Collection c): Hàm tạo này được sử dụng để xây dựng một danh sách mảng được khởi tạo với các phần tử từ collection c. Giả sử, chúng ta muốn tạo một mảng ArrayList chứa các phần tử có trong tập hợp c, sau đó, nó có thể được tạo như sau:
ArrayList arr = new ArrayList(c);
  1. ArrayList(int capacity): Hàm tạo này được sử dụng để xây dựng một danh sách mảng với size ban đầu được chỉ định. Giả sử chúng ta muốn tạo một ArrayList với kích thước ban đầu là N, thì nó có thể được tạo như sau:
ArrayList arr = new ArrayList(N);

Các phương thức trong Java ArrayList

  • add(int index, Object element): Phương thức này được sử dụng để chèn một phần tử cụ thể vào một chỉ mục vị trí cụ thể trong danh sách.
  • add(Object o): Phương thức này được sử dụng để thêm một phần tử cụ thể vào cuối danh sách.
  • addAll(Collection C): Phương thức này được sử dụng để nối tất cả các phần tử từ một collection cụ thể vào cuối danh sách được đề cập, theo thứ tự sao cho các giá trị được trả về bởi trình lặp của collection đã chỉ định.
  • addAll(int index, Collection C): Được sử dụng để chèn tất cả các phần tử bắt đầu từ vị trí đã chỉ định từ một collection cụ thể vào danh sách được đề cập.
  • clear(): Phương thức này được sử dụng để xóa tất cả các phần tử khỏi bất kỳ danh sách nào.
  • clone(): Phương thức này được sử dụng để trả về một bản sao nông của ArrayList.
  • contains?(Object o): Trả về true nếu danh sách này chứa phần tử đã chỉ định.
  • ensureCapacity?(int minCapacity) Tăng dung lượng của cá thể ArrayList này, nếu cần, để đảm bảo rằng nó có thể chứa ít nhất số phần tử được chỉ định bởi đối số dung lượng tối thiểu.
  • forEach?(Consumer<? super E> action) Thực hiện hành động đã cho cho từng phần tử của Iterable cho đến khi tất cả các phần tử đã được xử lý hoặc hành động đưa ra một ngoại lệ.
  • get?(int index) Trả về phần tử tại vị trí đã chỉ định trong danh sách này.
  • indexOf(Object O) Chỉ mục lần xuất hiện đầu tiên của một phần tử cụ thể được trả về hoặc -1 trong trường hợp phần tử không có trong danh sách.
  • isEmpty?() Trả về true nếu danh sách này không chứa phần tử nào.
  • lastIndexOf(Object O) Chỉ mục của lần xuất hiện cuối cùng của một phần tử cụ thể được trả về hoặc -1 trong trường hợp phần tử không có trong danh sách.
  • listIterator?() Trả về một trình lặp danh sách trên các phần tử trong danh sách này (theo trình tự thích hợp).
  • listIterator?(int index) Trả về một trình lặp danh sách trên các phần tử trong danh sách này (theo trình tự thích hợp), bắt đầu từ vị trí đã chỉ định trong danh sách.
  • remove?(int index) Xóa phần tử ở vị trí đã chỉ định trong danh sách này.
  • remove?(Object o) Loại bỏ sự xuất hiện đầu tiên của phần tử được chỉ định khỏi danh sách này, nếu nó xuất hiện.
  • removeAll?(Collection c) Xóa khỏi danh sách này tất cả các phần tử của nó được chứa trong collection đã chỉ định.
  • removeIf?(Predicate filter) Xóa tất cả các phần tử của collection này thỏa mãn vị từ đã cho.
  • removeRange?(int fromIndex, int toIndex) Xóa khỏi danh sách này tất cả các phần tử có chỉ mục nằm giữa fromIndex, bao gồm và toIndex, loại trừ.
  • keepAll?(Collection<?> c) Chỉ giữ lại các phần tử trong danh sách này được chứa trong collection đã chỉ định.
  • set?(int index, E element) Thay thế phần tử ở vị trí đã chỉ định trong danh sách này bằng phần tử đã chỉ định.
  • size?() Trả về số phần tử trong danh sách này.
  • spliterator?() Tạo một Spliterator ràng buộc muộn và không nhanh trên các phần tử trong danh sách này.
  • subList?(int fromIndex, int toIndex) Trả về dạng xem của phần danh sách này giữa fromIndex, bao gồm và toIndex, loại trừ đã chỉ định.
  • toArray() Phương thức này được sử dụng để trả về một mảng chứa tất cả các phần tử trong danh sách theo đúng thứ tự.
  • toArray(Object[] O) Nó cũng được sử dụng để trả về một mảng chứa tất cả các phần tử trong danh sách này theo đúng thứ tự giống như phương thức trước đó.
  • trimToSize() Phương thức này được sử dụng để cắt bớt dung lượng của thể hiện của ArrayList theo kích thước hiện tại của danh sách.

Lưu ý: Bạn cũng có thể tạo một ArrayList chung:

ArrayList<Integer> arrli = new ArrayList<Integer>();

Một số điểm chính của ArrayList:

  1. ArrayList là Cấu trúc dữ liệu Array có thể thay đổi kích thước hoặc array có thể mở rộng số lượng phần tử.
  2. Các bản copy ArrayList được cho phép.
  3. Thứ tự chèn được giữ nguyên.
  4. Các đối tượng không đồng nhất được cho phép.
  5. Có thể chèn Null.

Hãy xem cách thực hiện một số thao tác cơ bản trên ArrayList như được liệt kê mà chúng ta sẽ thảo luận thêm bên cạnh việc triển khai mọi thao tác.

  • Thêm phần tử vào List/ Thêm phần tử
  • Thay đổi phần tử/ Đặt phần tử
  • Xóa phần tử/Xóa phần tử
  • Các phần tử lặp lại
  • lấy các phần tử
  • thêm các phần tử ở giữa hai số
  • Sắp xếp các phần tử
  • Kích thước ArrayList

Ví dụ 1: Thêm phần tử

Để thêm một phần tử vào một ArrayList, chúng ta có thể sử dụng phương thức add(). Phương thức này bị quá tải để thực hiện nhiều thao tác dựa trên các tham số khác nhau. Chúng như sau:

  • add(Object): Phương thức này được sử dụng để thêm một phần tử vào cuối ArrayList.
  • add(int index, Object): Phương thức này được sử dụng để thêm một phần tử vào một chỉ mục cụ thể trong ArrayList.

Thí dụ:

// khai bao thu vien utility classes
import java.util.*;

// class ArrayList_ex
class ArrayList_ex {

	//ham main
	public static void main(String args[])
	{
		//tao array voi kieu string
		ArrayList<String> al = new ArrayList<>();

		//them cac element vao arraylist
		al.add("element1");
		al.add("element2");

		
      //them element tai index 1
		al.add(1, "For");

		//in tat ca element trong arraylist
		System.out.println(al);
	}
}

Ví dụ 2: Thay đổi các phần tử

Sau khi thêm các phần tử, nếu chúng ta muốn thay đổi phần tử, có thể thực hiện bằng phương thức set(). Vì một ArrayList được lập chỉ mục, phần tử mà chúng ta muốn thay đổi được tham chiếu bởi chỉ mục của phần tử. Do đó, phương thức này lấy một chỉ mục và phần tử được cập nhật cần được chèn vào chỉ mục đó.

Thí dụ

import java.util.*;

// ArrayList_ex class
class ArrayList_ex {

	// ham main
	public static void main(String args[])
	{
		//tao array voi kieu string
		ArrayList<String> al = new ArrayList<>();

	      //add string vao array
		al.add("ArrayList_ex1");
		al.add("ArrayList_ex2");

		// them object vao index 1
		al.add(1, "ArrayList_ex3");

		// in cac phan tu arraylist
		System.out.println("Initial ArrayList " + al);

		// set phan tu index 1
		al.set(1, "For");

		// in ra phan tu updated Arraylist
		System.out.println("Updated ArrayList " + al);
	}
}

Ví dụ 3: Loại bỏ các phần tử

Để xóa một phần tử khỏi ArrayList, chúng ta có thể sử dụng phương thức remove(). Phương thức này bị quá tải để thực hiện nhiều thao tác dựa trên các tham số khác nhau. Chúng như sau:

remove(Object): Phương thức này được sử dụng để xóa một đối tượng khỏi ArrayList. Nếu có nhiều đối tượng như vậy, thì lần xuất hiện đầu tiên của đối tượng sẽ bị xóa.

remove(int index): Vì một ArrayList được lập chỉ mục, nên phương thức này nhận một giá trị số nguyên, đơn giản là loại bỏ phần tử có tại chỉ mục cụ thể đó trong ArrayList. Sau khi loại bỏ phần tử, tất cả các phần tử được di chuyển sang bên trái để lấp đầy khoảng trống và các chỉ số của đối tượng được cập nhật.

Thí dụ

import java.util.*;

// Main class
class ArrayList_ex {

	// Main driver method
	public static void main(String args[])
	{
		// Creating an object of arraylist class
		ArrayList<String> al = new ArrayList<>();

		// Adding elements to ArrayList
		// Custom addition
		al.add("ArrayList_ex1");
		al.add("ArrayList_ex2");
		// Adding element at specific index
		al.add(1, "For");

		// Printing all elements of ArrayList
		System.out.println("Initial ArrayList " + al);

		// Removing element from above ArrayList
		al.remove(1);

		// Printing the updated Arraylist elements
		System.out.println("After the Index Removal " + al);

		// Removing this word element in ArrayList
		al.remove("ArrayList_ex1");

		// Now printing updated ArrayList
		System.out.println("After the Object Removal "
						+ al);
	}
}

Ví dụ 4: Lặp lại ArrayList

Có nhiều cách để lặp qua ArrayList. Các cách nổi tiếng nhất là sử dụng vòng lặp for cơ bản kết hợp với phương thức get() để lấy phần tử tại một chỉ mục cụ thể và vòng lặp for nâng cao.

Thí dụ

import java.util.*;

// Main class
class ArrayList_ex {

	// Main driver method
	public static void main(String args[])
	{
		// Creating an Arraylist of string type
		ArrayList<String> al = new ArrayList<>();

		// Adding elements to ArrayList
		// using standard add() method
		al.add("ArrayList_ex1");
		al.add("ArrayList_ex2");
		al.add(1, "For");

		// Using the Get method and the
		// for loop
		for (int i = 0; i < al.size(); i++) {

			System.out.print(al.get(i) + " ");
		}

		System.out.println();

		// Using the for each loop
		for (String str : al)
			System.out.print(str + " ");
	}
}

Ví dụ 5-Lấy phần tử

/*package whatever //do not write package name here */

import java.io.*;
import java.util.*;

class ArrayList_ex {
	public static void main (String[] args) {
	ArrayList<Integer> list = new ArrayList();
	// add the number
	list.add(9);
	list.add(5);
	list.add(6);
	System.out.println(list);
	// get method
	Integer n= list.get(1);
	System.out.println("at indext 1 number is:"+n);
	}
}

Ví dụ 6- Cộng các phần tử giữa hai số:

import java.io.*;
import java.util.*;
class ArrayList_ex {
	public static void main(String[] args)
	{
		ArrayList<Integer> list = new ArrayList();
		list.add(1);
		list.add(2);
		list.add(4);
		System.out.println(list);
		// insert missing element 3
		list.add(2, 3);
		System.out.println(list);
	}
}

Ví dụ 7-Sắp xếp phần tử.

import java.io.*;
import java.util.*;

class ArrayList_ex {
	public static void main(String[] args)
	{
		ArrayList<Integer> list = new ArrayList();
		list.add(2);
		list.add(4);
		list.add(3);
		list.add(1);
		System.out.println("Before sorting list:");
		System.out.println(list);
		Collections.sort(list);
		System.out.println("after sorting list:");
		System.out.println(list);
	}
}

Ví dụ 8-Kích thước các phần tử:

import java.io.*;
import java.util.*;
class ArrayList_ex {
	public static void main(String[] args)
	{
		ArrayList<Integer> list = new ArrayList();

		list.add(1);
		list.add(2);
		list.add(3);
		list.add(4);
		int b = list.size();
		System.out.println("The size is :" + b);
	}
}

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *

Contact Me on Zalo
Call now