天天看点

Android,Java 批量删除List中的元素的算法

假如我有一个List装了很多的元素,需要删除这个List里面的某几个元素(知道了待删元素在List中的位置Index),怎么操作?

最简单的一种情况就是:先把需要删除的元素的位置Index做一个排序,然后从后面往前删,这样就不会再删除的过程改变了需要删除的元素的位置。(有点拗口)

这样代码就多了。

想要代码少的看过来:

若不想排序,想直接根据这堆无序的位置删除List中多个元素,那么怎么操作呢?我想出了下面这个算法:

deleteArr 是需要删除的元素的位置,装了很多个位置的数据,如5,7,9,0,2

list是我们需要删除的元素所在的List

如果直接根据deleteArr,不排序进行遍历删除的话,会出问题的。当你删了第5个元素,那个第7个元素就到了第6的位置,下次你在根据7去删除时,就删错了元素。

思路如下:做完一次删除操作后,将剩下的位置跟本次删除的位置比较,如果大于等于,则将原来的值减一,如果小于,则不用变。

List<Integer> deleteArr = new ArrayList<Integer>();
           
while(deleteArr.size()>0){
	int position = deleteArr.get(0);	
	list.remove(position);
	deleteArr.remove(0);
	for(int i = 0;i<deleteArr.size();i++){
		int pos = deleteArr.get(i);
	if(pos>=position) deleteArr.set(i, --pos);
	}
}
           

应用:

批量删除ListView中的CheckBox选中的元素时,可以将选中的元素的位置都加到deleteArr这个List中,由于用户点击ListView中CheckBox或者Item的顺序是不确定的,所以获得的deleteArr中的位置是无序的,故可以用上面的算法来批量删除。