ArrayDemo

package com.zjiec.DataStructure.Array;

public class Array {

private Object[] data;// 存储列表中元素
private int count;// 元素的个数

public Array()
{
data = new Object[10];// 构造一个初始容量为10的集合列表
}

// 增加
/*
* 末尾增加元素 参数:e-要增加的元素
*/
public void add(Object e)
{
// 当没有超过初始容量时
if (count < 10)
data[count++] = e;
else
// 当超过初始容量时,扩充容量1
{
Object[] grow = new Object[count + 1];
// 将原有的数据复制到新的数组中
//System.arraycopy方法:如果是数组比较大,那么使用System.arraycopy会比较有优势,因为其使用的是内存复制,省去了大量的数组寻址访问等时间
//复制指定源数组src到目标数组dest。复制从src的srcPos索引开始,复制的个数是length,复制到dest的索引从destPos开始
System.arraycopy(data, 0, grow, 0, data.length);
// 将要添加的元素放在新数组的末尾
grow[count] = e;
data = grow;
count++;// 元素个数增加
}
}

/*
* 指定位置增加元素 参数:index - 指定的索引位置 e - 要添加的元素
*/
public void add(int index, Object e)
{
checkRangeAdd(index);
if (count < 10)
{
System.arraycopy(data, index, data, index + 1, count - index);
data[index] = e;
count++;
}
else
{
Object[] element = new Object[count + 1];
System.arraycopy(data, 0, element, 0, index);
element[index] = e;
System.arraycopy(data, index, element, index + 1, count - index);
data = element;
count++;
}
}

// 检查索引是否超出范围
private void checkRangeAdd(int index)
{
if (index > count || index < 0)
throw new IndexOutOfBoundsException();
}

private void checkRange(int index)
{
if (index >= count || index < 0)
throw new IndexOutOfBoundsException();
}

// 删除
// 删除指定位置上的元素
public void remove(int index)
{
System.out.println("要删除的索引:" + index);
checkRange(index);
// 要移动的元素数量
int move = count - index - 1;
System.arraycopy(data, index + 1, data, index, move);
/*
* data[count-1] = null; count--;//元素数量减少1 //与下一步的操作等效
*/
data[--count] = null;
}

// 删除指定的元素(列表中首次出现的那个元素)
public void remove(Object e)
{
// 先找出元素在列表中首次出现的位置,并将其按指定位置删除
for (int i = 0; i < count; i++)
{
if (e == null ? data[i] == null : e.equals(data[i]))
{
remove(i);
System.out.println("删除元素首次出现的位置" + i);
break;
}
}
}

// 修改
//修改指定位置上的元素
public void set(int index,Object e)
{
checkRange(index);
data[index] = e;
}

// 查询
/*
* 获得指定位置上的元素 参数:index - 指定的索引位置
*/
public Object get(int index)
{
checkRange(index);
return data[index];

}

// 获得集合列表中元素的个数
public int size()
{
return count;
}

@Override
public String toString()
{
String s = "[";
for (int i = 0; i < count - 1; i++)
{
s += data[i] + ",";
}
s += data[count - 1] + "]";

return s;
}


}

posted on 2018-01-17 17:11  giessen  阅读(97)  评论(0)    收藏  举报

导航