7 cách để đảo ngược một List trong Java

List trong Java là gì?

Cho đến bây giờ chúng ta đã làm quen với khái niệm mảng array. Mảng là một nhóm các phần tử có kiểu dữ liệu tương tự được lưu trữ trong các vị trí bộ nhớ liền nhau được tham chiếu dưới một tên duy nhất.

List về cơ bản giống như một mảng ngoại trừ kích thước của chúng có thể tăng lên hoặc thu nhỏ trong thời gian chạy. Sự thay đổi kích thước của List trong thời gian chạy này được gọi là bản chất động.

Nếu chúng ta cố gắng truy cập hoặc thêm bất kỳ phần tử nào vượt quá kích thước của một mảng thì chúng ta nhận được một ngoại lệ. Tuy nhiên, đây không phải là trường hợp với các List. Khi chúng ta thêm một phần tử vào danh sách thì kích thước của nó tăng lên một và bất cứ khi nào chúng ta xóa một phần tử khỏi danh sách thì kích thước của nó sẽ giảm đi một.

Vì vậy, về mặt kỹ thuật, chúng ta có thể định nghĩa một List là một mảng động. Một lưu ý kỹ thuật ở đây là List là một interface trong java. Vì vậy, để tạo đối tượng của nó, chúng ta phải sử dụng các class implement interface này như ArrayList.

Làm thế nào để đảo ngược một List trong java

Trong lập trình trong java, có thể có một trường hợp mà bạn muốn đảo ngược thứ tự của List. Đảo ngược List là một phần thông thường của bất kỳ ngôn ngữ lập trình nào và do đó, chúng ta hãy thảo luận về 7 phương pháp mà bạn có thể đảo ngược List trong java một cách hiệu quả.

Lưu ý rằng phương pháp đảo ngược List có thể được phân loại là tại chỗ hoặc không tại chỗ. Chuyển đổi tại chỗ có nghĩa là quá trình chuyển đổi sẽ diễn ra mà không cần sử dụng bất kỳ danh sách bổ trợ nào, bằng cách ghi đè các phần tử hiện có của danh sách được chỉ định.

1. Sử dụng Collections.reverse()

Đây là cách đơn giản nhất để đảo ngược một List trong java. Class java.util.Collections có chứa hàm reverse() có thể được sử dụng để đảo ngược thứ tự của các phần tử trong List được chỉ định.

2. Sử dụng phương thức List.add() và List.remove()

Trong cách này, chúng ta lặp qua List cần đảo ngược. Bằng cách sử dụng kết hợp các phương thức List.add()List.remove() để đảo ngược giá trị trong một List.

Để đảo ngược List bằng cách sử dụng phương pháp này. Trong mỗi lần lặp, chúng ta sẽ xoá phần tử cuối cùng khỏi danh sách và thêm nó vào đầu danh sách.

3. Sử dụng đệ quy

Trong phương pháp này, chúng ta tạo một hàm đệ quy để loại bỏ phần tử đầu tiên khỏi danh sách và sau đó thực hiện lệnh gọi đệ quy cho chính nó. Khi hàm đệ quy trả kết quả về, phần tử bị loại bỏ sẽ được thêm một lần nữa vào List. Để hiểu điều này, trước tiên hãy xem qua ví dụ: 

Trong mỗi lần đệ quy, chung ta xoá một phần tử khỏi danh sách. Khi List trở nên trống và hàm đệ quy trả kết quả về, phần tử bị loại bỏ cuối cùng sẽ được thêm đầu tiên vào List. Sau đó quá trình tương tự được lặp lại và ta có được List đã được đảo ngược.

4. Sử dụng Iteration

Phương pháp này dễ thực hiện và dễ hiểu hương nhiều so với một số phương pháp khác. Ở đây, chúng ta sẽ tạo một List mới và lặp lại List ban đầu từ cuối cho đến đầu. Trong mỗi lần lặp, lấy phần tử tại index và thêm phần tử đó vào List mới. Khi vòng lặp kết thúc, List mới chứa các phần tử List ban đầu theo thứ tự ngược lại.

5. Sử dụng ListIterator

Java có một Iterator class, có các đối tượng có thể được sử dụng để lặp qua các collections khác nhau. Tương tự như vậy, Java cũng có một class ListIterator cho phép bạn lặp qua một List. Các này giống như cách làm trước ngoại trừ việc ở đây chúng ta đang sử dụng một đối tượng ListIterator để lặp qua List thay vì một biến bộ đếm.

6. Sử dụng guava library

Java chứa một collections lớn các library và guava library. Class Lists của library này sở hữu phương thức reverse() có thể giúp bạn đảo ngược List một cách hiệu quả.

Có một vấn đề với cách này, tức là List mới được trả về bằng phương pháp đảo ngược này nó được reference đến List ban đầu. Có nghĩa là chúng ta thay đổi List reverse thì List ban đầu cũng sẽ bị ảnh hưởng. Để giải quyết vấn đề này, chúng ta có thể tạo một List mới chứa nội dung của List được trả về bằng phương thức reverse().

7. Sử dụng Java 8 Stream API

Cách này sử dụng stream API. Đầu tiên, tạo một stream của số nguyên đại diện cho các chỉ mục của List. Stream được tạo bằng IntStream.range(0, list.size()). Phương thức này trả về một stream chứa tất các các số nguyên giữa phạm vi 0 đến kích thước của List. Sử dụng map(), ánh xạ stream chứa các index theo cách mà index đảo ngược.

Tổng kết

Trong khi coding, có một số trường hợp mà chúng ta có thể muốn đảo ngược một List. Biết cách đảo ngược một List bằng bất kỳ ngôn ngữ nào là kỹ năng mà mọi lập trình viên phải biết. Trong bài viết này, mình đã cho thấy có thể đảo ngược List bằng các phương pháp có sẵn cũng như thông qua các phương pháp tiếp cận đơn giản. Nếu có bất kỳ thắc mắc cũng như là cần giải đáp trong khi lập trình, hãy tham gia Group để đặt câu hỏi nhé.

0 0 votes
Article Rating
Subscribe
Notify of
guest
0 Comments
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x