数组、二维数组、可变参数、稀疏数组
数组定义:通过连续的存储空间,存储相同类型(内存宽度相同)元素的集合
数组的长度一旦指定不可以改变
二维数组本质上就是一维数组
关于方法调用的顺序
1:类型完全匹配
2:顺序最近优先
3:顺序包装类
4:顺序可变参数
ArrayList
数组:
size=length
0≤索引≤length-1
元素的地址=首元素地址+(索引×元素宽度)
ArrayList:构建一个集合,用来存储数组
1:可以屏蔽掉底层存储的复杂度
2:实际存储选择使用数组进行
集合可以存储任意类,可以用泛型<E>来解决此问题
final关键词:
修饰方法后,此方法不可被继承;
修饰变量后,如果是基本数据变量则变量不能改变;如果是引用型数据变量则在对其初始化之后便不能再让其指向另一个对象
ArrayList类:
package com.collection.list;
/**
* 需求:
* 1:存储任意类型 通过泛型搞定
* 2:存储数据的大小交由用户指定 或者自己指定一个合适的大小
*/
public class ArrayList<E> {
private E[] elementsData; // 实际存储元素的容器
private static final int INIT_CAPACITY = 10; // 指定默认情况下的初始长度为10
private int size; // 维护当前数组中待添加的索引位置 维护当前数组的元素个数
/**
* 空构造器 创建一个指定长度的数组对象
*/
public ArrayList(){
this(INIT_CAPACITY);
}
/**
* 创建一个带参数的构造器 创建用户指定长度的数组对象
* @param capacity
*/
public ArrayList(int capacity){
// 初始化存储数据的数组对象
this.elementsData = (E[]) new Object[capacity];
}
/**
* 添加元素E到当前的集合中(末尾)
* @param e
*/
public void add(E e){
addLast(e);
}
/**
* 添加元素E到集合的指定(index)位置
* @param e
* @param index
*/
public void add(E e,int index){
checkIndex(e,index);
// 将要添加的位置后元素整体向后移动
for (int i=size;i>index;i--)
elementsData[i] = elementsData[i-1];
// 指定位置添加元素
elementsData[index] = e;
// 维护size
size++;
}
/**
* 添加元素E到集合的指定(index)位置
* @param e
* @param index
*/
public void checkIndex(E e,int index){
/**
* 判断index索引是否合法
* 1:index不能小于0
* 2:index不能大于size【防止数组中出现内存碎片】,
* 更不能大于capacity(数组长度)【防止下标越界】
*/
if (index < 0 || index > size){
throw new IllegalArgumentException("index out of bounds index" + index);
}
}
/**
* 添加元素E到当前的集合末尾
* @param e
*/
public void addLast(E e){
elementsData[size] = e; // 将元素e添加到size指向的索引位置
size++; // 维护一下size即可
}
/**
* 查看当前集合是否为空
* @return
*/
public boolean isEmpty(){
return size == 0;
}
/**
* 查询当前集合中的元素个数
* @return
*/
public int getSize(){
return size;
}
public String toString(){
StringBuffer retStr = new StringBuffer();
retStr.append("size:"+size+" [");
for (int i=0;i<size;i++){
retStr.append(elementsData[i]);
if (i != size-1)
retStr.append(",");
}
retStr.append("]");
return retStr.toString();
}
public static void main(String[] args) {
/**
* 测试ArrayList类
*/
ArrayList a = new ArrayList(5);
System.out.println(a.isEmpty());
a.add(1);
a.add(2);
a.add(3);
System.out.println(a.isEmpty());
System.out.println(a.getSize());
System.out.println(a.toString());
a.add(4,1);
System.out.println(a.toString());
}
}