package com.ct.array;
/**
* @author MoonMonster
* @version 创建时间:2015年10月21日 下午10:15:05
*/
public class Array {
//数组中元素个数
private int count = 0;
//初始容量大小
private int capcity = 16;
//增量,每次增加的比例
private double increment = 1.2;
//初始化数组
private Object[] src = new Object[capcity];
public Array() {
}
//自定义原始数组大小
public Array(int capcity) {
this.capcity = capcity;
}
// 增加
public void add(Object obj) {
//判断是否越界,如是,则扩充数组
if (count >= src.length) {
src = extend();
}
//将新增加的数据放在count处
src[count] = obj;
count++;
}
// 对数组的扩充
private Object[] extend() {
//扩充后的数组容量是旧的数组的increment倍
Object[] dest = new Object[(int) (src.length * increment)];
for (int i = 0; i < src.length; i++) {
dest[i] = src[i];
}
//返回扩充后的数组
return dest;
}
// 输出
public void print() {
for (int i = 0; i < count; i++) {
System.out.print(src[i] + " ");
}
System.out.println();
}
// 获得数组大小
public int size() {
return count;
}
// 插入
public void insert(int index, Object obj) {
if(count + 1 >= src.length){
src = extend();
}
//从最后一个元素开始,把前一个元素放到后一个位置来
for(int i=count; i>index; i--){
src[i] = src[i-1];
}
//将要插入的元素放在index处
src[index] = obj;
//在插入一个元素后,长度+1
count ++;
}
//替换index处的数据
public void replace(int index, Object obj){
src[index] = obj;
}
//删除index处的数据元素
public void delete(int index){
for(int i=index; i<src.length-1; i++){
src[i] = src[i+1];
}
count --;
}
//返回index处的数据
public Object get(int index){
return src[index];
}
}
测试类
package com.ct.array;
/**
* @author MoonMonster
* @version 创建时间:2015年10月21日 下午10:20:50
*/
public class Demo {
public static void main(String[] args) {
Array arr = new Array();
long t1 = System.currentTimeMillis();
for (int i = 0; i < 10; i++) {
arr.add(new Integer(i));
}
long t2 = System.currentTimeMillis();
System.out.println("耗时: " + (t2 - t1));
arr.insert(2, new Integer(123));
//删除
arr.delete(0);
//输出
arr.print();
//数组长度
System.out.println("数组的长度为: "+arr.size());
}
}
1. a.在定义增量时,不要定义成一个固定的值,每次扩充一定比例。
b.比例不是越大越好,也要考虑到内存问题,所以取个合适的值就行。
c.本来要测试取什么增量值最好,但每次测的结果误差太大,又不知道如何改,便放弃 了。
2. 在Array类中的src数组,可以定义成Object类型,那么便可使用全类型的数据,而不是某个固定下来的了。
3. 在删除和增加等方法中,不要使用临时数组来保存数据,那样会耗时耗内存。
4. 尽量不要在方法中出现重复的代码,例如add()和insert()方法中,都需要用到extend()方法中的代码,便可以提取出来封装为方法,易于修改和阅读。
5.先暂时写这几个方法,其他的例如查找是否存在某个数据或者某个数据有多少个,日后再说。