最代码官方的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基础,但是确实是很多初学者容易犯的错误,给大家分享出来,希望能给牛牛们有所帮助。

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


打赏

顶部 客服 微信二维码 底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友