[Java算法分析与设计]线性结构与顺序表(List)的实现应用

首先定义List接口

package com.chen.arithmetic_test.list_test;

/**
 * Created by ChenMP on 2017/7/3.
 */
public interface List {
    //获得长度
    public int size();
    //插入元素
    public boolean insert(int index, Object o) throws Exception;
    //新增元素
    public boolean add(Object o) throws Exception;
    //删除元素
    public boolean remove(int index) throws Exception;
    //获取元素
    public Object get(int index) throws Exception;
    //判断线性表是否为空
    public boolean isEmpty();
}

List实现类

package com.chen.arithmetic_test.list_test;

/**
 * Created by ChenMP on 2017/7/3.
 */
public class SequenceList implements List {
    private Object[] listArray;//对象数组
    private int size;//对象数组长度
    private boolean isFixed;//是否限定对象数组长度

    public SequenceList() {
        this.size = 0;
        this.listArray = new Object[3];//默认对象数组固定长度为3
        this.isFixed = false;//不限定对象数组长度
    }

    public SequenceList(int length) {
        this.listArray = new Object[length];
        this.size = 0;
        this.isFixed = true;//限定对象数组长度
    }

    @Override
    public int size() {

        return size;
    }

    @Override
    public boolean insert(int index, Object o) throws Exception {
        if(index > size || index < 0)
            throw new Exception("IndexOutOfBoundsException");

        if(index==size && size==this.listArray.length && this.isFixed)
            throw new Exception("IndexOutOfBoundsException");

        if(index==size && size==this.listArray.length && !this.isFixed) {
            Object[] newListArray = new Object[this.listArray.length + 10];
            System.arraycopy(listArray, 0, newListArray, 0, listArray.length);
            newListArray[index] = o;
            this.listArray = newListArray;
            this.size++;
            return true;
        }

        if (index == size && size<this.listArray.length) {
            listArray[index] = o;
            this.size++;
            return true;
        }

        if(index < size && index >= 0) {
            listArray[index] = o;
            return true;
        }

        return false;
    }

    @Override
    public boolean add(Object o) throws Exception {
        if(this.size==this.listArray.length && this.isFixed)
            throw new Exception("IndexOutOfBoundsException");

        if(this.size==this.listArray.length && !this.isFixed) {
            Object[] newListArray = new Object[this.listArray.length + 10];
            System.arraycopy(listArray, 0, newListArray, 0, listArray.length);
            newListArray[size] = o;
            this.listArray = newListArray;
            this.size++;
            return true;
        }

        if(this.size<this.listArray.length) {
            listArray[this.size] = o;
            this.size++;
            return true;
        }
        return false;
    }

    @Override
    public boolean remove(int index) throws Exception {
        if(index < 0 || index >= size)
            throw new Exception("IndexOutOfBoundsException");

        System.arraycopy(listArray, 0, listArray, index, listArray.length-index);
        this.size--;
        return true;
    }

    @Override
    public Object get(int index) throws Exception {
        if(index < 0 || index >= size)
            throw new Exception("IndexOutOfBoundsException");
        return this.listArray[index];
    }

    @Override
    public boolean isEmpty() {
        return this.size>0?false:true;
    }

    @Override
    public String toString() {
        StringBuilder sb = new StringBuilder();
        for (Object o : this.listArray) {
            if(null != o)
                sb.append(o).append(" ,");
        }
        return sb.toString();
    }
}

测试类

package com.chen.arithmetic_test.list_test;

/**
 * Created by ChenMP on 2017/7/3.
 */
public class TestList {

    public static void main(String[] args) throws Exception {
        List list = new SequenceList(3);
        list.insert(0,0);
        list.add(1);
        list.add(2);
//        list.add(3);
        System.out.print("测试定长list: " + list.toString() + "|| list长度为: " + list.size());

        System.out.println();
        List list2 = new SequenceList();
        list2.add(0);
        list2.add(1);
        list2.add(2);
        list2.add(3);
        System.out.print("测试不定长list: " + list2.toString() + "|| list长度为: " + list2.size());
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值