Hỏi đáp
Chia sẻ kiến thức, cùng nhau phát triển
Gán giá trị cho ArrayList trong java?
18:22 28-04-2017
5.225 lượt xem
4 bình luận
09:58 29-04-2017
Xin chào mọi người. em có 1 arraylist bao gồm các đối tượng (data) của em định nghĩa. giờ em muốn tạo 1 arraylist thứ 2 để copy toàn bộ của arraylist đầu tiên. nhưng khi em thay đổi giá trị của thằng thứ 2 thì thằng đầu tiên cũng bị thay đổi theo. Vậy làm thế nào để copy mà nó không thay đổi giá trị của mảng gốc ạ?
em đã thử dùng cả 2 cách như trên nhưng không hiệu quả. rất mong dc sư giúp đỡ của mọi người em cảm ơn ạ!
ArrayList <Data> arr2 = new ArrayList<Data>(arr); //tạo arr2 truyền tham số là arr
//hoặc arr2 = arr;
arr2.get(0).ThoiGianDen--;
for(int i = 0; i < arr.size(); i++) //xuất arr
{
arr.get(i).Xuat();
}
Do ArrayList chỉ chứa các object mà object là kiểu tham chiếu nên cho dù có sao chép (tạo mới vùng nhớ cho ArrayList) thì dữ liệu bên trong (các object) cũng tham chiếu đến nhau thôi. Để giải quyết vấn đề hoặc là bạn tìm cấu trúc dữ liệu khác để lưu trữ hoặc bạn có thể xử lý như sau:
+ Trong lớp của bạn, bạn tạo ra 1 hàm clone mục đích là để sao chép các đối tượng theo cách của bạn. Nhớ là hàm này để public và hàm này là override cho hàm clone của lớp Object.
+ Duyệt qua các phần tử của ArrayList ban đầu sau đó add mới vào ArrayList copy.
Đây là code minh hoạ của mình:
Bạn dùng List thay cho ArrayList thì sẽ ra ngay: Ví dụ: