你的位置:首页 > Java教程

[Java教程]线性表简述


一、简单实现增,删,改、查

package datatructs;/** * 表接口 */public interface LinearList {    boolean isEmpty();//判断线性表是否为空  int size();  //返回线性表的大小  Object get(int index); //获取指定索引的元素  Object set (int index,Object element);//修改指定索引的元素    boolean addForIndex(int index,Object element);//在指定索引位置添加的元素    boolean add(Object element);//在线性表最后添加元素    Object remove(int index); //移除指定位置的元素    void clear(); //清空线性表        }

实现类

package datatructs;public class LinearListImpl implements LinearList {  //线性表  private Object [] sList;  //线性表大小  private int size;        public LinearListImpl(int length) {    if(length<0){      sList=new Object[10];    }else{      sList=new Object[length];    }  }      public LinearListImpl() {    //设置默认为10个大小    this(10);  }  /*   * 检查线性表是否为空   */  @Override  public boolean isEmpty() {    //如果size=0就说明为空 true,不为0就为false    return size==0;    }  /*   * 返回线必表的大小   */  @Override  public int size() {      return size;  }    /*     * 返回指定索引位置的元素     */  @Override  public Object get(int index) {        return sList[index];  }        @Override  public Object set(int index, Object element) {    //得到原来位置上的元素    Object old=sList[index];    //修改    sList[index]=element;    //返回原来的值    return old;   }  /*   * 检查在指定位置添加元素的,索引是否在范围内   */  public void checkIndexForAdd(int index){    if(index<0 || index>size){      throw new IndexOutOfBoundsException("要插入的索引不在表的范围内");    }  }  /*   * 检查在指定索引是否在范围 内   */  public void checkIndex(int index){    if(index>size){      throw new IndexOutOfBoundsException("要操作的索引不在表的范围内");    }  }      /*     *在指定索引位置添加       */  @Override  public boolean addForIndex(int index, Object element) {    checkIndexForAdd(index);        //判断线性表是否还有空间    if(size()==sList.length){      //如果为0      if(sList.length==0){        //初始化为10        sList=new Object[10];      }else{        //不为空就+1        //临时表        Object [] tmp=sList;        //重新+1         this.sList=new Object[sList.length+1];        //将元素复制过来        for (int i = 0; i < size; i++) {          sList[i]=tmp[i];        }      }    }    //向后移一位    for(int i=size-1;i>=index;i--){      sList[i]=sList[i+1];    }    //插入元素    sList[index]=element;    size++;    return true;  }  /*   * 在最后添加元素   */  @Override  public boolean add(Object element) {    //调用 上面的添加方法     return addForIndex(size,element);      }  /*   * 删除指定索引的元素   */  @Override  public Object remove(int index) {    checkIndex(index);    for(int i=index;i<size-1;i++){      sList[i]=sList[i+1];    }    sList[--size]=null;    //返回要移除的元素    return sList[index];  }  @Override  public void clear() {    for (int i = 0; i < size; i++) {      //将每个值设置为null      sList[i]=null;    }    //将线性表大小设置0    size=0;  }}

 

测试

package datatructs;public class Demo {  /**   * @param args   */  public static void main(String[] args) {    LinearListImpl ll=new LinearListImpl();    System.out.println("是否为空: "+ll.isEmpty());    System.out.println("大小:"+ll.size());    ll.add("张三");    ll.add("李四");    ll.addForIndex(2, "王五");        System.out.println(ll.set(2, "赵六"));                ll.remove(2);    for (int i = 0; i < ll.size(); i++) {      System.out.print("\t第"+i+" 元素 :"+ll.get(i));    }        ll.clear();    System.out.println("元素大小:"+ll.size());    System.out.println("是否为空: "+ll.isEmpty());  }}