ArrayList trong java collection

Ở bài viết trước thì tất cả chúng ta đã biết sơ qua về collection, đã phần nào hình dùng collection là gì, và biết cách thao tác cơ bản với chúng. Thì ở những bài viết sau của seri java collection thì mình sẽ cùng đi sâu hơn về những collection để xem phương pháp chúng hoạt động giải trí, tàng trữ và giải quyết và xử lý tài liệu của chúng như nào. Đặc điểm của từng collection, ưu và nhước điểm của từng loại để hoàn toàn có thể vận dụng chúng vào những bài toàn thực tiễn một cách tương thích nhất .
Thì bài thời điểm ngày hôm nay mình sẽ cùng khám phá về ArrayList. Nhắc lại bài trước một xíu, nếu ai quên hoặc chưa đọc thì hoàn toàn có thể ấn vào đây để hoàn toàn có thể xem và nhớ lại những kiến thức và kỹ năng mình đã ra mắt ở bài trước. Ở bài trước mình có nói qua về Array, và Array không phải là 1 collection nhé. Vậy giữa Array và ArrayList có gì giống và khác nhau. Nghe tên đã thấy có gì giống với khác nhau rồi đúng không 😀

Mỗi một đặc điểm thì mình sẽ cố gắng đưa vào những ví dụ cụ thể nhất để mọi người dễ hình dung.
Thì điểm khác nhau đầu tiên giữa Array và ArrayList đó là
+ Array : Kích thước cố định.
+ ArrayList : Kích thước có thể thay đổi được.
nào xem ví dụ nhé.

Vậy là mình đã thực hiện khởi tạo 1 array với số lượng phần tử là 4. Và sau 2 vòng for thì mình đã add 4 phần tử vào trong array và đọc chúng ra. Như mình nói nói bên trên thì array là 1 mảng cố định số lượng phần tử, vậy sẽ như thế nào nếu mình add thêm 1 phần tử thứ 5 vào array bên trên.

Bạn đang đọc: ArrayList trong java collection

sau khi mình tăng vòng for lên 1 thì lúc này vòng for chạy đến 5 tức là bằng độ dài ban đầu của mảng + 1.
Ngay lập tức trình duyệt báo lỗi “java.lang.ArrayIndexOutOfBoundsException”.
Vậy khi add thì như vậy còn nếu đọc số lượng phần tử lớn hơn mảng thì sao.


Nó vẫn sẽ đọc được 4 thành phần đầu nhưng đến thành phần thứ 5 sẽ bị lỗi vì không tìm thấy. Đây cũng chính là 1 nguyên do dẫn đến việc bị nullpointerexception trong java .
Để hoàn toàn có thể đưa ra Tóm lại tiên phong thì tất cả chúng ta đến với ví dụ về ArrayList nhé xem nó khắc phục yếu tố trên như thế nào .

Như mọi người thấy thì mình không hề khai báo số lượng thành phần, và việc thêm lẫn đọc tài liệu của arraylist rất đơn thuần. Để biết được tại sao arraylist lại làm được như vậy thì tất cả chúng ta tìm hiểu và khám phá sâu hơn bên trong xem thư viện nó giải quyết và xử lý yếu tố quản trị kích cỡ mảng của arraylist như thế nào .

nôm na là khi bạn add phần từ đầu vào mảng thì lúc này mảng sẽ có kích cỡ mặc định là 10, và khi kích cỡ của mảng đạt tới 10 rồi thì nó sẽ liên tục tăng kích cỡ lên cho tới giá trị là “ Integer. MAX_VALUE – 8 ; ”

1 trích dẫn nho nhỏ là để hoàn toàn có thể khám phá sâu hơn thì bạn hoàn toàn có thể ấn vào xem thư viện hoặc đọc doc của nó để biết phương pháp nó giải quyết và xử lý như thế nào. Cảm ơn anh Tùng đã chỉ cho em kĩ năng này, mặc dầu nó vẫn ở mức độ quèn 😀

Tiếp đến với sự khác nhau thứ 2:
Array : Có thể lưu trữ dữ liệu kiểu nguyên thủy và String
ArrayList : Chỉ có thể lưu trữ dữ liệu kiểu đối tượng. Kể từ Java 5, kiểu nguyên thủy được tự động chuyển đổi trong các đối tượng được gọi là auto-boxing.

Sự khác nhau thứ 3 :
Array : Chỉ có thuộc tính length.
ArrayList: Có nhiều phương thức để thao tác với dữ liệu.


còn với arrayList

Và sự khác nhau nữa đó là:
Array : Tốc độ lưu trữ và thao tác nhanh hơn.
ArrayList : Tốc độ lưu trữ vào thao tác chậm hơn.
Mình sẽ làm 1 ví dụ đo thời gian để add 100.000.000 phần tử vào mảng.


Đây là thời hạn để add 100 tr thành phần vào mảng, mất tận 42901 minisecon tức gần 43 giây .

Còn đây là với Array, số lượng nhanh hơn đáng kinh ngạc đúng không ạ. Cấu hình máy mình tương đối mạnh. Mọi người thử chạy xem hết bao nhiêu giây nhé .

Và vì sao ArrayList lại chậm hơn rất nhiều so với Array. Bản chất cả 2 cái đều có đặc điểm chung là các phần tử được lưu trữ ở địa chỉ liên tục nhau trong ô nhớ. Nhưng Array cần phải khởi tạo số lượng phần tử trước còn ArrayList sẽ tự động tặng kích thước mảng lên theo số lượng phần tử được add vào.
Như bên trên mình đã nói là mặc định khởi tạo ArrayList sẽ có kích thước mảng là 10. Chính vì vậy mà phía trên mình đã add 100tr phần tử vào mảng.
Khi insert 1 phần tử vào ArrayList, trường hợp tốt nhất thì ArrayList chỉ cần cập nhật index cho phần tử được thêm vào. Trường hợp xấu là ArrayList không đủ vùng nhớ (mặc định là chứa được 10 phần tử), trình xử lý phải copy toàn bộ các element sang một vùng nhớ khác lớn hơn (x1.5 lần) chính điều này làm cho tốc độ insert của ArrayList chậm hơn rất nhiều so với Array.
Tương tự với việc xóa 1 phần tử trong ArrayList. Độ phức tạp là giống với việc insert nên nó có độ phức tạp là O(n).
À bổ xung thêm 1 điểm khác nhau nho nhỏ nữa là để duyệt Array thì ta chỉ có thể dùng for. Nhưng với ArrayList là 1 collection nên chúng ta có thể dùng iterator để duyệt.

Qua những ví dụ trên thì chắc những bạn cũng mở màn hiểu được phần nào về ArrayList, cách nó tàng trữ tài liệu, và những thao tác cơ bản với ArrayList .
Vì ArrayList là 1 thực thể của List nên nó sẽ có rất nhiều những phương pháp để thao tác với nó. Mình sẽ liệt kê những phương pháp và tính năng của nó .

Các Ví dụ ArrayList trong Java

Khởi tạo một ArrayList

Để khai báo một ArrayList, tất cả chúng ta cần phải import gói thư viện java.util. ArrayList của Java. Cú pháp import như sau :

Ngoài ra, nếu tất cả chúng ta đã biết trước số lượng thành phần thì tất cả chúng ta hoàn toàn có thể khai báo kèm với số lượng thành phần của nó. Ví dụ dưới đây sẽ khai báo một ArrayList có kiểu String và có 20 thành phần :

Hiển thị các phần tử có trong ArrayList

Để hiển thị những thành phần có trong ArrayList, tất cả chúng ta có những cách như sau :

Hiển thị theo tên của ArrayList.

Duyệt các phần tử của ArrayList – sử dụng vòng lặp for

Duyệt các phần tử của ArrayList – sử dụng vòng lặp foreach

Duyệt các phần tử của ArrayList – sử dụng Iterator.

Để sử dụng được Iterator tất cả chúng ta cần phải import gói thư viện java.util. Iterator của Java .

Duyệt các phần tử của ArrayList – sử dụng ListIterator.

Vì ArrayList là một lớp tiến hành của List Interface nên nó cũng hoàn toàn có thể sử dụng ListIterator để duyệt qua những thành phần của nó. Để sử dụng được ListIterator tất cả chúng ta cần phải import gói thư viện java.util. ListIterator của Java .

Các phương thức addAll(), removeAll(), retainAll() của lớp ArrayList

Ví dụ sau minh họa cách sử dụng các phương thức addAll(), removeAll(), retainAll() của lớp ArrayList trong Java:


Kết quả :

Truy cập phần tử của ArrayList

Java cung ứng cho tất cả chúng ta phương pháp get ( ) để truy vấn đến 1 thành phần bất kể trong ArrayList trải qua chỉ số của thành phần đó. Chỉ số của ArrayList trong Java khởi đầu từ 0 .

Cập nhật giá trị của phần tử Arraylist

Để update giá trị của thành phần trong ArrayList, Java phân phối cho tất cả chúng ta phương pháp set ( index, element ), trong đó index là chỉ số của thành phần cần update và element là thành phần mới để thay thế sửa chữa .

Xóa phần tử ArrayList

Để xóa thành phần trong ArrayList, Java cung ứng cho tất cả chúng ta 2 phương pháp có sẵn đó là phương pháp clear ( ) và phương pháp remove ( ) .

Phương thức clear()

Phương thức clear ( ) sẽ xóa toàn bộ những thành phần có trong ArrayList. Sau đây là ví dụ minh họa phương pháp này .

Phương thức remove()

Phương thức remove ( ) sẽ xóa thành phần ra khỏi ArrayList theo 2 cách đó là xóa dựa vào chỉ số của thành phần và xóa trực tiếp thành phần đó ( không cần biết đến chỉ số của nó ). Ví dụ dưới đây sẽ minh họa 2 cách xóa này :

Tìm kiếm một phần tử ArrayList

Để tìm kiếm một thành phần trong ArrayList thì tất cả chúng ta có 3 giải pháp tìm kiếm như sau :

Tìm kiếm trực tiếp phần tử.

Để tìm kiếm trực tiếp phần tử, chúng ta sẽ sử dụng phương thức contains() . Kết quả trả về là true nếu tìm thấy, ngược lại trả về false.

Tìm kiếm vị trí xuất hiện đầu tiên của 1 phần tử trong ArrayList.

Để tìm kiếm vị trí Open tiên phong của 1 thành phần trong ArrayList, tất cả chúng ta sẽ sừ dụng phương pháp indexOf ( ). Kết quả của phương pháp này sẽ trả về chỉ số Open tiên phong của thành phần đó trong ArrayList, ngược lại nếu không tìm thấy trả về – 1 .

Tìm kiếm vị trí xuất hiện cuối cùng của 1 phần tử trong List.

Để tìm kiếm vị trí Open ở đầu cuối của 1 thành phần trong ArrayList, tất cả chúng ta sẽ sừ dụng phương pháp lastIndexOf ( ). Kết quả của phương pháp này sẽ trả về chỉ số Open sau cuối của thành phần đó trong ArrayList, ngược lại nếu không tìm thấy trả về – 1 .

Chuyển ArrayList sang mảng (Array) trong Java

Phương thức toArray ( ) trong Java được dùng để quy đổi một ArrayList sang mảng tương ứng. Sau đây là ví dụ minh họa phương pháp này :

Tạo ArrayList có kiểu generic là String

Tạo ArrayList có kiểu generic là đối tượng người tiêu dùng do người dùng định nghĩa

Vậy qua bài học kinh nghiệm thời điểm ngày hôm nay thì bạn đã biết được ArrayList là gì, những giải quyết và xử lý và thao tác với ArrayList. Vì kỹ năng và kiến thức còn hạn hẹp nên có gì sai xót thì mọi người comment góp ý để những bài viết sau tốt hơn. Cảm ơn mọi người ❤
nguồn tìm hiểu thêm : https://docs.oracle.com/javase/8/docs/api/java/util/ArrayList.html

Chia sẻ:

Thích bài này:

Thích

Đang tải …