多线程列表删除的解决方案
第一种:Collections.synchronizedList
最常用的方法是通过 Collections 的 synchronizedList 方法将 ArrayList 转换成线程安全的容器后再使用。
1  | List<Object> list =Collections.synchronizedList(new ArrayList<Object>);  | 
第二种: CopyOnWriteArrayList
使用线程安全的 CopyOnWriteArrayList 代替线程不安全的 ArrayList。
1  | List<Object> list1 = new CopyOnWriteArrayList<Object>();  | 
第三种:
按索引从大到小,这样remove方法的删除元素导致的后面的元素往前移动一位
1  | for (int i = list.size()-1; i >=0; i--) {  | 
将集合内匹配的数据移到首位
1  | int matchIndex = -1;  | 
List去重
法1: 使用HashSet实现List去重(无序)
1  | /**使用HashSet实现List去重(无序)  | 
法2: 使用TreeSet实现List去重(有序)
1  | /**使用TreeSet实现List去重(有序)  |