java数据结构之动态数组实现链表

/**
 *1.java实现链表在本文中实现了链表的删除、添加,交换元素等操作以及泛型的应用
 *2.通过数据结构的学习可以更好的掌握底层代码的实现,更好的应用数据结构,当
 *写的程序有问题是也可以通过查看底层的代码来查看问题
 *3.其实与学习Spring框架有异曲同工之处,正在与你可以查看底层的代码发现问题
 *4.其实最重要的是算法思想,当然要有一定的代码量
 *
 */

public class Array<E> {
    
    private E[] data ;
    private int size ;

    public Array(int capacity) {
        data = (E[])new Object[capacity] ;
        size = 0 ;
    }
    
    public Array() {
        this(10) ;
    }
    
    public int getSize() {
        return size ;
    }

    public int getCapacity() {
        return data.length ;
    }
    
    public boolean isEmpty() {
        return size == 0;
    }
    
    public int find(E e) {
        for(int i = 0 ; i < size ; i++) {
            if(e.equals(data[i])) {
                return i ;
            }
        }
        return - 1 ;
    }

    public void add(int index , E e) {
        if(size == data.length)
            resize(data.length * 2) ;
        if(index < 0 || index > data.length) 
            throw new IllegalArgumentException("下标越界") ;
        for(int i = size - 1 ; i >= index ; i --) {
            data[i + 1] = data[i] ;
        }
        data[index] = e ;
        size ++ ;
    }
    
    public void addLast(E e) {
        add(size , e) ;
    }
    
    public void addFirst(E e) {
        add(0 , e) ;
    }

    public E remove(int index) {
        if(index < 0 || index >= data.length)
            throw new IllegalArgumentException("下标异常") ;
        if(size < data.length / 4 && size / 2 != 0) {
            resize(data.length / 2) ;
        }
        E  e = data[index] ;
        for(int i = index ; i < size - 1 ; i ++) {
            data[i] = data[i + 1] ;
        }
        size -- ;
        return e ;
    }
    
    public E removeFirst() {
        return remove(0) ;
    }
    
    public E removeLast() {
        return remove(size - 1) ;
    }
    
    public void removeElement(E e) {
        int i = find(e) ;
        if(i != -1) {
            remove(i) ;
        }
    }

    public void print() {
        for(int i = 0 ; i < size  ; i ++) {
            System.out.print(data[i] + " ");
        }
        System.out.println();
    }
    
    public void swap(int i , int j) {
        E e ;
        e = data[i] ;
        data[i] = data[j] ;
        data[j] = e ;
    }
    
    public void resize(int capacity) {
        E[] newData = (E[])new Object[capacity] ;
        for(int i = 0 ; i < size ; i ++) {
            newData[i] = data[i] ;
        }
        data = newData ; 
    }
    public static void main(String[] args) {
        Array<Integer> array = new Array<>() ;
        array.add(0, 2);
        array.addLast(4);
        array.addLast(6);
        array.addLast(8);
        array.addLast(10);
        array.addLast(12);
        array.addLast(14);
        array.addLast(16);
        System.out.println("此时容量大小:" + array.getCapacity());
        array.addLast(18);
        array.addLast(20);
        array.addLast(22);
        array.addLast(24);
        System.out.println("此时容量大小:" + array.getCapacity());
        array.remove(0) ;
        array.remove(0) ;
        array.remove(0) ;
        System.out.println("此时容量大小:" + array.getCapacity());        
        array.remove(0) ;
        array.remove(0) ;
        array.remove(0) ;
        System.out.println("此时容量大小:" + array.getCapacity());
        array.remove(0) ;
        array.remove(0) ;
        System.out.println("此时容量大小:" + array.getCapacity());
        System.out.println("此时数组大小" + array.getSize());
        array.remove(0) ;
        System.out.println("此时容量大小:" + array.getCapacity());
        System.out.println("此时数组大小" + array.getSize());
        System.out.println("未交换之前:");
        array.print();
        System.out.println("交换之后:");
        array.swap(0 , array.getSize() -1) ;
        array.print();
        System.out.println("The information of array:");
        System.out.println(array.isEmpty());
        System.out.println(array.getSize() );
        System.out.println("===========================");
        System.out.println(array.find(12));
        System.out.println(array.find(90));
    }
}

java数据结构之动态数组实现链表