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];
}
尽管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];
}
相关文章推荐
- linux-命令全集
- redis的安装与配置
- iOS客户端学习-ios9 urlError
- gdb的一些技巧
- Volatile关键字
- 《AppStore审核》14.3
- MFC总结(1)---MFC修改任务栏,窗口和exe图标
- 移动开发新选择 使用javascript开发iOS和Android原生应用
- jersey使用
- [C#基础] 委托
- 单一职责原则
- 如何把word转换成pdf的形式
- B树、B+树学习之二
- 第二十三篇:深度美文:浅析人脸检测之Haar分类器方法 - ello - 博客园
- JavaWeb-JSP脚本中的9个内置对象
- cocos2dx-------------------------------------Speed && Follow
- 微软承诺将在今年的 Visual C++ 更新中加入 Clang 编译器
- 一步一步jQuery流程设计器插件goflow(附代码) - 3 - 添加流程结点
- 一个字的简单长寿秘诀
- The connection to adb is down, and a severe error has occured.You must restart adb and Eclipse.