循环List时删除其中的元素

情景:

今天在做项目的时候需要对两个字符串类型List集合A,B进行比较,两个集合中有相同的元素,需要循环两个集合,找出两个集合中相同的字符串、分别出不同的字符串,执行不同的数据库操作。实现思想:外层循环集合A,内部循环集合B,如果B中元素有与当前的集合A中元素相同的,则把B中该元素移除掉(使用迭代器),但是执行时报错:java.util.AbstractList.remove(AbstractList.java:230)

代码如下:

List<String> f = Arrays.asList(formerssdq.split(","));
List<String> n = Arrays.asList(ssdq.split(","));
for(String fl : f) {
if(n.contains(fl)) {
Iterator<String> iter = n.iterator();
while(iter.hasNext()) {
String nl = iter.next();
if(nl.equals(fl)) {
iter.remove();
}
}
}
}
尝试了几次还是报错,以前使用过迭代器删除元素,可是始终报错,在百思不得其解时,在网上查到原来问题出现在Arrays.asList("...")上面,Arrays.asList返回的ArrayList并不是java.util.ArrayList,而是在Arrays类中重新定义的一下内部类ArrayList,这个ArrayList并没有重写remove方法。
解决办法:
使用
String[] fList = formerssdq.split(",");
List<String> formerList = new ArrayList<String>();
for(String f : fList) {
formerList.add(f);
}
代替了List<String> f = Arrays.asList(formerssdq.split(","));
同理List<String> n = Arrays.asList(ssdq.split(","));也用同样的组织结构代替,这下就不报错了。
总结:
在遇到问题的时候,要理解里面的原理才是解决问题的重要方法。
同时本次还了解了retainAll的方法。
retainAll:取得两个List的交集,测试代码如下:
public static void main(String[] args) {
List<String> list=new ArrayList<String>();
list.add("1"); //向列表中添加数据
list.add("2"); //向列表中添加数据
list.add("3"); //向列表中添加数据
List<String> list1=new ArrayList<String>();
list1.add("1"); //向列表中添加数据
list1.add("2"); //向列表中添加数据
boolean ret=list.retainAll(list1);
if(ret){
System.out.println("元素被移除成功");
for(String s : list) {
System.out.println(s);
}
System.out.println("-----------");
for(String s : list1) {
System.out.println(s);
}
}else{
System.out.println("列表中没有不相同的元素");
}

}


参考网址:http://www.cnblogs.com/BensonHe/p/3604278.html
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值