您的位置:首页 > 其它

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

2015-10-23 11:19 519 查看
问题的方向来源于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){
//如果是最后一个元素。不用移动元素。给它null。size--
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];
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: