版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Dian1pei2xiao3/article/details/82982102
MyArraylist :
public class MyArraylist <T> {
private T[] arr;
private int size;
private static final int CAPACITY = 10;
public MyArraylist() {
this(CAPACITY);
}
public int getSize() {
return size;
}
public MyArraylist(int n) {//判断n是否符合要求,需要异常处理
size = 0;
if (n < 0) {
try {
throw new Exception();
} catch (Exception e) {
System.out.println(n + "不能为负数");
}
}
arr = (T[]) new Object[n];
}
private void grow() {
int oldCapacity = arr.length;
int newCapacity = oldCapacity + (oldCapacity >> 1);
arr = Arrays.copyOf(arr, newCapacity);
}
private void isfull() {
if (arr.length == size) {
grow();
} else {
return;
}
}
/**
* 增:
* 1.直接增加,等同尾插
* 2.头插
* 3.按照位置插入
* 存在处理问题:判满;扩容;按照位置插入时需要判断index的范围
* size++
*/
public void add(T value) {
isfull();
arr[size++] = value;
}
public void addTead(T value) {
isfull();
System.arraycopy(arr, 0, arr, 1, size);
arr[0] = value;
}//用拷贝比用for循环平移时间复杂度低
public void addTail(T value) {
isfull();
arr[size++] = value;
}
private void rangeCheck(int index) {
if (index < 0 || index > arr.length) {
return;
}
}
public void addIndex(int index, T value) {//按索引插入
rangeCheck(index);
isfull();
System.arraycopy(arr, index, arr, index + 1, size - index);
arr[index] = value;
size++;
}
/**
* 删:
* 1.按照位置删
* 2.按照值删 ----->涉及查该值是否存在返回位置
* 3.头删
* 4.尾删
* size--;
* 内存泄漏null
* 检查范围
*
*/
public T[] delIndex(int index) {//按照位置删
rangeCheck(index);
System.arraycopy(arr, index+1, arr, index , size - index);
arr[size] = null;//防止内存泄漏
size--;
return arr;
}
public T[] delValue(T value){//按照值删
int pos=findValue(value);
if(pos!=-1){
System.arraycopy(arr, pos+1, arr, pos, size - pos);
arr[size]=null;
size--;
}
return arr;
}
public void delHead(){//头删
System.arraycopy(arr, 1, arr, 0, size-1);
arr[size]=null;
size--;
}
public void delTail(){//尾删
arr[size]=null;
size--;
}
/**
* 改:
* 按照位置改
*/
public void change(int index,T value){//按照位置改
rangeCheck(index);
arr[index]=value;
}
/**
* 查:
* 按照值查找---》返回位置
* 按照位置查找-----》返回值
*
*/
public int findValue(T value){//按照值查找
for(int i=0;i<size;i++){
if(arr[i].equals(value)){
return i;
}
}
return -1;
}
public T findIndex(int index){
rangeCheck(index);
return arr[index];
}
/**
* 显示
*/
public void show(){
for(int i=0;i<size;i++){
System.out.println(arr[i].toString());
}
}
}
People类:
class People{
private String name;
private int id;
public People(String name, int id) {
this.name = name;
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
@Override
public String toString() {
return "People{" +
"name='" + name + '\'' +
", id=" + id +
'}';
}
}
主函数:main
public static void main(String args[]) {
MyArraylist<People> list = new MyArraylist<People>(3);
People p1 = new People("zs", 002);
People p2 = new People("ls", 003);
list.add(p1);
list.add(p2);
list.delValue(p1);
list.show();
System.out.println();
// list.show();
list.delIndex(1);
// System.out.println(list.size());
// list.show();
System.out.println(list.findIndex(0));
// System.out.println(list.getSize());
}