ArrayList 方法详解
2017-09-08 本文已影响0人
文艺小年青
自己实现ArrayList的常用方法
import java.util.List;
import java.util.Set;
import javax.print.attribute.standard.Sides;
public class MyArrayList {
private static final int DEFAULT_SIZE = 10;
//存值的数组
private Object[] arr;
//数组中有效元素的个数
private int size = 0;
//三种初始化构造方法
public MyArrayList() {
arr = new Object[DEFAULT_SIZE];
}
public MyArrayList(int capacity) {
//根据用户传入的长度,定义一个数组
arr = new Object[capacity];
}
public MyArrayList(List list) {
//保证能保存用户传递进去的数据,并且多10个空间
arr = new Object[list.size() + DEFAULT_SIZE];
//把老数组放进新数组
for (int i = 0; i < list.size(); i++) {
arr[i] = list.get(i);
}
//把新数组有效长度改成老数组的有效长度
this.size = list.size();
}
//根据元素查找位置
public int indexOf(Object o) {
for (int i = 0; i < this.size; i++) {
if (this.arr[i].equals(o)) {
return i;
}
}
return -1;
}
//根据下标查找元素
public Object get(int index) {
if (index < 0 || index >= this.size) {
return -1;
}
return this.arr[index];
}
//根据位置删除元素
public Object remove(int index) {
if (index < 0 || index >= this.size) {
return -1;
}
Object tempObject = this.arr[index];
//this.size - 1 最后一个元素不用管
for (int i = index; i < this.size - 1; i++) {
this.arr[i] = this.arr[i+1];
}
this.size--; //删除以后个数减一
return tempObject;
}
//根据元素删除元素 (只会删除出现的第一个)
public boolean remove(Object o) {
//根据元素找到下标
int index = this.indexOf(o);
if (index == -1) { //没有找到元素
return false;
}
this.remove(index); //根据下标删除元素
return true;
}
//插入元素到固定位置
public Object add(int index,Object element) {
if (index < 0 || index > this.size) {
return -1;
}
if (this.size >= this.arr.length) {
//扩容
Object[] newArr = new Object[this.size + DEFAULT_SIZE];
for (int i = 0; i < size; i++) {
newArr[i] = this.arr[i];
}
this.arr = newArr;
//插入元素
this.add(index, element);
}else {
//插入元素的操作
for (int i = size - 1; i >= index; i--) {
this.arr[i+1] = this.arr[i];
}
this.arr[index] = element;
this.size++;
}
return this.arr[index];
}
//返回数组的长度
public int size() {
//size 是真实的长度
return this.size;
}
//添加 (插入到数组的最后)
public boolean add(Object o) {
if (o == null) {
return false;
}
Object object = this.add(size, o);
return true;
}
//用指定的元素替代此列表中指定位置上的元素
public Object set(int index,Object element) {
//判断index是否越界
if (index < 0 || index >= this.size) {
return -1;
}
//判断插入的对象是不是为空
if (element == null) {
return null;
}
//设置更新元素
this.arr[index] = element;
return element;
}
//是否包含某个元素 -----很常用
public boolean contains(Object o) {
if (o == null) {
return false;
}
//根据元素查下标
int index = this.indexOf(o);
if (index >= 0) { //证明可以查找到这个元素
return true;
}
return false;
}
//清空数组
public void clear() {
this.size = 0;
}
//输出数组
@Override
public String toString() {
String string = "[";
for (int i = 0; i < size; i++) {
string+=this.arr[i].toString();
string+=",";
}
//这里是为防止清空数组以后少一个前括号的问题
if (string.length() >= 2) {
string = string.substring(0, string.length() - 1);
}
string+="]";
return string;
}
}