ArrayList源码分析Ⅲ
3. grow方法实现数组扩容操作
3.1 Person类创建
首先创建一个Preson类,这样写代码的时候不会出现那么多错误:
内容为有参和无参构造以及参数的setter和getter方法 还有toString方法
package com.qfedu.ArrayList;
public class Person {
private String name;
private int age;
private boolean gender;
public Person() {
}
public Person(String name, int age, boolean gender) {
this.name = name;
this.age = age;
this.gender = gender;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public boolean isGender() {
return gender;
}
public void setGender(boolean gender) {
this.gender = gender;
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
", gender=" + gender +
'}';
}
}
注:不要问我为什么把Person类代码写出来,我只是为了水字数。-.-
3.2 grow方法实现
package com.qfedu.ArrayList;
public class Demo {
private Person[] allots;
private static final int DEFAULT_SIZE = 10;
private static final int MAX_ARRAY_SIZE = Integer.MAX_VALUE - 8;
private void grow(int minCapacity) {
System.out.println("grow method Called");
int oldCapacity = allots.length;
int newCapacity = oldCapacity + (oldCapacity >> 1);
if (newCapacity < minCapacity) {
newCapacity = minCapacity;
}
if (newCapacity > MAX_ARRAY_SIZE) {
System.out.println("数组超出最大范围,无法扩容。");
}
Person[] temp = new Person[newCapacity];
for (int i = 0; i < oldCapacity; i++) {
temp[i] = allots[i];
}
allots = temp;
}
}