Java编程:List.remove()、equals() 方法解惑
2016-11-28 19:25
507 查看
下午写了一段代码,大致的处理的业务是这样的:
有一个 TreeNode 类型的 List,TreeNode 有一个 nodeId 属性, 如果 nodeId 字符串的第 index 索引位置的字符不等于1,则从 List 中删除该对象,代码演变如下:
代码一:
错误的原因:这种for-each写法会报出著名的并发修改异常:java.util.ConcurrentModificationException。
代码二:
错误的原因:将字符串与 char 进行equals比较,String(1)、char(1)进行equals比较返回 false。
代码三(正确代码):
分析:Iterator.remove()进行 List 数据删除。
代码四(正确代码):
分析:使用了CopyOnWriteArrayList,避免产生java.util.ConcurrentModificationException异常。
equals 示例代码:
执行结果:
有一个 TreeNode 类型的 List,TreeNode 有一个 nodeId 属性, 如果 nodeId 字符串的第 index 索引位置的字符不等于1,则从 List 中删除该对象,代码演变如下:
代码一:
public static void filterMenu(List<TreeNode> allList, String userType){ for(TreeNode item : allList){ int index = Integer.valueOf(userType) - 1; if(!"1".equals(item.getNodeId().charAt(index))){ allList.remove(item); } } }
错误的原因:这种for-each写法会报出著名的并发修改异常:java.util.ConcurrentModificationException。
代码二:
public static void filterMenu(List<TreeNode> allList, String userType){ Iterator<TreeNode> iter = allList.iterator(); while(iter.hasNext()){ int index = Integer.valueOf(userType) - 1; TreeNode item = iter.next(); if(!"1".equals(item.getNodeId().charAt(index))){ iter.remove(); } } }
错误的原因:将字符串与 char 进行equals比较,String(1)、char(1)进行equals比较返回 false。
代码三(正确代码):
public static void filterMenu(List<TreeNode> allList, String userType){ Iterator<TreeNode> iter = allList.iterator(); while(iter.hasNext()){ int index = Integer.valueOf(userType) - 1; TreeNode item = iter.next(); if(!"1".equals(String.valueOf(item.getNodeId().charAt(index)))){ iter.remove(); } } }
分析:Iterator.remove()进行 List 数据删除。
代码四(正确代码):
public static void filterMenu(List<TreeNode> allList, String userType){ final CopyOnWriteArrayList<String> cowList = new CopyOnWriteArrayList<String>(allList); for(TreeNode item : cowList ){ int index = Integer.valueOf(userType) - 1; if(!"1".equals(String.valueOf(item.getNodeId().charAt(index)))){ allList.remove(item); } } }
分析:使用了CopyOnWriteArrayList,避免产生java.util.ConcurrentModificationException异常。
equals 示例代码:
public static void main(String[] args) { // TODO Auto-generated method stub String strVal = "1"; Integer intVal = 1; char charVal = 1; System.out.println("字符串与 Integer 进行 equals 比较:" + strVal.equals(intVal)); System.out.println("字符串与 char 进行equals比较:" + strVal.equals(charVal)); System.out.println("字符串与 String 进行equals比较:" + strVal.equals("1")); }
执行结果:
字符串与 Integer 进行 equals 比较:false 字符串与 char 进行equals比较:false 字符串与 String 进行equals比较:true
相关文章推荐
- 一种常见的Java编程错误:没有同时定义equals()和hashCode()方法
- Java中List对象调用remove方法报错:UnsupportedOperationException
- Java中List的remove方法
- Java list.remove( )方法需要注意的两个地方
- Java 集合之List 集合的删除方法顺序分析以及remove和removeAll区别
- 一种常见的Java编程错误:没有同时定义equals()和hashCode()方法
- Java编程中的equals方法使用全解
- Java List的equals方法学习
- 重拾编程之路--jeetcode(java)--Remove Duplicates from Sorted List
- 为什么Java里的Arrays.asList不能用add和remove方法?
- 在对List集合进行remove()等操作重写equals()和hashCode()方法的必要性
- Java中list的remove方法移除的对象与下标重合了呢?
- Java中List的remove方法全解析
- Java编程:删除 List 元素的三种正确方法
- Java中equals()与hashCode()方法完全解惑
- [bxd学习java基本点]7.linkedList方法,remove移走的要显示元素
- Java中List集合里Contains和Remove方法的本质
- 为什么Java里的Arrays.asList不能用add和remove方法?
- Java List容器中与equals()方法相关的那些方法
- 10062---为什么Java里的Arrays.asList不能用add和remove方法?