Hỏi về id tự tăng khi thêm record mới vào arraylist

Các bác cho em hỏi e có 1 bài ID tự tăng khi add record mới vào arraylist
thì làm thế nào ạ trong java

Delegate method add và addAll của ArrayLíst bằng class do mình địa nghĩa, đồng thời trong class này có biến id là int(non-thread safe) hoặc AtomicInteger(thread safe). Khi có bất cứ nơi nào calling 2 method trên, em sẽ tự tăng biến này lên.
Nếu sử dụng int thì có thể dùng keyword synchronized trên method hoặc trên biến int, sử dụng AtomicInteger thì không cần thiết.

1 Like

Bác có thể cho e vd đc không ạ

Nghe có vẻ too advanced quá hả??? Delegate là kỹ thuật trong lập trình thay vì gọi trực tiếp method từ 1 class nào đó, thì mình wrapper cái method đó bằng method của mình, thường là cùng tên method, dùng để controll hoặc add thêm các tính năng đối với method này. Tương tự như đề bài:

private int genId = 0;
private List<Object> arrayList = new ArrayList();

public synchronized void add(Object o)
   arrayList.add(o);
   ++genId;  //Id tự tăng
}

public synchronized void addAll(List<Object> collection) {
   for(Object o : collection) {
      add(o);
   }
}
3 Likes

Cho mình hỏi từ khoá synchronized có tác dụng gì vậy ?

Đồng bộ việc gọi phương thức, tránh trường hợp thao tác đa luồng, các luồng sẽ cùng thao tác, có thể gây xung đột/thao tác sai dữ liệu.

1 Like

Khi thêm phẩn tử vào ArrayList thì size nó tự tăng đấy. Dùng size làm ID.

Hm, cách này cũng được, cơ mà ArrayList không thread-safe đâu cậu :sweat_smile:

4 Likes

Lỡ xóa thì làm sao :smiley:

4 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?