工作忙,很久没写博客了,今天开始实现java 各类数据结构,算法
List
package 线性表;
/**
* @ClassName List
* @Description TODO
* @Author zhangxiaoxiong
* @Date 2019/6/12 17:02
* @Version 1.0
**/
public interface List {
public int size();
public Object get(int i);
public boolean isEmpty();
public boolean contains(Object e);
public int indexOf(Object e);
public void add(int i , Object e);
public void add(Object e);
public boolean addBefore(Object obj ,Object e);
public boolean addAfter(Object obj ,Object e);
public Object remove(int i);
public boolean remove(Object e);
public Object replace(int i ,Object e);
}
package 线性表;
import com.exception.MyArrayIndexOutOfBoundsException;
import jdk.management.resource.internal.inst.FileOutputStreamRMHooks;
/**
* 顺序表
* 底层使用数组,长度可以动态变化
* @ClassName ArrayList
* @Description TODO
* @Author zhangxiaoxiong
* @Date 2019/6/12 17:09
* @Version 1.0
**/
public class ArrayList implements List {
/**
* 底层是一个数组,目前还没有确定长度
*/
private Object[] elementData;
/**
* 不是数组分配了几个空间,而是元素的个数
*/
private int size;
private static final int TEN=10;
public ArrayList(){
this(0);
}
public ArrayList(int initialCapacity) {
//给数组分配指定数量的空间
elementData=new Object[initialCapacity];
//指定顺序表的元素个数,默认是0
//size=0;
}
public int size() {
return size;
}
public Object get(int i) {
//i<0 或者 i>=size
if(i<0 || i>=size){
throw new MyArrayIndexOutOfBoundsException("数组索引越界");
}
return elementData[i];
}
public boolean isEmpty() {
// if(size>0){
// return false;
// }else {
// return true;
// }
return size==0;
}
public boolean contains(Object e) {
return false;
}
public int indexOf(Object e) {
return 0;
}
public void add(int j, Object e) {
if(size==0){
elementData=new Object[TEN];
//如果数组满了,就扩容
}else if (size!=0 && size == elementData.length){
//新创建一个新的数组,长度是就数组的2倍
Object[] newArr= new Object[TEN+(TEN>>1)];
for (int i=0;i<size;i++){
newArr[i]=elementData[i];
}
elementData = newArr;
}
for (int k=size;k>j;k--){
elementData[k] =elementData[k-1];
}
//给数组赋值
elementData[j]=e;
//元素个数+1
size++;
}
public void add(Object e) {
if(size==0){
elementData=new Object[TEN];
//如果数组满了,就扩容
}else if (size!=0 && size == elementData.length){
//新创建一个新的数组,长度是就数组的2倍
Object[] newArr= new Object[TEN+(TEN>>1)];
for (int i=0;i<size;i++){
newArr[i]=elementData[i];
}
elementData = newArr;
}
//给数组赋值
elementData[size]=e;
//元素个数+1
size++;
//合在一起的写法
//elementData[size++]=e;
// System.out.println(elementData.length);
}
public boolean addBefore(Object obj, Object e) {
return false;
}
public boolean addAfter(Object obj, Object e) {
return false;
}
public Object remove(int i) {
return null;
}
public boolean remove(Object e) {
return false;
}
public Object replace(int i, Object e) {
return null;
}
}
package 线性表;
/**
* @ClassName TestArryList
* @Description TODO
* @Author zhangxiaoxiong
* @Date 2019/6/13 9:11
* @Version 1.0
**/
public class TestArryList {
public static void main(String[] args) {
List list= new ArrayList();
list.add("A");
list.add("B");
list.add("C");
list.add("D");
list.add("F");
list.add("6");
list.add("7");
list.add("8");
list.add("9");
list.add("10");
list.add("11");
list.add("12");
list.add("13");
list.add(11,"OK");
System.out.println(list.size());
System.out.println(list.isEmpty());
System.out.println(list.get(12));
}
}