二、解决办法
2.1、采用倒序移除
public static void main(String[] args) { List<String> list = new ArrayList<String>(); list.add("11"); list.add("11"); list.add("12"); list.add("13"); list.add("14"); list.add("15"); list.add("16"); System.out.println("原始list元素:"+ list.toString()); CopyOnWriteArrayList<String> copyList = new CopyOnWriteArrayList<>(list); //通过下表移除等于11的元素 for (int i = list.size() - 1; i >= 0; i--) { String item = list.get(i); if("11".equals(item)) { list.remove(i); } } System.out.println("通过下表移除后的list元素:"+ list.toString()); //通过对象移除等于11的元素 for (int i = copyList.size() - 1; i >= 0; i--) { String item = copyList.get(i); if("11".equals(item)) { copyList.remove(item); } } System.out.println("通过对象移除后的list元素:"+ list.toString()); }
输出结果:
原始list元素:[11, 11, 12, 13, 14, 15, 16] 通过下表移除后的list元素:[12, 13, 14, 15, 16] 通过对象移除后的list元素:[12, 13, 14, 15, 16]
2.2、fore的解决办法
public static void main(String[] args) { List<String> list = new ArrayList<String>(); list.add("11"); list.add("11"); list.add("12"); list.add("13"); list.add("14"); list.add("15"); list.add("16"); System.out.println("原始list元素:"+ list.toString()); CopyOnWriteArrayList<String> copyList = new CopyOnWriteArrayList<>(list); //通过对象移除等于11的元素 for (String item : copyList) { if("11".equals(item)) { copyList.remove(item); } } System.out.println("通过对象移除后的list元素:"+ copyList.toString()); }
输出结果:
原始list元素:[11, 11, 12, 13, 14, 15, 16] 通过对象移除后的list元素:[12, 13, 14, 15, 16]
2.3、使用迭代器移除
public static void main(String[] args) { List<String> list = new ArrayList<String>(); list.add("11"); list.add("11"); list.add("12"); list.add("13"); list.add("14"); list.add("15"); list.add("16"); System.out.println("原始list元素:"+ list.toString()); //通过迭代器移除等于11的元素 Iterator<String> iterator = list.iterator(); while(iterator.hasNext()) { String item = iterator.next(); if("11".equals(item)) { iterator.remove(); } } System.out.println("通过迭代器移除后的list元素:"+ list.toString()); }
输出结果:
原始list元素:[11, 11, 12, 13, 14, 15, 16] 通过迭代器移除后的list元素:[12, 13, 14, 15, 16
2.4、jdk1.8的写法
public static void main(String[] args) { List<String> list = new ArrayList<String>(); list.add("11"); list.add("11"); list.add("12"); list.add("13"); list.add("14"); list.add("15"); list.add("16"); System.out.println("原始list元素:"+ list.toString()); //jdk1.8移除等于11的元素 list.removeIf(item -> "11".equals(item)); System.out.println("移除后的list元素:"+ list.toString()); }
输出结果:
原始list元素:[11, 11, 12, 13, 14, 15, 16] 通过迭代器移除后的list元素:[12, 13, 14, 15, 16]
是不是好简单,哈哈!
三、总结
如果开发中需要在集合中移除某个元素,如果jdk是1.8的,建议直接使用2.4方法,如果是低版本,那么建议采用迭代器方法,效率高,性能好!