List中update,search,delete方法的修正

问题的方向来源于LinkedList中这3个方法的实现,如果将i看成是下标,,,就悲剧了。因为链式存储里面没有下标的概念。

尽管jdk中的实现,将List从0开始。

但是,把下标的概念引入List中,只能是将第一个元素看成是第0个。

然而我总觉得怪怪的,所以就跑开下标的概念。就是用第几个元素的概念。自己写代码怎么定义都行O(∩_∩)O哈!



这3个方法的定义在List中是这样定义的:

public void delete(int i);

public void update(int i, T dest);
public T search(int i);


当时将参数里面的i理解为数组的下标,这样就太局限了。接口而言不应该考虑实现机制。

正常的思路应该是:

删除第i个元素

更新第i个元素

查找第i个元素


这个i本应该指列表的元素的实际顺序,从1开始。

所以,ArrayList中的3个实现都应该修正:下面是修正后的方法

@Override

    public void delete(int i) {

       if(i<1 || i>size)

           try {

              throw new Exception(i+" iserror!");

           } catch (Exception e) {

              // TODO Auto-generatedcatch block

              e.printStackTrace();

           }

       if(i==size){

           //如果是最后一个元素。不用移动元素。给它nullsize--

           container[i-1]=null;

           size--;

       }else

       {

           //怎么删除呢,每个人都知道了。后面的依次往前移动就OK了。

           for(int j=i;j<=size-1;j++){

              container[j-1]=container[j];

           }

           //同样,以上移动完成后,最后一个元素就多余了。给它Null

           container[size-1]=null;

           size--;

       }     

    }

   

    @Override

    public void update(int i, T dest) {

       //还是先判断异常情况

       if(i<1 || i>(size))

           try {

              throw new Exception(i+" iserror!");

           } catch (Exception e) {

              // TODO Auto-generatedcatch block

              e.printStackTrace();

           }

       //安心的更新

       container[i-1] = dest;     

    }

 

    @Override

    public T search(int i) {

       //还是先判断异常情况

       if(i<1 || i>(size))

           try {

              throw new Exception(i+" iserror!");

           } catch (Exception e) {

              // TODO Auto-generatedcatch block

              e.printStackTrace();

           }

       //放心的返回

       return container[i-1];

    }













  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值