30/09/2018, 23:35

Phương thức capacity trong java

Anh/chị cho em hỏi, vì sao cái capacity sau 4 lần cộng nó lại là 5, em tưởng nó bằng 8, newcapacity = (old * 2) + 2

    public static void main(String args[]) {
       // capacity ban dau la 3, incr la 2
       Vector v = new Vector(3, 2);
       System.out.println("Size ban dau: " + v.size());
       System.out.println("Capacity ban dau: " +
       v.capacity());
       v.addElement(new Integer(1));
       v.addElement(new Integer(2));
       v.addElement(new Integer(3));
       v.addElement(new Integer(4));
       System.out.println("Capacity sau 4 lan cong la: " + v.capacity());
  }
Quân viết 01:35 ngày 01/10/2018

Capacity là sức chứa không phải là tổng giá trị

Đỗ Trung Quân viết 01:37 ngày 01/10/2018

Ban đầu tạo capacity bằng 3 thì nó cần lấp đầy khoảng đó rồi mới lại + 2 sau. 3 số đầu em không được tính.

       // khởi tạo dung lượng(capacity) = 3. 
       //Nếu đầy thì mỗi lần thêm element tăng dung lượng lên 2.
       Vector v = new Vector(3, 2);
       // size chưa được tạo nên mặc định bằng 0
       System.out.println("Size ban dau: " + v.size()); 
      // dung lượng khởi tạo = 3
       System.out.println("Capacity ban dau: "  +v.capacity()); 
       //add 3 int vào vector
       v.addElement(new Integer(1));
       v.addElement(new Integer(2));
       v.addElement(new Integer(3));
       // sau khi add 3 số int vào thi dung lượng đã bị đầy - > tăng 2 tiếp
       v.addElement(new Integer(4));
       // dung lượng = 3 + 2 =5
       System.out.println("Capacity sau 4 lan cong la: " + v.capacity()); // vẫn trống 1 ở đây
       //Sau mỗi 2 lần add thêm dung lượng += 2
Đỗ Trung Quân viết 01:39 ngày 01/10/2018

em tưởng nó bằng 8, newcapacity = (old * 2) + 2

Trong trường hợp này newcapacity phụ thuộc vào param 2

Vector v = new Vector(3, 2);  //  newcapacity  = old +2

Nếu em khai báo với constructor mặc định không khai báo increment

   Vector v = new Vector();

Lúc này capacity mới tính theo công thức newcapacity = old * 2 khi nó chạm đến maximum

Mon Nguyễn viết 01:50 ngày 01/10/2018

vâng. em cảm ơn anh !

Bài liên quan
0