手写代码:ArrayList
1、创建、添加、tostring方法
具体增加方法:
1、创建默认大小为10的数组
2、创建指定大小的数组
3、添加元素
4、打印数组内容
代码:
public class MyArrayList<E> {
private Object[] elementData;
private int size;
private static final int DEFALT_CAPACITY = 10;
// 1、创建默认大小为10的数组
public MyArrayList() {
elementData = new Object[DEFALT_CAPACITY];
}
// 2、创建指定大小的数组
public MyArrayList(int size_lenth) {
elementData = new Object[size_lenth];
size = size_lenth;
}
// 3、添加元素
public void add(E element) {
elementData[size++] = element;
}
// 4、打印数组内容
public String toString() {
StringBuilder builder = new StringBuilder();
builder.append("[");
for (int i = 0; i < size; i++) {
builder.append(elementData[i] + ",");
}
builder.setCharAt(builder.length() - 1, ']');
return builder.toString();
}
}
2、增加数组扩容
// 3、添加元素
public void add(E element) {
// 数组扩容
if (size == elementData.length) {
Object[] objects = new Object[elementData.length + (elementData.length >> 1)];
System.arraycopy(elementData, 0, objects, 0, elementData.length);
elementData = objects;
}
elementData[size++] = element;
}
3、set、get、数组越界检查
具体增加方法:
5、set方法
6、get方法
7、索引越界检查
代码:
// 5、set方法
public void set(E e,int index){
checkRange(index);
elementData[index]=e;
}
// 6、get方法
public E get(int index){
checkRange(index);
return (E)elementData[index];
}
// 7、索引越界检查
public void checkRange(int index){
if (index<0||index>size-1){
throw new RuntimeException("索引不合法");
}
}
4、remove、size、isEmpty
具体增加加方法
8、remove方法(根据元素)
9、remove方法(根据索引)
10、size方法
11、isEmpty方法
代码:
// 8、remove方法(根据元素)
public void remove(E element){
for (int i = 0; i < elementData.length; i++) {
if (element.equals(get(i))){
remove(i);
}
}
}
// 9、remove方法(根据索引)
public void remove(int index){
int NumMoved=elementData.length-index-1;
if (index>0){
System.arraycopy(elementData,index+1,elementData,index,NumMoved);
}
elementData[--size]=null;
}
// 10、size方法
public int size(){
return size;
}
// 11、isEmpty方法
public boolean isEmpty(){
return size==0?true:false;
}
5、最终完整版本
public class MyArrayList<E> {
private Object[] elementData;
private int size;
private static final int DEFALT_CAPACITY = 10;
// 1、创建默认大小为10的数组
public MyArrayList() {
elementData = new Object[DEFALT_CAPACITY];
}
// 2、创建指定大小的数组
public MyArrayList(int size_lenth) {
elementData = new Object[size_lenth];
size = size_lenth;
}
// 3、添加元素
public void add(E element) {
// 数组扩容
if (size == elementData.length) {
Object[] objects = new Object[elementData.length + (elementData.length >> 1)];
System.arraycopy(elementData, 0, objects, 0, elementData.length);
elementData = objects;
}
elementData[size++] = element;
}
// 4、打印数组内容
public String toString() {
StringBuilder builder = new StringBuilder();
builder.append("[");
for (int i = 0; i < size; i++) {
builder.append(elementData[i] + ",");
}
builder.setCharAt(builder.length() - 1, ']');
return builder.toString();
}
// 5、set方法
public void set(E e,int index){
checkRange(index);
elementData[index]=e;
}
// 6、get方法
public E get(int index){
checkRange(index);
return (E)elementData[index];
}
// 7、索引越界检查
public void checkRange(int index){
if (index<0||index>size-1){
throw new RuntimeException("索引不合法");
}
}
// 8、remove方法(根据元素)
public void remove(E element){
for (int i = 0; i < elementData.length; i++) {
if (element.equals(get(i))){
remove(i);
}
}
}
// 9、remove方法(根据索引)
public void remove(int index){
int NumMoved=elementData.length-index-1;
if (index>0){
System.arraycopy(elementData,index+1,elementData,index,NumMoved);
}
elementData[--size]=null;
}
// 10、size方法
public int size(){
return size;
}
// 11、isEmpty方法
public boolean isEmpty(){
return size==0?true:false;
}
}