分析:
1. 实现一个能自动扩容的Array,基于数组实现
2. 有增删改查操作
3. 类似一个Arraylist结合,支持范型
1.构造函数
private E[] mDatas;
private int size;
public Array(int capacity){
mDatas = (E[]) new Object[capacity];
size = 0;
}
public Array(){
this(10);
}
2. 添加数据
/**
* 指定位置添加数据 能自动扩容
* @param index
* @param e
*/
public void add(int index,E e){
assertIndex(index);
if(size == mDatas.length){
resize( 2 * size);
}
for (int i = size - 1; i >= index; i--) {
mDatas[i + 1] = mDatas[i];
}
mDatas[index] = e;
size ++;
}
public void addFirst(E e){
add(0,e);
}
public void addLast(E e){
add(size,e);
}
3. 删除数据
/**
* 移除某一个位置的元素
* @param index
* @return
*/
public E remove(int index){
assertIndex(index);
E temp = mDatas[index];
for (int i = index + 1; i < size; i++) {
mDatas[i - 1] = mDatas[i];
}
size--;
return temp;
}
/**
* 删除头部元素
* @return
*/
public E removeFirst(){
return remove(0);
}
/**
* 删除尾部元素
* @return
*/
public E removeLast(){
return remove(size - 1);
}
/**
* 移除某一个元素 先查找这个元素 查找到元素了根据位置去删除
* @param e
* @return
*/
public E removeElement(E e){
int index = findIndex(e);
if(index != -1){
return remove(index);
}
return null;
}
4. 修改数据
/**
* 修改某一个位置的元素
* @param index
* @param e
*/
public void set(int index,E e){
assertIndex(index);
mDatas[index] = e;
}
5. 查询数据
/**
* 获取索引处的元素
* @param index
* @return
*/
public E get(int index){
assertIndex(index);
return mDatas[index];
}
public E getLast(){
return get(size - 1);
}
public E getFirst(){
return get(0);
}
/**
* 根据元素查找元素索引
* @param e
* @return
*/
public int findIndex(E e){
for (int i = 0; i < mDatas.length; i++) {
if(e.equals(mDatas[i])){
return i;
}
}
return -1;
}
/**
* 根据索引查找元素
* @param index
* @return
*/
public E find(int index){
assertIndex(index);
for (int i = 0; i < mDatas.length; i++) {
if(mDatas[index].equals(mDatas[i])){
return mDatas[i];
}
}
return null;
}
6. 数组扩容
/**
* 扩容的函数
* @param capacity
*/
private void resize(int capacity) {
E[] newData = (E[]) new Object[capacity];
for (int i = 0; i < size; i++) {
newData[i] = mDatas[i];
}
mDatas = newData;
}
7. 小结
其实就是针对数组的操作
8.联系方式
QQ:1509815887