求助,list中含有null 现在有一个list 里面有null元素,list.add(0,"2");list.add(1,null);list.add(2,"2");用List lis = new ArrayList();lis.add(null);list.removeAll(lis);请教各位,这样做好么,老是感觉不好! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 用第三方包排序,list中放的bean,按照bean的属性对list排序,但是中间不能出现null,要不报错 你的方法看起来是不好。但是我认为你可以放心,效率不会低。因为ArrayList和LinkedList等实现了List接口的类,都会重写removeAll()方法,而且会保证算法的复杂度为O(m*n)。也就是对于a.removeAll(b)最坏情况下,要进行a.size()*b.size()次操作。但你只是要移除null,所以只会进行a.size()次操作就行了。以上是我个人观点,测试如下。测试代码:import java.util.*;public class Temp { public static void main(String[] args) { int list_num, rmv_num; list_num = 100000; rmv_num = 100; List<Integer> list = new ArrayList<Integer>(); for (int i = 0; i < list_num; i++) { list.add(i % rmv_num); } List<Integer> l = new LinkedList<Integer>(); for (int i = 0; i < rmv_num; i++) { l.add(i); } System.out.println("start size is: " + list.size()); long timestart = new Date().getTime(); list.removeAll(l); long timeend = new Date().getTime(); System.out.println("need time(ms): " + (timeend - timestart)); System.out.println("end size is: " + list.size()); }}------------------------------------------LinkedList:list_num rmv_num time(ms)100000 1 47100000 100 203100000 1000 167210000 1000 234ArrayList:list_num rmv_num time(ms)100000 100 1595310000 100 219100000 1 1251610000 1 187------------------------------------------以上代码先在list中插入list_num个对象,然后再将其全部移除,这是“很坏”的情况,上面的数据显示了两种常用的List的效率对比。可以看出,ArrayList在随list_num的增加而极剧增加;而LinkedList则比较像m*n。因为ArrayList是数组,在对象的删除时,要进行大量的数据移动,降低了效率。在List中如果要排序的话,最好还是避免null吧。 【在线等】关于数组越界 关于BufferedImage 如何才能删除缓存中已有的图片 如何重写for循环?高手何不进来看看? 加分求解~ 有个难题, 求CODE.. 一定要给思路.!谢谢了. 求救,jtable的怪问题 如何在jsp页面中将数据库中编码格式为WE8DEC的字符转换... 能帮我解释一下下面这个语句的意思么? java如何实现撤消功能 求教:如何将一串字符串 按boolean的运算方式来运算。 java语言中的汉字问题 在JSP中,向数据库插入记录,values后用具体的值插入成功,用变量就不行,为什么呢?
public static void main(String[] args) {
int list_num, rmv_num;
list_num = 100000;
rmv_num = 100;
List<Integer> list = new ArrayList<Integer>();
for (int i = 0; i < list_num; i++) {
list.add(i % rmv_num);
} List<Integer> l = new LinkedList<Integer>();
for (int i = 0; i < rmv_num; i++) {
l.add(i);
} System.out.println("start size is: " + list.size());
long timestart = new Date().getTime();
list.removeAll(l);
long timeend = new Date().getTime();
System.out.println("need time(ms): " + (timeend - timestart));
System.out.println("end size is: " + list.size());
}
}
------------------------------------------
LinkedList:
list_num rmv_num time(ms)
100000 1 47
100000 100 203
100000 1000 1672
10000 1000 234ArrayList:
list_num rmv_num time(ms)
100000 100 15953
10000 100 219
100000 1 12516
10000 1 187
------------------------------------------以上代码先在list中插入list_num个对象,然后再将其全部移除,这是“很坏”的情况,上面的数据显示了两种常用的List的效率对比。可以看出,ArrayList在随list_num的增加而极剧增加;而LinkedList则比较像m*n。
因为ArrayList是数组,在对象的删除时,要进行大量的数据移动,降低了效率。在List中如果要排序的话,最好还是避免null吧。