那些年写过的Bug——List remove
来源:互联网 发布:软件评测师培训费用 编辑:程序博客网 时间:2024/06/10 14:27
最近接到的一个需求,实现中使用的到java.util.List.remove()
方法,然后后就写出了下面的Bug:
/** * 找到列表中某个元素,将其删除 */ public static void main(String[] args) { // 创建一个列表,加入几个string元素 List<String> strList = new ArrayList<String>(); strList.add("aaa"); strList.add("bbb"); strList.add("ccc"); // 将要删除的元素 String str = "bbb"; // 记录将要删除元素的index Integer flag = null; for (int i = 0; i < strList.size(); i++) { if (str.equals(strList.get(i))) { flag = i; break; } } // 如果找到元素,删除 if (null != flag) { strList.remove(flag); } }
测试的时候很是抓狂,逻辑上没问题啊,怎么就是没remove掉呢?
后来打断点,debug,跟进remove方法时,知晓了答案。
首先看看java.util.List
remove()的API:
public interface List<E> extends Collection<E> { /** * Removes the first occurrence of the specified element from this list, * if it is present (optional operation). If this list does not contain * the element, it is unchanged. More formally, removes the element with * the lowest index <tt>i</tt> such that * <tt>(o==null ? get(i)==null : o.equals(get(i)))</tt> * (if such an element exists). Returns <tt>true</tt> if this list * contained the specified element (or equivalently, if this list changed * as a result of the call). * * @param o element to be removed from this list, if present * @return <tt>true</tt> if this list contained the specified element * @throws ClassCastException if the type of the specified element * is incompatible with this list * (<a href="Collection.html#optional-restrictions">optional</a>) * @throws NullPointerException if the specified element is null and this * list does not permit null elements * (<a href="Collection.html#optional-restrictions">optional</a>) * @throws UnsupportedOperationException if the <tt>remove</tt> operation * is not supported by this list */ boolean remove(Object o); /** * Removes the element at the specified position in this list (optional * operation). Shifts any subsequent elements to the left (subtracts one * from their indices). Returns the element that was removed from the * list. * * @param index the index of the element to be removed * @return the element previously at the specified position * @throws UnsupportedOperationException if the <tt>remove</tt> operation * is not supported by this list * @throws IndexOutOfBoundsException if the index is out of range * (<tt>index < 0 || index >= size()</tt>) */ E remove(int index);}
我的代码中Integer flag = null;
定义的是一个Object
,在使用API时,执行的是boolean remove(Object o);
;而我真正需要使用的API是E remove(int index);
。
修改上面的代码,修改后的代码如下:
/** * 找到列表中某个元素,将其删除 */ public static void main(String[] args) { // 创建一个列表,加入几个string元素 List<String> strList = new ArrayList<String>(); strList.add("aaa"); strList.add("bbb"); strList.add("ccc"); // 将要删除的元素 String str = "bbb"; // 记录将要删除元素的index Integer flag = null; for (int i = 0; i < strList.size(); i++) { if (str.equals(strList.get(i))) { flag = i; break; } } // 如果找到元素,删除 if (null != flag) { int i = flag; // 将object 转成 int strList.remove(i); } }
阅读全文
0 0
- 那些年写过的Bug——List remove
- 那些年犯过的2(出过的BUG)
- 那些年,写过的代码
- 那些年写过的C语言
- 那些年我写过的代码
- 那些年写过的贪吃蛇
- 那些年写过的有趣注释
- 那些年我们写过的爬虫
- 那些年写过的选择器
- 我的第一个项目——说说那些年我们一起写过的代码
- 那些写过的页面
- 那些年写过的shell----select的使用
- 那些年,我们一起写过的代码
- 那些年写过的shell------模式匹配
- 那些年写过的shell-----内置变量
- 那些年写过的shell-----判断用户变量
- 那些年写过的shell-----The useage of until
- 那些年写过的shell---The useage of while
- Git 的origin和master分析
- 2017百度之星初赛(B) 1001 Chess(思维+Lucas)
- JAVA笔记-集合
- 合并两个排序的链表
- iOS
- 那些年写过的Bug——List remove
- Java读取Excel文件
- 安装SQL Server 2008R2 报错“此计算机上安装了 Microsoft Visual Studio 2008 的早期版本”解决方法
- Hive JOIN使用详解
- (转)【算法设计与数据结构】为何程序员喜欢将INF设置为0x3f3f3f3f?
- opengl光照之聚光灯软化边缘
- 共享内存的实现
- Dropping water balloons UVA
- 仿网易新闻客户端(二)