01/10/2018, 13:40

Hỏi về arraylist trong java?

  1. cho mình hỏi arraylist là 1 kiểu dữ dạng tập hợp trong java nó ưu điểm hơn array là số phần tử có thể thay đổi động , vậy cho mình hỏi nó tổ chức dữ liệu trong vùng nhớ như thế nào ? ( vd : array thì các phần tử sẽ nằm liên tiếp nhau trong vùng nhớ) còn arraylist có nằm liên tiếp nhau không ? (vì java không có method nào để get address của đối tượng nên mình mới không biết là nó tổ chức như thế nào)
  2. đối với array khi ta truy cập vào 1 phần tử thì ta có thể truy cập trực tiếp thông qua index của nó , vậy nếu arraylist thì cách truy cập vào phần tử của nó có giống array không , nếu không thì có thể diễn tả cách mà nó truy cập không?( vì araylist nó cung cấp method get() nhưng mình vẫn không biết chắc là cách hoạt động của method get() như thế nào)
cdxf viết 15:53 ngày 01/10/2018
  1. Bạn có thể vào source của class này xem thử là biết (không biết post code Oracle JDK vào đây có hợp pháp không )

    transient Object[] elementData; // non-private to simplify nested class access
    private void grow(int minCapacity) {
    // overflow-conscious code
    int oldCapacity = elementData.length;
    int newCapacity = oldCapacity + (oldCapacity >> 1);
    if (newCapacity - minCapacity < 0)
    newCapacity = minCapacity;
    if (newCapacity - MAX_ARRAY_SIZE > 0)
    newCapacity = hugeCapacity(minCapacity);
    // minCapacity is usually close to size, so this is a win:
    elementData = Arrays.copyOf(elementData, newCapacity);
    }
    2.Tương tự trên:

    public E get(int index) {
    rangeCheck(index);

     return elementData(index);
    

    }
    @SuppressWarnings(“unchecked”)
    E elementData(int index) {
    return (E) elementData[index];
    }

Silicon viết 15:49 ngày 01/10/2018

thanks bạn …

Chẵn viết 15:41 ngày 01/10/2018

Ở đâu thế bác? Em tham khảo với.

cdxf viết 15:55 ngày 01/10/2018

Thư mục JDK có file src.zip bạn có thể mở ra xem thử, thật ra nếu dùng Eclipse hoặc IDEA nếu bạn đặt JDK thay vì JRE làm runtime thì nó sẽ tự động attach src vào cho bạn xem trực tiếp luôn:

Nguyen Ca viết 15:48 ngày 01/10/2018


jdk <= 1.7 thì nó khi khởi tạo nó tạo sẳn 1 mảng rổng 10 phần tử.
Khi add mới phẩn tử vào thì nó sẽ kiêm tra đã đầy chưa, nếu đầy thì tăng size lên 3/2
Bản tóm tắt về collection trong java


ref: https://www.ibm.com/developerworks/library/j-codetoheap/index.html#ArrayList

Bài liên quan
0