手写ArrayList
package review
;
public class MyArrayList<E> {
private static final int
DEFAULTCAPACITY = 10;
private Object
[] elementData
;
int size
= 0;
public MyArrayList() {
elementData
= new Object[DEFAULTCAPACITY];
}
public void set(int index
, E e
) {
this.elementData
[index
] = e
;
}
public E get(int index
) {
checkRange(index
);
return (E) elementData
[index
];
}
public void remove(int index
) {
checkRange(index
);
System
.arraycopy(elementData
, index
+ 1, elementData
, index
, size
- index
- 1);
size
--;
}
public void remove(E e
) {
boolean flag
= false;
for (int i
= 0; i
< size
; i
++) {
if (elementData
[i
].equals(e
)) {
remove(i
);
}
}
size
--;
}
public void add(E e
) {
if (size
== elementData
.length
) {
newCapacity();
}
elementData
[size
++] = e
;
}
public void add(int index
, E e
) {
checkRange(index
);
System
.arraycopy(elementData
, index
, elementData
, index
+ 1, size
- index
);
elementData
[index
] = e
;
}
private void newCapacity() {
int len
= elementData
.length
+ (elementData
.length
>> 1);
Object
[] newElementData
= new Object[len
];
System
.arraycopy(elementData
, 0, newElementData
, 0, elementData
.length
);
elementData
= newElementData
;
}
private void checkRange(int index
) {
if (index
== size
|| index
< 0) {
System
.out
.println("下标越界!");
return;
}
}
@Override
public String
toString() {
StringBuilder sBuilder
= new StringBuilder();
sBuilder
.append("[");
for (int i
= 0; i
< size
; i
++) {
sBuilder
.append(elementData
[i
] + ",");
}
sBuilder
.setCharAt(sBuilder
.length() - 1, ']');
return sBuilder
.toString();
}
public static void main(String
[] args
) {
MyArrayList
<Integer
> list
= new MyArrayList<>();
for (int i
= 0; i
< 16; i
++) {
list
.add(i
);
}
System
.out
.println(list
);
list
.add(16);
System
.out
.println(list
);
list
.remove(16);
System
.out
.println(list
);
list
.add(0);
System
.out
.println(list
.get(12));
list
.remove(1);
System
.out
.println(list
);
list
.set(0, 118);
System
.out
.println(list
);
}
}
转载请注明原文地址: https://mac.8miu.com/read-65918.html