最代码官方的gravatar头像
最代码官方 2014-09-14 22:13:51

java集合类ArrayList操作之删除remove某些元素的案例分析

在java开发中,会经常出现需要删除java ArrayList的某些元素的场景,比如从在线用户列表的ArrayList中删除离线用户的ArrayList,但有的人会出现循环在线用户ArrayList列表然后删除离线用户ArrayList的情况,看着代码确实没什么问题,但其实犯了初学者最容易犯的一个错误,同时循环ArrayList和删除ArrayList的元素。

如下的java代码可以演示发生的一切:

package com.arraylist;

import java.util.ArrayList;

/**
 * @author www.zuidaima.com
 * 
 */
public class RemoveItemFromArrayList {

	public static void printArrayList(ArrayList<String> list) {
		for (String item : list) {
			System.out.print(item + " ");
		}
		System.out.println("");
	}

	/**
	 * 循环ArrayList1同时删除item是错误的,会导致指针错乱造成删除元素错误
	 * 
	 * @param list
	 * @param list2
	 */
	public static void removeArrayList1(ArrayList<String> list,
			ArrayList<String> list2) {
		for (String item : list) {
			if (list2.contains(item)) {
				list.remove(item);
			}
		}
	}

	/**
	 * 循环ArrayList2同时删除item
	 * 
	 * @param list
	 * @param list2
	 */
	public static void removeArrayList2(ArrayList<String> list,
			ArrayList<String> list2) {
		for (String item : list2) {
			list.remove(item);
		}
	}

	/**
	 * 调用ArrayList.removeAll方法
	 * 
	 * @param list
	 * @param list2
	 */
	public static void removeArrayList3(ArrayList<String> list,
			ArrayList<String> list2) {
		list.removeAll(list2);
	}

	public static ArrayList<String> initOnlineUserArrayList() {
		ArrayList<String> onlineUserList = new ArrayList<String>();
		onlineUserList.add("zuidaima");
		onlineUserList.add("最代码");
		onlineUserList.add("javaniu");
		return onlineUserList;
	}

	public static ArrayList<String> initOfflineUserArrayList() {
		ArrayList<String> offlineUserList = new ArrayList<String>();
		offlineUserList.add("最代码");
		offlineUserList.add("javaniu");
		return offlineUserList;
	}

	public static void main(String[] args) {
		ArrayList<String> onlineUserList = initOnlineUserArrayList();
		ArrayList<String> offlineUserList = initOfflineUserArrayList();

		System.out.println("removeArrayList1前:");
		printArrayList(onlineUserList);
		removeArrayList1(onlineUserList, offlineUserList);
		System.out.println("removeArrayList1后:");
		printArrayList(onlineUserList);

		System.out.println("------------------------");
		
		onlineUserList = initOnlineUserArrayList();
		System.out.println("removeArrayList2前:");
		printArrayList(onlineUserList);
		removeArrayList2(onlineUserList, offlineUserList);
		System.out.println("removeArrayList2后:");
		printArrayList(onlineUserList);

		System.out.println("------------------------");
		onlineUserList = initOnlineUserArrayList();
		System.out.println("removeArrayList3前:");
		printArrayList(onlineUserList);
		removeArrayList3(onlineUserList, offlineUserList);
		System.out.println("removeArrayList3后:");
		printArrayList(onlineUserList);

	}
}

其中removeArrayList1方法的执行结果是错误的:

java集合类ArrayList操作之删除remove某些元素的案例分析

虽然是java基础,但是确实是很多初学者容易犯的错误,给大家分享出来,希望能给牛牛们有所帮助。

另外也希望大家都能总结分享平时遇到的有价值的代码,一起学习进步。


打赏

最代码最近下载分享源代码列表最近下载
最代码最近浏览分享源代码列表最近浏览
无名氏111  LV32 2023年5月23日
whfuai  LV14 2021年7月5日
忧麦紫  LV18 2021年6月10日
醉code  LV17 2020年4月20日
luohaipeng  LV23 2019年12月3日
低调人  LV38 2019年8月3日
wxd772113786  LV2 2018年12月30日
zhuchao123  LV3 2018年12月24日
977670  LV3 2018年11月23日
二十八画  LV6 2018年9月13日
顶部 客服 微信二维码 底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友