接口设计
public interface List {
/**
* 获取尺寸
* @return
*/
int size();
/**
* 判断是否为空
* @return
*/
boolean isEmpty();
/**
* 添加一个
* @param e
* @return
*/
int push(String e);
/**
* 添加多个
* @param list
* @return
*/
int push(List list);
/**
* 删除对象
* @param index
* @return
*/
String remove(int index);
/**
* 按照index获取元素
* @param index
* @return
*/
String get(int index);
/**
* 替换值
* @param index
* @param element
* @return
*/
String replace(int index,String element);
/**
* 在index处插入元素
* @param index
* @param element
* @return
*/
String insert(int index,String element);
/**
* 获取下标
* @param object
* @return
*/
int indexOf(String object);
/**
* 清空
*/
void clear();
/**
* 判断是否相等
* @param list
* @return
*/
boolean equals(List list);
}
接口实现类
public class ArrayList implements List{
/**
* 字符串数组
*/
private String[] strings;
private int size;
private int base;
private final int multiple;
private final float change;
/********* 构造函数 **********/
public ArrayList(){
this(16,0.75f,2);
}
public ArrayList(int base,float change,int multiple){
this.base = base;
this.change = change;
this.multiple = multiple;
this.strings = new String[base];
}
/************** 调整为原来multiple倍 *****************/
private void resize(){
resize(base*multiple+1);
}
private void resize(int size){
String[] tmp = strings;
String[] newer = new String[size];
System.arraycopy(tmp, 0, newer, 0, tmp.length);
base = size;
this.strings = newer;
}
private void ensure(int has){
if (base+has > base*multiple+1){
resize(base+has+1);
}else if ((size+has)/(base*1.0) > change){
resize();
}
}
public int size() {
return size;
}
public boolean isEmpty() {
return size == 0;
}
public int push(String e) {
ensure(1);
strings[size++] = e;
return size-1;
}
public int push(List list) {
ensure(list.size());
for (int i = 0; i < list.size(); i++) {
strings[size++] = list.get(i);
}
return list.size();
}
public String remove(int index) {
String tmp = strings[index];
for (int i = index; i < size; i++) {
strings[i] = strings[i+1];
}
size--;
return tmp;
}
public String get(int index) {
return strings[index];
}
public String replace(int index, String element) {
strings[index] = element;
return strings[index];
}
public String insert(int index, String element) {
ensure(1);
for (int i = size - 1; i >= index; i--) {
strings[i+1] = strings[i];
}
strings[index] = element;
size++;
return strings[index];
}
public int indexOf(String object) {
for (int i = 0; i < size; i++) {
if (strings[i].equals(object)){
return i;
}
}
return -1;
}
public void clear() {
for (int i = 0; i < size; i++) {
strings[i] = null;
}
size = 0;
}
public boolean equals(List list) {
if (list.size() != size){
return false;
}else {
for (int i = 0; i < size; i++) {
if (!list.get(i).equals(strings[i])){
return false;
}
}
return true;
}
}
@Override
public String toString() {
StringBuilder buffer = new StringBuilder();
buffer.append("[");
for (int i = 0; i < size; i++) {
if (i != size-1){
buffer.append(strings[i]).append(", ");
}else {
buffer.append(strings[i]);
}
}
buffer.append("]");
return buffer.toString();
}
}