arraylist trong java

ArrayList trong Java được sử dụng để lưu trữ bộ sưu tập các phần tử có kích thước động.

Trái ngược với Mảng được cố định về kích thước, một ArrayList tự động tăng kích thước của nó khi các phần tử mới được thêm vào nó.

ArrayList là một phần của Collection Framework của Java và thực hiện

List

interface

của Java

.

Sau đây là một vài điểm chính cần lưu ý về ArrayList trong Java –

  • Một ArrayList là một mảng có thể resize, còn được gọi là một mảng động.

    Nó tăng kích thước của nó để chứa các phần tử mới và thu nhỏ kích thước khi các phần tử được loại bỏ.

  • ArrayList bên trong sử dụng một mảng để lưu trữ các phần tử.

    Giống như mảng, Nó cho phép bạn lấy các phần tử theo chỉ mục của chúng.

  • Java ArrayList cho phép các giá trị trùng lặp và null.

  • Java ArrayList là một collection theo thứ tự.

    Nó duy trì thứ tự chèn của các phần tử.

  • Bạn không thể tạo một ArrayList với loại dữ liệu nguyên thủy như

    int

    ,

    char

    Bạn cần phải sử dụng các các kiểu dữ liệu tham chiếu như

    Integer

    ,

    Character

    ,

    Boolean

    ,

1. Tạo một ArrayList và thêm các phần tử mới cho nó

Ví dụ này cho thấy:

  • Cách tạo một ArrayList bằng cách sử dụng constructor

    ArrayList()

    để khởi tạo.

  • Thêm các phần tử mới vào một ArrayList bằng phương thức

    add()

    .

import

java

.

util

.

ArrayList

;

import

java

.

util

.

List

;

public

class

CreateArrayListExample

{

public

static

void

main

(

String

[

]

args

)

{

// Creating an ArrayList of String

List

<

String

>

animals

=

new

ArrayList

<

>

(

)

;

// Adding new elements to the ArrayList

animals

.

add

(

“Lion”

)

;

animals

.

add

(

“Tiger”

)

;

animals

.

add

(

“Cat”

)

;

animals

.

add

(

“Dog”

)

;

System

.

out

.

println

(

animals

)

;

// Adding an element at a particular index in an ArrayList

animals

.

add

(

2

,

“Elephant”

)

;

System

.

out

.

println

(

animals

)

;

}

}

# Output

[

Lion, Tiger, Cat, Dog

]

[

Lion, Tiger, Elephant, Cat, Dog

]

2. Tạo một ArrayList từ Collection khác

Ví dụ này cho thấy:

  • Cách tạo ArrayList từ collectionkhác bằng cách sử dụng hàm

    ArrayList(Collection c)

    tạo.

  • Cách thêm tất cả các phần tử từ một collectionhiện có vào ArrayList mới bằng

    addAll()

    phương thức.

import

java

.

util

.

ArrayList

;

import

java

.

util

.

List

;

public

class

CreateArrayListFromCollectionExample

{

public

static

void

main

(

String

[

]

args

)

{

List

<

Integer

>

firstFivePrimeNumbers

=

new

ArrayList

<

>

(

)

;

firstFivePrimeNumbers

.

add

(

2

)

;

firstFivePrimeNumbers

.

add

(

3

)

;

firstFivePrimeNumbers

.

add

(

5

)

;

firstFivePrimeNumbers

.

add

(

7

)

;

firstFivePrimeNumbers

.

add

(

11

)

;

// Creating an ArrayList from another collection

List

<

Integer

>

firstTenPrimeNumbers

=

new

ArrayList

<

>

(

firstFivePrimeNumbers

)

;

List

<

Integer

>

nextFivePrimeNumbers

=

new

ArrayList

<

>

(

)

;

nextFivePrimeNumbers

.

add

(

13

)

;

nextFivePrimeNumbers

.

add

(

17

)

;

nextFivePrimeNumbers

.

add

(

19

)

;

nextFivePrimeNumbers

.

add

(

23

)

;

nextFivePrimeNumbers

.

add

(

29

)

;

// Adding an entire collection to an ArrayList

firstTenPrimeNumbers

.

addAll

(

nextFivePrimeNumbers

)

;

System

.

out

.

println

(

firstTenPrimeNumbers

)

;

}

}

# Output

[

2

,

3

,

5

,

7

,

11

,

13

,

17

,

19

,

23

,

29

]

3. Truy cập các phần tử từ một ArrayList

Ví dụ này cho thấy:

  • Làm thế nào để kiểm tra nếu một ArrayList trống bằng cách sử dụng

    isEmpty()

    phương thức.

  • Cách tìm kích thước của một ArrayList bằng

    size()

    phương thức.

  • Cách truy cập phần tử tại một chỉ mục cụ thể trong ArrayList bằng

    get()

    phương thức.

  • Cách sửa đổi phần tử tại một chỉ mục cụ thể trong ArrayList bằng

    set()

    phương thức.

import

java

.

util

.

ArrayList

;

import

java

.

util

.

List

;

public

class

AccessElementsFromArrayListExample

{

public

static

void

main

(

String

[

]

args

)

{

List

<

String

>

topCompanies

=

new

ArrayList

<

>

(

)

;

// Check if an ArrayList is empty

System

.

out

.

println

(

“Is the topCompanies list empty? : “

+

topCompanies

.

isEmpty

(

)

)

;

topCompanies

.

add

(

“Google”

)

;

topCompanies

.

add

(

“Apple”

)

;

topCompanies

.

add

(

“Microsoft”

)

;

topCompanies

.

add

(

“Amazon”

)

;

topCompanies

.

add

(

“Facebook”

)

;

// Find the size of an ArrayList

System

.

out

.

println

(

“Here are the top “

+

topCompanies

.

size

(

)

+

” companies in the world”

)

;

System

.

out

.

println

(

topCompanies

)

;

// Retrieve the element at a given index

String

bestCompany

=

topCompanies

.

get

(

0

)

;

String

secondBestCompany

=

topCompanies

.

get

(

1

)

;

String

lastCompany

=

topCompanies

.

get

(

topCompanies

.

size

(

)

1

)

;

System

.

out

.

println

(

“Best Company: “

+

bestCompany

)

;

System

.

out

.

println

(

“Second Best Company: “

+

secondBestCompany

)

;

System

.

out

.

println

(

“Last Company in the list: “

+

lastCompany

)

;

// Modify the element at a given index

topCompanies

.

set

(

4

,

“Walmart”

)

;

System

.

out

.

println

(

“Modified top companies list: “

+

topCompanies

)

;

}

}

# Output

Is the topCompanies list empty?

:

true

Here are the

top

5

companies

in

the world

[

Google, Apple, Microsoft, Amazon, Facebook

]

Best Company: Google
Second Best Company: Apple
Last Company

in

the list: Facebook
Modified

top

companies list:

[

Google, Apple, Microsoft, Amazon, Walmart

]

4. Xóa các phần tử khỏi một ArrayList

Ví dụ này cho thấy:

  1. Cách loại bỏ phần tử tại một chỉ mục đã cho trong ArrayList |

    remove(int index)

  2. Cách xóa phần tử khỏi ArrayList |

    remove(Object o)

  3. Cách xóa tất cả các thành phần khỏi ArrayList tồn tại trong một collectionđã cho |

    removeAll()

  4. Làm thế nào để xóa bỏ các phần tử thỏa mãn một điều kiện nào đó|

    removeIf ()

  5. Làm thế nào để xóa một ArrayList |

    clear()

import

java

.

util

.

ArrayList

;

import

java

.

util

.

List

;

public

class

RemoveElementsFromArrayListExample

{

public

static

void

main

(

String

[

]

args

)

{

List

<

String

>

programmingLanguages

=

new

ArrayList

<

>

(

)

;

programmingLanguages

.

add

(

“C”

)

;

programmingLanguages

.

add

(

“C++”

)

;

programmingLanguages

.

add

(

“Java”

)

;

programmingLanguages

.

add

(

“Kotlin”

)

;

programmingLanguages

.

add

(

“Python”

)

;

programmingLanguages

.

add

(

“Perl”

)

;

programmingLanguages

.

add

(

“Ruby”

)

;

System

.

out

.

println

(

“Initial List: “

+

programmingLanguages

)

;

// Remove the element at index `5`

programmingLanguages

.

remove

(

5

)

;

System

.

out

.

println

(

“After remove(5): “

+

programmingLanguages

)

;

// Remove the first occurrence of the given element from the ArrayList

// (The remove() method returns false if the element does not exist in the ArrayList)

boolean

isRemoved

=

programmingLanguages

.

remove

(

“Kotlin”

)

;

System

.

out

.

println

(

“After remove(\”Kotlin\”): “

+

programmingLanguages

)

;

// Remove all the elements that exist in a given collection

List

<

String

>

scriptingLanguages

=

new

ArrayList

<

>

(

)

;

scriptingLanguages

.

add

(

“Python”

)

;

scriptingLanguages

.

add

(

“Ruby”

)

;

scriptingLanguages

.

add

(

“Perl”

)

;

programmingLanguages

.

removeAll

(

scriptingLanguages

)

;

System

.

out

.

println

(

“After removeAll(scriptingLanguages): “

+

programmingLanguages

)

;

// Remove all the elements that satisfy the given predicate

programmingLanguages

.

removeIf

(n -> (n.charAt(0) == ‘T’));

/*
The above removeIf() call can also be written using lambda expression like this –
programmingLanguages.removeIf(s -> s.startsWith(“C”))
*/

System

.

out

.

println

(

“After Removing all elements that start with \”C\”: “

+

programmingLanguages

)

;

// Remove all elements from the ArrayList

programmingLanguages

.

clear

(

)

;

System

.

out

.

println

(

“After clear(): “

+

programmingLanguages

)

;

}

}

# Output

Initial List:

[

C, C++, Java, Kotlin, Python, Perl, Ruby

]

After remove

(

5

)

:

[

C, C++, Java, Kotlin, Python, Ruby

]

After remove

(

“Kotlin”

)

:

[

C, C++, Java, Python, Ruby

]

After removeAll

(

scriptingLanguages

)

:

[

C, C++, Java

]

After Removing all elements that start with

“C”

:

[

Java

]

After clear

(

)

:

[

]

5. Duyệt qua các phần tử trong ArrayList

Ví dụ sau đây cho thấy cách duyệt qua ArrayList bằng cách sử dụng

  1. forEach

    và biểu thức lambda.

  2. iterator()

    .

  3. listIterator()

    .

  4. Vòng lặp for-each

  5. Vòng lặp với chỉ số

import

java

.

util

.

ArrayList

;

import

java

.

util

.

Iterator

;

import

java

.

util

.

List

;

import

java

.

util

.

ListIterator

;

public

class

IterateOverArrayListExample

{

public

static

void

main

(

String

[

]

args

)

{

List

<

String

>

tvShows

=

new

ArrayList

<

>

(

)

;

tvShows

.

add

(

“Breaking Bad”

)

;

tvShows

.

add

(

Game Of Thrones”

)

;

tvShows

.

add

(

“Friends”

)

;

tvShows

.

add

(

“Prison break”

)

;

System

.

out

.

println

(

“=== Iterate using Java 8 forEach and lambda ===”

)

;

tvShows

.

forEach

(

tvShow

->

{

System

.

out

.

println

(

tvShow

)

;

}

)

;

System

.

out

.

println

(

“\n=== Iterate using an iterator() ===”

)

;

Iterator

<

String

>

tvShowIterator

=

tvShows

.

iterator

(

)

;

while

(

tvShowIterator

.

hasNext

(

)

)

{

String

tvShow

=

tvShowIterator

.

next

(

)

;

System

.

out

.

println

(

tvShow

)

;

}

System

.

out

.

println

(

“\n=== Iterate using a listIterator() to traverse in both directions ===”

)

;

// Here, we start from the end of the list and traverse backwards.

ListIterator

<

String

>

tvShowListIterator

=

tvShows

.

listIterator

(

tvShows

.

size

(

)

)

;

while

(

tvShowListIterator

.

hasPrevious

(

)

)

{

String

tvShow

=

tvShowListIterator

.

previous

(

)

;

System

.

out

.

println

(

tvShow

)

;

}

System

.

out

.

println

(

“\n=== Iterate using simple for-each loop ===”

)

;

for

(

String

tvShow

:

tvShows

)

{

System

.

out

.

println

(

tvShow

)

;

}

System

.

out

.

println

(

“\n=== Iterate using for loop with index ===”

)

;

for

(

int

i

=

0

;

i

<

tvShows

.

size

(

)

;

i

++

)

{

System

.

out

.

println

(

tvShows

.

get

(

i

)

)

;

}

}

}

# Output

==

=

Iterate using Java

8

forEach and lambda

==

=

Breaking Bad
Game Of Thrones
Friends
Prison

break

==

=

Iterate using an iterator

(

)

==

=

Breaking Bad
Game Of Thrones
Friends
Prison

break

==

=

Iterate using a listIterator

(

)

to traverse

in

both directions

==

=

Prison

break

Friends
Game Of Thrones
Breaking Bad

==

=

Iterate using simple for-each loop

==

=

Breaking Bad
Game Of Thrones
Friends
Prison

break

==

=

Iterate using

for

loop with index

==

=

Breaking Bad
Game Of Thrones
Friends
Prison

break

Các

phương thức

iterator()

listIterator()

hữu ích khi bạn cần sửa đổi ArrayList trong khi duyệt qua các phần tử.

Hãy xem xét ví dụ sau, trong đó chúng ta sẽ loại bỏ các phần tử khỏi ArrayList bằng cách sử dụng phương thức

iterator.remove()

trong khi duyệt qua nó:

import

java

.

util

.

ArrayList

;

import

java

.

util

.

Iterator

;

import

java

.

util

.

List

;

public

class

ArrayListIteratorRemoveExample

{

public

static

void

main

(

String

[

]

args

)

{

List

<

Integer

>

numbers

=

new

ArrayList

<

>

(

)

;

numbers

.

add

(

13

)

;

numbers

.

add

(

18

)

;

numbers

.

add

(

25

)

;

numbers

.

add

(

40

)

;

Iterator

<

Integer

>

numbersIterator

=

numbers

.

iterator

(

)

;

while

(

numbersIterator

.

hasNext

(

)

)

{

Integer

num

=

numbersIterator

.

next

(

)

;

if

(

num

%

2

!=

0

)

{

numbersIterator

.

remove

(

)

;

}

}

System

.

out

.

println

(

numbers

)

;

}

}

# Output

[

18

,

40

]

6. Tìm kiếm các phần tử trong một ArrayList

Ví dụ dưới đây cho thấy cách:

  • Kiểm tra xem một ArrayList có chứa một phần tử đã cho không |

    contains()

  • Tìm chỉ mục của lần xuất hiện đầu tiên của một phần tử trong ArrayList |

    indexOf()

  • Tìm chỉ mục của lần xuất hiện cuối cùng của một phần tử trong ArrayList |

    lastIndexOf ()

import

java

.

util

.

ArrayList

;

import

java

.

util

.

List

;

public

class

SearchElementsInArrayListExample

{

public

static

void

main

(

String

[

]

args

)

{

List

<

String

>

names

=

new

ArrayList

<

>

(

)

;

names

.

add

(

“John”

)

;

names

.

add

(

“Alice”

)

;

names

.

add

(

“Bob”

)

;

names

.

add

(

“Steve”

)

;

names

.

add

(

“John”

)

;

names

.

add

(

“Steve”

)

;

names

.

add

(

“Maria”

)

;

// Check if an ArrayList contains a given element

System

.

out

.

println

(

“Does names array contain \”Bob\”? : “

+

names

.

contains

(

“Bob”

)

)

;

// Find the index of the first occurrence of an element in an ArrayList

System

.

out

.

println

(

“indexOf \”Steve\”: “

+

names

.

indexOf

(

“Steve”

)

)

;

System

.

out

.

println

(

“indexOf \”Mark\”: “

+

names

.

indexOf

(

“Mark”

)

)

;

// Find the index of the last occurrence of an element in an ArrayList

System

.

out

.

println

(

“lastIndexOf \”John\” : “

+

names

.

lastIndexOf

(

“John”

)

)

;

System

.

out

.

println

(

“lastIndexOf \”Bill\” : “

+

names

.

lastIndexOf

(

“Bill”

)

)

;

}

}

# Output

Does names array contain

“Bob”

?

:

true

indexOf

“Steve”

:

3

indexOf

“Mark”

:

-1
lastIndexOf

“John”

:

4

lastIndexOf

“Bill”

:

-1

7. ArrayList của các đối tượng do người dùng định nghĩa

Vì ArrayList hỗ trợ generic, bạn có thể tạo ArrayList thuộc

bất kỳ

loại

nào

.

Nó có thể là các loại đơn giản như thế

Integer

,

String

,

Double

hoặc các loại phức tạp như một ArrayList của ArrayLists, hoặc một ArrayList của HashMaps hoặc một ArrayList của bất kỳ người dùng định nghĩa các đối tượng.

Trong ví dụ sau, bạn sẽ tìm hiểu cách tạo ArrayList của các đối tượng do người dùng xác định.

import

java

.

util

.

ArrayList

;

import

java

.

util

.

List

;

class

User

{

private

String

name

;

private

int

age

;

public

User

(

String

name

,

int

age

)

{

this

.

name

=

name

;

this

.

age

=

age

;

}

public

String

getName

(

)

{

return

name

;

}

public

void

setName

(

String

name

)

{

this

.

name

=

name

;

}

public

int

getAge

(

)

{

return

age

;

}

public

void

setAge

(

int

age

)

{

this

.

age

=

age

;

}

}

public

class

ArrayListUserDefinedObjectExample

{

public

static

void

main

(

String

[

]

args

)

{

List

<

User

>

users

=

new

ArrayList

<

>

(

)

;

users

.

add

(

new

User

(

“Rajeev”

,

25

)

)

;

users

.

add

(

new

User

(

“John”

,

34

)

)

;

users

.

add

(

new

User

(

“Steve”

,

29

)

)

;

users

.

forEach

(

user

->

{

System

.

out

.

println

(

“Name : “

+

user

.

getName

(

)

+

“, Age : “

+

user

.

getAge

(

)

)

;

}

)

;

}

}

# Output

Name

:

Rajeev, Age

:

25

Name

:

John, Age

:

34

Name

:

Steve, Age

:

29

8. Sắp xếp một ArrayList

Sắp xếp một ArrayList là một nhiệm vụ rất phổ biến mà bạn sẽ gặp trong các chương trình của mình.

Trong phần này, tôi sẽ chỉ cho bạn cách –

  • Sắp xếp một ArrayList bằng

    Collections.sort()

    phương thức.

  • Sắp xếp một ArrayList bằng

    ArrayList.sort()

    phương thức.

  • Sắp xếp một ArrayList của các đối tượng do người dùng xác định bằng một bộ so sánh tùy chỉnh.

8.1. Sắp xếp một ArrayList bằng phương thức Collections.sort ()

import

java

.

util

.

ArrayList

;

import

java

.

util

.

Collections

;

import

java

.

util

.

List

;

public

class

ArrayListCollectionsSortExample

{

public

static

void

main

(

String

[

]

args

)

{

List

<

Integer

>

numbers

=

new

ArrayList

<

>

(

)

;

numbers

.

add

(

13

)

;

numbers

.

add

(

7

)

;

numbers

.

add

(

18

)

;

numbers

.

add

(

5

)

;

numbers

.

add

(

2

)

;

System

.

out

.

println

(

“Before : “

+

numbers

)

;

// Sorting an ArrayList using Collections.sort() method

Collections

.

sort

(

numbers

)

;

System

.

out

.

println

(

“After : “

+

numbers

)

;

}

}

# Output

Before

:

[

13

,

7

,

18

,

5

,

2

]

After

:

[

2

,

5

,

7

,

13

,

18

]

8.2 Sắp xếp một ArrayList bằng phương thức ArrayList.sort ()

import

java

.

util

.

ArrayList

;

import

java

.

util

.

Comparator

;

import

java

.

util

.

List

;

public

class

ArrayListSortExample

{

public

static

void

main

(

String

[

]

args

)

{

List

<

String

>

names

=

new

ArrayList

<

>

(

)

;

names

.

add

(

“Lisa”

)

;

names

.

add

(

“Jennifer”

)

;

names

.

add

(

“Mark”

)

;

names

.

add

(

“David”

)

;

System

.

out

.

println

(

“Names : “

+

names

)

;

// Sort an ArrayList using its sort() method. You must pass a Comparator to the ArrayList.sort() method.

names

.

sort

(

new

Comparator

<

String

>

(

)

{

@Override

public

int

compare

(

String

name1

,

String

name2

)

{

return

name1

.

compareTo

(

name2

)

;

}

}

)

;

// The above `sort()` method call can also be written simply using lambda expression

names

.

sort

(

(

name1

,

name2

)

->

name1

.

compareTo

(

name2

)

)

;

// Following is an even more concise solution

names

.

sort

(

Comparator

.

naturalOrder

(

)

)

;

System

.

out

.

println

(

“Sorted Names : “

+

names

)

;

}

}

# Output
Names : [Lisa, Jennifer, Mark, David]
Sorted Names : [David, Jennifer, Lisa, Mark]

8.3 Sắp xếp một ArrayList của các đối tượng bằng cách sử dụng Trình so sánh tùy chỉnh

import

java

.

util

.

ArrayList

;

import

java

.

util

.

Collections

;

import

java

.

util

.

Comparator

;

import

java

.

util

.

List

;

class

Person

{

private

String

name

;

private

Integer

age

;

public

Person

(

String

name

,

Integer

age

)

{

this

.

name

=

name

;

this

.

age

=

age

;

}

public

String

getName

(

)

{

return

name

;

}

public

void

setName

(

String

name

)

{

this

.

name

=

name

;

}

public

Integer

getAge

(

)

{

return

age

;

}

public

void

setAge

(

Integer

age

)

{

this

.

age

=

age

;

}

@Override

public

String

toString

(

)

{

return

“{“

+

“name='”

+

name

+

‘\”

+

“, age=”

+

age

+

‘}’

;

}

}

public

class

ArrayListObjectSortExample

{

public

static

void

main

(

String

[

]

args

)

{

List

<

Person

>

people

=

new

ArrayList

<

>

(

)

;

people

.

add

(

new

Person

(

“Sachin”

,

47

)

)

;

people

.

add

(

new

Person

(

“Chris”

,

34

)

)

;

people

.

add

(

new

Person

(

“Rajeev”

,

25

)

)

;

people

.

add

(

new

Person

(

“David”

,

31

)

)

;

System

.

out

.

println

(

“Person List : “

+

people

)

;

// Sort People by their Age

people

.

sort

(

(

person1

,

person2

)

->

{

return

person1

.

getAge

(

)

person2

.

getAge

(

)

;

}

)

;

// A more concise way of writing the above sorting function

people

.

sort

(

Comparator

.

comparingInt

(

Person

:

:

getAge

)

)

;

System

.

out

.

println

(

“Sorted Person List by Age : “

+

people

)

;

// You can also sort using Collections.sort() method by passing the custom Comparator

Collections

.

sort

(

people

,

Comparator

.

comparing

(

Person

:

:

getName

)

)

;

System

.

out

.

println

(

“Sorted Person List by Name : “

+

people

)

;

}

}

# Output
Person List : [{name=’Sachin’, age=47}, {name=’Chris’, age=34}, {name=’Rajeev’, age=25}, {name=’David’, age=31}]
Sorted Person List by Age : [{name=’Rajeev’, age=25}, {name=’David’, age=31}, {name=’Chris’, age=34}, {name=’Sachin’, age=47}]
Sorted Person List by Name : [{name=’Chris’, age=34}, {name=’David’, age=31}, {name=’Rajeev’, age=25}, {name=’Sachin’, age=47}]

Phần kết luận

Đó là tất cả mọi thứ tôi chia sẻ về ArrayList trong Java.

Trong bài viết này, bạn đã tìm hiểu ArrayList là gì, cách tạo ArrayList, cách thêm, sửa đổi và xóa các phần tử khỏi ArrayList, cách lặp qua ArrayList, cách sắp xếp ArrayList và cách đồng bộ hóa quyền truy cập vào ArrayList .

Cảm ơn bạn đã đọc.

Hẹn gặp lại trong bài tiếp theo.