方法一和方法二 各有什么优点和缺点?
各适用于什么地方?大家各抒己见。import java.util.ArrayList;
import java.util.List;public class TestList {
public static void main(String[] args) {
List<Integer> list = new ArrayList<Integer>();
for (int i = 0; i < 10; i++) {
list.add(i);// 组装list
}
//方法一
list.removeAll(new ArrayList<Integer>() {
{
add(5);
}
});
//方法二
for (int i = 0; i < list.size(); i++) {
if (5 == (Integer) list.get(i)) {// 循环查找如果是5的就删除
list.remove(i);
i--;
}
}
for (int i = 0; i < list.size(); i++) {
System.out.print(list.get(i));
}
}
}
各适用于什么地方?大家各抒己见。import java.util.ArrayList;
import java.util.List;public class TestList {
public static void main(String[] args) {
List<Integer> list = new ArrayList<Integer>();
for (int i = 0; i < 10; i++) {
list.add(i);// 组装list
}
//方法一
list.removeAll(new ArrayList<Integer>() {
{
add(5);
}
});
//方法二
for (int i = 0; i < list.size(); i++) {
if (5 == (Integer) list.get(i)) {// 循环查找如果是5的就删除
list.remove(i);
i--;
}
}
for (int i = 0; i < list.size(); i++) {
System.out.print(list.get(i));
}
}
}
解决方案 »
- 多个list排序
- 如何使线程类返回参数!
- 关于线程的问题,为何输出如下结果,请高手解释下!
- 请教智能排课系统所要使用的算法
- 各位大哥,小弟又有难了,乞求大哥们拔刀相助,关于BS和CS◎◎◎◎◎◎◎◎◎◎◎◎◎(100分求解)
- 今天开始重新读《Think in java》,特散分100:
- 函数调用问题
- 国际化应用程序文本(EN-ZH),为什么会乱码???
- 求教如何在Jbuilder7环境下使java程序生成.exe可执行文件?谢谢!
- 拿分问题!!!!快来看!!!!
- 用过hibernate的能谈下体会吗
- 为什么编译器要把ArrayIndexOutOfBoundsException留给JVM去处理?
if (5 == (Integer) list.get(i)) {// 循环查找如果是5的就删除
list.remove(i);
i--;
}
}
这个写法虽然可以,只是可读性太差了。下面这样写可读性就好多了。for (int i = list.size()-1; i >= 0 ; i--) {
if (5 == (Integer) list.get(i)) {// 循环查找如果是5的就删除
list.remove(i);
}
}
还可以把要删除的写一个容器中,直接list.removeAll(c);
方法一 就不是很好用了;(灵活性不够)
我个人认为方法一与方法二的优点比较侧重于运行速度的比较。下面看看我的测试代码(代码是拿楼主的做测试)
代码如下:/**
*
*//**
* @author WenLiang
*/
import java.util.ArrayList;
import java.util.List;public class TestList {
public static void main(String[] args) {
List<Integer> list = new ArrayList<Integer>();
for (int i = 0; i < 10; i++) {
list.add(i);// 组装list
}
//方法一
long startTime=System.nanoTime();
list.removeAll(new ArrayList<Integer>() {
{
add(5);
}
});
long endTime=System.nanoTime(); //获取结束时间
System.out.println("程序运行时间: "+(endTime-startTime));
// 方法二
long startTime1=System.nanoTime();
for (int i = 0; i < list.size(); i++) {
if (5 == (Integer) list.get(i)) {// 循环查找如果是5的就删除
list.remove(i);
i--;
}
}
long endTime1=System.nanoTime(); //获取结束时间
System.out.println("程序运行时间: "+(endTime1-startTime1));
for (int i = 0; i < list.size(); i++) {
System.out.print(list.get(i));
}
if ((endTime-startTime)>(endTime1-startTime1)) {
System.out.println("\n方法一运行需要的时间多于方法二运行需要的时间");
}else {
System.out.println("方法一运行需要的时间少于方法二运行需要的时间");
}
}
}运行程序 打印出来的结果为程序运行时间: 2212851
程序运行时间: 64534
012346789
方法一运行需要的时间多于方法二运行需要的时间
当然运行的时间(红色标记的地方)就有机器的性能决定了。
但是最终结果是:方法一运行需要的时间多于方法二运行需要的时间说到此。优缺点自然明了。