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 条评论