• 基于数组实现线性表


      数组是一组内存地址连续的存储单元,所以用数组实现的线性表是顺序存储的。可以通过数组下标轻易的访问不同位置的数据,但要注意下标越界的异常(ArrayIndexOutOfBoundsException)

      用数组实现的线性表,查询与更改方法有着优势。(因为有下标)

      1.MyList接口定义功能

    public interface MyList {
        //新增一个元素
        void add(Object element);
        //删除与输入元素相同的元素
        void delete(Object element);
        //根据索引删除元素
        void delete(int index);
        //更新元素
        void update(int index,Object newelement);
        //三种查询形式
        boolean contains(Object element);
        
        Object at(int index);
        
        int indexOf(Object element);
    }

       2.MyArrayList类实现接口功能

      1 public class MyArrayList implements MyList{
      2     private Object elements[];//真正存储元素的底层结构
      3     private int size;//当前的存储个数
      4     private int capcity;//总容量
      5     
      6     public MyArrayList(int capcity)
      7     {
      8         this.size=0;
      9         this.capcity=capcity;
     10         elements=new Object[capcity];
     11     }
     12     public MyArrayList()
     13     {
     14         this(10);
     15     }
     16     @Override
     17     public void add(Object element) {
     18         if(size==capcity)//因为数组是不可变长的,所以需要进行特殊扩容
     19         {
     20             capcity=capcity*2;
     21             Object newElements[]=new Object[capcity];
     22             for(int i=0;i<size;i++)
     23             {
     24                 newElements[i]=elements[i];
     25             }
     26             elements=newElements;
     27         }
     28         elements[size++]=element;
     29         
     30     }
     31 
     32     @Override
     33     public void delete(Object element) {
     34         int index=indexOf(element);//调用本类的方法
     35         if(index>=0)
     36             delete(index);
     37         
     38         
     39     }
     40 
     41     @Override
     42     public void delete(int index) {
     43         //防复杂度的震荡
     44         if(size<=capcity/4&&!(capcity/4==0))
     45         {
     46             capcity=capcity/2;
     47             Object newElements[]=new Object[capcity];
     48             for(int i=0;i<size;i++)
     49             {
     50                 newElements[i]=elements[i];
     51             }
     52             elements=newElements;
     53         }
     54         if(size>0)//防止下标溢出
     55         {
     56             for(int i=index;i<size-1;i++) 
     57             {
     58                 elements[i]=elements[i+1];
     59             }
     60             elements[size-1]=null;
     61             size--;
     62         }
     63     }
     64 
     65     @Override
     66     public void update(int index, Object newelement) {
     67         elements[index]=newelement;
     68         
     69     }
     70 
     71     @Override
     72     public boolean contains(Object element) {
     73         return indexOf(element)>=0;
     74         
     75         
     76     }
     77 
     78     @Override
     79     public Object at(int index) {
     80         return elements[index];
     81     }
     82     
     83     
     84     @Override
     85     public int indexOf(Object element) {
     86         for(int i=0;i<size;i++)
     87         {
     88             //注意要用equals方法进行比较,因为类型为Object.
     89             if(element.equals(elements[i]))
     90                 return i;
     91         }
     92         return -1;
     93     }
     94     
     95     @Override
     96     public String toString()
     97     {
     98         //for循环对 字符的改变过多 需要使用可变字符串(减少对内存的消耗)
     99         StringBuilder sb=new StringBuilder("[");
    100         for(int i=0;i<size;i++)
    101         {
    102             sb.append(elements[i]+(i<size-1?",":""));
    103         }
    104         sb.append("]");
    105         return "MyArrayList{elements="+sb+"}"+"  capciyt:"+getCapcity()+"  size:"+getSize();
    106     }
    107     
    108     
    109     public int getSize() {
    110         return size;
    111     }
    112     
    113     public int getCapcity() {
    114         return capcity;
    115     }
    116     
    117     
    118     
    119 
    120     
    121 }
  • 相关阅读:
    [转]开源游戏AI引擎列表与游戏中的人工智能
    [转]刨根问底!曲面细分技术到底是个啥?
    [转]link time code generation
    [转]PythonQt
    [转]Free Game Development Libraries
    Java虚拟机(二):垃圾回收算法 时间
    Java虚拟机(一):JVM的运行机制 时间
    Java虚拟机(四):常用JVM配置参数 时间
    Java虚拟机(三):垃圾收集器 时间
    mov offset和lea的区别
  • 原文地址:https://www.cnblogs.com/LgxBoKeYuan/p/10175205.html
Copyright © 2020-2023  润新知