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));
}
}