DESKTOP-1K7LKMB_20200907-马思宇
集合(collection)
/ 声明一个表示"容器"的默认容量的常量
private static final int DEFAULT_CAPACITY = 10;
// 声明一个表示默认加载因子的常量
private static final float DEFAULT_LOAD_FACTOR = 0.75F ;
// 声明一个Object类型的常量用来填充数组中的"空闲"位置
private static final Object PRESENT = new Object();
// 声明一个Object类型的数组变量(引用变量),用来引用存放数据的数组对象
private Object[] elements ;
// 声明一个int类型的变量:
// 该变量可以用来统计"容器"中已经放入的有效元素的个数、
// 同时也用于确定下一个元素的存放位置
private int counter ;
private float loadFactor ;
// 为了将"容器"中存放的元素转换成字符串时使用缓冲区
private StringBuilder builder = new StringBuilder();
public Container() {
this( DEFAULT_CAPACITY , DEFAULT_LOAD_FACTOR );
}
public Container( int initialCapacity ) {
this( initialCapacity , DEFAULT_LOAD_FACTOR );
}
public Container( int initialCapacity , float loadFactor ) {
super();
if( initialCapacity <= 0 ) {
throw new IllegalArgumentException( "容器初始容量必须是正整数" );
}
if( loadFactor <= 0 || loadFactor >= 1 ) {
throw new IllegalArgumentException( "加载因子必须是0到1之间的小数" );
}
// 使用默认容量创建数组
elements = new Object[ initialCapacity ];
// 使用 PRESENT 初始化数组
Arrays.fill( elements , PRESENT );
// 指定加载因子
this.loadFactor = loadFactor ;
}
/** 在该方法中完成对数组的扩容 */
private void grow() {
int oldCapacity = elements.length ;
// 当容器中元素个数容量的一定比例时就要扩容了
if( counter >= oldCapacity * loadFactor ) {
int newCapacity = oldCapacity + ( oldCapacity >> 1 );
Object[] array = new Object[ newCapacity ];// 创建新数组
Arrays.fill( array , PRESENT ); // 填充新数组
// 将elements数组中的[0,counter)之间的元素复制到array的[0,counter)位置
System.arraycopy( elements , 0 , array , 0 , counter );
// 让实例变量elements指向新创建的数组
elements = array ;
}
}
近期评论