--------------------------------------------題記
最近朋友有面試,叫我幫他根據需求寫一個類似arraylist的集合:remove、get、tostring、add和刪除後有空的位置後面的元素自動向前移。
---------------------------------------------代碼
package hxq;
public class Test {
public static void main(String[] args) {
myArrayList<String> list = new myArrayList<String>();
list.add("1");
list.add("2");
System.out.println("list的toString:" + list.toString());
System.out.println("list的第一個元素:" + list.get(0));
System.out.println("list的size:" + list.size());
System.out.println("刪除第一個元素");
list.remove(0);
System.out.println("list的第一個元素:" + list.get(0));
System.out.println("list的size:" + list.size());
}
}
class myArrayList<T> {
private Object[] myArray;
/**
* 增加
* @param ts 添加的對象
*/
public void add(T...ts) {
addArrayLength();
int len = myArray.length - 1;
if (ts.length == 1) {
myArray[len] = ts[0];
return ;
}
myArray[len] = ts;
}
/**
* 集合大小
* @return 返回集合大小
*/
public int size() {
return myArray.length;
}
/**
* 刪除集合
* @param index 刪除的索引
*/
public void remove(int index) {
Object[] temps = new Object[myArray.length];
int j = 0;
for (int i = 0; i < myArray.length; i++) {
if (i != index) {
temps[j] = myArray[i];
j++;
}
}
reduceArrayLength();
for (int i = 0; i < temps.length - 1; i++) {
myArray[i] = temps[i];
}
}
/**
* 重寫toString
*/
public String toString() {
String str = "[";
for (int i = 0; i < myArray.length; i++) {
if (i > 0) {
str += "," + myArray[i];
continue;
}
str += myArray[i];
}
str += "]";
return str;
}
@SuppressWarnings("unchecked")
public T get(int index) {
return (T) myArray[index];
}
//utils---------------------------------
private void addArrayLength() {
if (myArray == null) {
myArray = new Object[1];
return ;
}
Object[] objs = new Object[myArray.length + 1];
for (int i = 0; i < myArray.length; i++) {
objs[i] = myArray[i];
}
myArray = objs;
}
private void reduceArrayLength() {
myArray = new Object[myArray.length - 1];
}
}