添加泛型,实现add toString
package mycollection;
/*
* 添加泛型
*/
public class sArrayList02<E> {
private Object[] elementData; //元素数组
private int size; //容量
private final static int DEFAULT_CAPACITY = 10;
//final修饰变量表明变量只能被初始化一次,static修饰变量表示只保留一份副本
//默认构造
public sArrayList02() {
elementData = new Object[DEFAULT_CAPACITY];
}
public sArrayList02(int initialCapacity) {
if(initialCapacity >= 0)
elementData = new Object[initialCapacity];
else
throw new IllegalArgumentException("Illegal Capacity: "+ initialCapacity);
}
public void add(E element) {
elementData[size++] = element;
}
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append("[");
for(int i = 0; i < size; ++i) {
sb.append(elementData[i]+",");
}
sb.setCharAt(sb.length() - 1, ']');
return sb.toString();
// return elementData.toString();
}
public static void main(String[] args) {
sArrayList02 s = new sArrayList02(20);
s.add("ability");
s.add("temperment");
// System.out.println(s.toString());
System.out.println(s); //打印对象会自动调用toString方法
}
}
增加数组扩容
package mycollection;
/*
* 增加数组扩容
*/
public class sArrayList03<E> {
private Object[] elementData; //元素数组
private int size; //容量
private final static int DEFAULT_CAPACITY = 10;
//final修饰变量表明变量不可变,static修饰变量表示只保留一份副本
//默认构造
public sArrayList03() {
elementData = new Object[DEFAULT_CAPACITY];
}
public sArrayList03(int initialCapacity) {
if(initialCapacity >= 0)
elementData = new Object[initialCapacity];
else
throw new IllegalArgumentException("Illegal Capacity: "+ initialCapacity);
}
public void add(E element) {
//判断要不要扩容
if(size == elementData.length) {
Object[] newArray = new Object[elementData.length + (elementData.length>>1)];
//加法优先级高于>>
// for(int i=0; i<size; ++i)
// newArray[i] = elementData[i];
System.arraycopy(elementData, 0, newArray, 0, elementData.length);
elementData = newArray;
}
elementData[size++] = element;
}
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append("[");
for(int i = 0; i < size; ++i) {
sb.append(elementData[i]+",");
}
sb.setCharAt(sb.length() - 1, ']');
return sb.toString();
// return elementData.toString();
}
public static void main(String[] args) {
sArrayList03<String> s = new sArrayList03<String>(2);
s.add("ability");
s.add("temperment");
s.add("node");
// System.out.println(s.toString());
System.out.println(s); //打印对象会自动调用toString方法
}
}
增加set,get和数组边界检查
package mycollection;
/*
* 增加set get
* 数组边界检查
*/
public class sArrayList04<E> { private Object[] elementData; //元素数组
private int size; //容量
private final static int DEFAULT_CAPACITY = 10;
//final修饰变量表明变量不可变,static修饰变量表示只保留一份副本
//默认构造
public sArrayList04() {
elementData = new Object[DEFAULT_CAPACITY];
}
public sArrayList04(int initialCapacity) {
if(initialCapacity >= 0)
elementData = new Object[initialCapacity];
else
throw new IllegalArgumentException("Illegal Capacity: "+ initialCapacity);
}
public void add(E element) {
//判断要不要扩容
if(size == elementData.length) {
Object[] newArray = new Object[elementData.length + (elementData.length>>1)];
//加法优先级高于>>
System.arraycopy(elementData, 0, newArray, 0, elementData.length);
elementData = newArray;
}
elementData[size++] = element;
}
public E get(int index) {
return (E)elementData[index];
}
/*
public void set(E element, int index) {
//判断索引是否合法
if(index < size && index > 0)
elementData[index] = element;
else
throw new RuntimeException("索引不合法: "+index);
}
*/
public void set(E element, int index) {
//判断索引是否合法,不合法抛出异常
checkRange(index);
elementData[index] = element;
}
public void checkRange(int index) {
if(index >= size || index < 0)
throw new RuntimeException("索引不合法: "+index);
}
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append("[");
for(int i = 0; i < size; ++i) {
sb.append(elementData[i]+",");
}
sb.setCharAt(sb.length() - 1, ']');
return sb.toString();
}
public static void main(String[] args) {
sArrayList04<String> s = new sArrayList04<String>(2);
s.add("ability");
s.add("temperment");
s.add("node");
System.out.println(s); //打印对象会自动调用toString方法
System.out.println(s.get(2));
s.set("milk", 2);
System.out.println(s.get(2));
// s.set("honey", -10);
}
}
增加remove(两种),增加size isEmpty
package mycollection;
import javax.print.attribute.Size2DSyntax;
/*
* 增加remove(两种)
* 增加size isEmpty
*/
public class sArrayList05<E> { private Object[] elementData; //元素数组
private int size; //容量
private final static int DEFAULT_CAPACITY = 10;
//final修饰变量表明变量不可变,static修饰变量表示只保留一份副本
//默认构造
public sArrayList05() {
elementData = new Object[DEFAULT_CAPACITY];
}
public sArrayList05(int initialCapacity) {
if(initialCapacity >= 0)
elementData = new Object[initialCapacity];
else
throw new IllegalArgumentException("Illegal Capacity: "+ initialCapacity);
}
public void add(E element) {
//判断要不要扩容
if(size == elementData.length) {
Object[] newArray = new Object[elementData.length + (elementData.length>>1)];
//加法优先级高于>>
System.arraycopy(elementData, 0, newArray, 0, elementData.length);
elementData = newArray;
}
elementData[size++] = element;
}
public E get(int index) {
return (E)elementData[index];
}
/*
public void set(E element, int index) {
//判断索引是否合法
if(index < size && index > 0)
elementData[index] = element;
else
throw new RuntimeException("索引不合法: "+index);
}
*/
public void set(E element, int index) {
//判断索引是否合法,不合法抛出异常
checkRange(index);
elementData[index] = element;
}
public void checkRange(int index) {
if(index >= size || index < 0)
throw new RuntimeException("索引不合法: "+index);
}
public void remove(E element) {
for(int i=0; i<size; ++i) {
if(element.equals(get(i))) {
remove(i);
}
}
}
public void remove(int index) {
checkRange(index);
if(index != size-1)
System.arraycopy(elementData, index+1, elementData, index, elementData.length-index-1);
// for(int i=index; i<size-1; ++i)
// set(get(i+1), i);
elementData[--size] = null;
}
public int size() {
return size;
}
public boolean isEmpty() {
return size == 0 ? true : false;
}
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append("[");
for(int i = 0; i < size; ++i) {
sb.append(elementData[i]+",");
}
sb.setCharAt(sb.length() - 1, ']');
return sb.toString();
}
public static void main(String[] args) {
sArrayList05<String> s = new sArrayList05<String>(2);
s.add("ability");
s.add("temperment");
s.add("node");
System.out.println(s); //打印对象会自动调用toString方法
System.out.println(s.get(2));
s.set("milk", 2);
System.out.println(s.get(2));
System.out.println(s);
s.remove(1);
s.remove("milk");
System.out.println(s);
System.out.println(s.size);
System.out.println(s.isEmpty());
}
}