AP计算机教程7-5:循环列表
你可以使用for-each循环来遍历列表中的每一个元素。用法和数组是一样的,如下所示。
import java.util.*; // import all classes in this package. public class Test { public static void main(String[] args) { List<Integer> myList = new ArrayList<Integer>(); myList.add(50); myList.add(30); myList.add(20); int total = 0; for (Integer value: myList) { total = total + value; } System.out.println(total); } }
注意以上代码采用的并不是面向对象模式,因为所有的工作都是在main
method中完成的。对于面向对象的程序,列表应该是当前object的一个field,工作也应该是在object method中完成而非像main
method这样的class/static
method。
同理,也可以对列表使用while
或for
循环。记住你可以用get(index)
来获取索引处的值,用remove(index)
来删除索引对应的元素。不过如果在循环过程中删除了元素,后续元素都会左移一位,因而要做相应的处理避免遗漏。for-each循环中不能对列表本身有任何修改,但可以操作列表元素object。
import java.util.*; // import all classes in this package. public class ListWorker { private List<String> nameList; public ListWorker(List<String> theNames) { nameList = theNames; } public boolean removeName(String name) { boolean found = false; int index = 0; while (index < nameList.size()) { if (name.equals(nameList.get(index))) { nameList.remove(index); found = true; } else index++; } return found; } public static void main(String[] args) { List<String> myList = new ArrayList<String>(); myList.add("Amun"); myList.add("Ethan"); myList.add("Donnie"); myList.add("Ethan"); ListWorker listWorker = new ListWorker(myList); System.out.println(listWorker.nameList); listWorker.removeName("Ethan"); System.out.println(listWorker.nameList); } }
以上的例子中,仅在不删除元素时才将索引后移。如果在所有情况下都后移索引,则会漏过删除元素后紧接着的元素。
你能否修改以上代码,让它仅删除找到的第一个名字?做什么修改能让它删除找到的最后一个名字呢?
0:00
Assume that nums
has been created as an ArrayList
object and it initially contains the following Integer
values [0, 0, 4, 2, 5, 0, 3, 0]
. What will nums
contain as a result of executing numQuest
?
List<Integer> list1 = new ArrayList<Integer>(); private List<Integer> nums; // precondition: nums.size() > 0; // nums contains Integer objects public void numQuest() { int k = 0; Integer zero = new Integer(0); while (k < nums.size()) { if (nums.get(k).equals(zero)) nums.remove(k); k++; } }
0
,但漏过了对删除元素之后元素的检查。Which of the following is a reason to use a list (assume an object of the class ArrayList) instead of an array?
0 条评论