简单的实现ArrayList
public class MyArray {
private static final int DEFAULT_SIZE=10;//默认长度
private Object[] elementData;//数据存储地方
private int size;//集合中存在元素的个数
//读写锁
private Lock readLock= new ReentrantReadWriteLock().readLock();
private Lock writeLock= new ReentrantReadWriteLock().writeLock();
/*构造函数*/
public MyArray(int i){
elementData=new Object[i];
}
public MyArray(){
this(10);
}
/*添加方法*/
public void add(int index,E e){
try {
writeLock.lock();
checkIndex(index);//检查索引是否合法
if (size==elementData.length)
rangSize(size*2);
for (int i = size; i >index; i--) {
elementData[i]=elementData[i-1];
}
elementData[index]=e;
size++;
}finally {
writeLock.unlock();
}
}
public void add(E e){
add(size,e);
}
public void addAll(E... e){
for (int i = 0; i < e.length; i++) {
add(e[i]);
}
}
public void addFirst(E e){
add(0,e);
}
public void addLast(E e){
add(size,e);
}
/*查询方法*/
public E get(int index){
try {
checkIndex(index);
readLock.lock();
return (E) elementData[index];
}finally {
readLock.unlock();
}
}
public int indexOf(E e){
if (e==null){
for (int i = 0; i < elementData.length; i++) {
if (null==elementData[i]){
return i;
}
}
}else {
for (int i = 0; i < elementData.length; i++) {
if (e.equals(elementData[i])){
return i;
}
}
}
return -1;
}
/*删除方法*/
public E remove(int index){
try {
writeLock.lock();
checkIndex(index);
E data= (E) elementData[0];
if (elementData.length>DEFAULT_SIZE&&elementData.length/4==size)
rangSize(elementData.length/2);
if (!(size==1)){
for (int i = index; i < size-1; i++) {
elementData[i]=elementData[i+1];
}
}
elementData[--size]=null;
return data;
}finally {
writeLock.unlock();
}
}
public int remove(E e){
int index=indexOf(e);
if (index!=-1)
remove(index);
return index;
}
public boolean removeAll(Collection<E> collections){
for (E collection : collections) {
remove(collection);
}
return true;
}
public int size(){
return size;
}
public boolean isEmpty(){
return size()==0;
}
@Override
public String toString() {
StringBuilder builder=new StringBuilder();
if (size == 0) {
builder.append("[]");
} else {
builder.append("[");
for (int i = 0; i < size; i++) {
builder.append(elementData[i]);
if (i!=size-1){
builder.append(",");
}
}
builder.append("]");
}
return builder.toString();
}
/*改*/
public boolean set(int index,E e){
checkIndex(index);
elementData[index]=e;
return true;
}
public boolean contains(E e){
return indexOf(e)!=-1;
}
//辅助方法 检查索引
private void checkIndex(int index){
if (index<0||index>size){
throw new IndexOutOfBoundsException("索引越界问题!");
}
}
//扩容方法
private void rangSize(int length){
if (length<DEFAULT_SIZE){
length=DEFAULT_SIZE;
}
Object[] nowArray=new Object[length];
System.arraycopy(elementData,0,nowArray,0,size);
elementData=nowArray;
}
}