AP计算机教程7-4:操作列表
插入元素
元素可以被插入到列表中。如果使用add(obj)
,参数中的object会被插入到列表的最后。试着运行以下代码。
import java.util.*; // import all classes in this package. public class Test { public static void main(String[] args) { List<String> nameList = new ArrayList<String>(); nameList.add("Diego"); System.out.println(nameList); nameList.add("Grace"); System.out.println(nameList); nameList.add("Diego"); System.out.println(nameList); System.out.println(nameList.size()); } }
注意我们将相同的字符串插入了超过一次。列表中可以包含有重复元素。
事实上,interface List
中定义了两个不同的add
method。在add(obj)
之外,我们还有add(index,obj)
可以将object插入到列表长度范围内任意指定位置。为了给新插入的元素腾出空间,插入点及其之后的元素均会后移一位。
import java.util.*; // import all classes in this package. public class Test { public static void main(String[] arts) { List list1 = new ArrayList(); list1.add(new Integer(1)); System.out.println(list1); list1.add(new Integer(2)); System.out.println(list1); list1.add(1, new Integer(3)); System.out.println(list1); list1.add(1, new Integer(4)); System.out.println(list1); System.out.println(list1.size()); } }
列表可以存放object,但不能存储基本数据类型。这意味着int
值会被包装成Integer
object以储存在列表中。如上所示,你可以用new Integer(value)
的形式来做到这一点。当然你还可以直接使用int
值,Java编译器会自动将其转换为Integer
object,这被称为自动装箱(autoboxing)。当你从Integer
的列表中读取int
值时,这被称为拆箱(unboxing)。下面的代码与之前的例子作用一模一样。
import java.util.*; // import all classes in this package. public class Test { public static void main(String[] arts) { List list1 = new ArrayList(); list1.add(1); System.out.println(list1); list1.add(2); System.out.println(list1); list1.add(1, 3); System.out.println(list1); list1.add(1, 4); System.out.println(list1); System.out.println(list1.size()); } }
0:00
What will print when the following code executes?
List<Integer> list1 = new ArrayList<Integer>(); list1.add(new Integer(1)); list1.add(new Integer(2)); list1.add(new Integer(3)); list1.add(2, new Integer(4)); list1.add(new Integer(5)); System.out.println(list1);
add(2, new Integer(4))
会将4
插入在第三位,而之前索引为2
的3
则要往后移一位。What will print when the following code executes?
List<String> list1 = new ArrayList<String>(); list1.add("Anaya"); list1.add("Layla"); list1.add("Sharrie"); list1.add(1, "Sarah"); System.out.println(list1);
Sarah
插入到第二位,其他顺序不变。What will print when the following code executes?
List<Integer> list1 = new ArrayList<Integer>(); list1.add(5); list1.add(4); list1.add(3); list1.add(1, 2); System.out.println(list1);
2
插入到第二位,其他顺序不变。What will print when the following code executes?
List<Integer> list1 = new ArrayList<Integer>(); list1.add(1); list1.add(3); list1.add(2); list1.add(1); System.out.println(list1);
读取与替换元素
对于给定索引位置,可以用obj = listName.get(index)
来读取元素,用listName.set(index,obj)
来替换元素。
import java.util.*; // import all classes in this package. public class Test { public static void main(String[] args) { List<String> nameList = new ArrayList<String>(); nameList.add("Diego"); nameList.add("Grace"); nameList.add("Deja"); System.out.println(nameList); System.out.println(nameList.get(0)); System.out.println(nameList.get(1)); System.out.println(nameList.get(2)); nameList.set(1, "John"); System.out.println(nameList); } }
以下表格比较了数组和列表在存取元素方面的异同。
数组 | 列表 | |
读取元素 | value = arrayName[index] |
obj = listName.get(index) |
替换元素 | arrayName[index] = value |
listName.set(index,obj) |
删除元素
你还可以使用remove(index)
来删除给定位置的元素。这个method会返回删除的元素让程序员做进一步处理,并同时把列表中后续元素前移以补上空位。
import java.util.*; // import all classes in this package. public class Test { public static void main(String[] arts) { List list1 = new ArrayList(); list1.add(new Integer(1)); list1.add(new Integer(2)); list1.add(new Integer(3)); System.out.println(list1); list1.remove(1); System.out.println(list1); } }
注意remove(index)
的参数是索引位置,而不是按参数进行元素值的查找。比如在以上的示例中,列表中移除的数是位于第二位的2
,而不是数值与参数相等的1
。
What will print when the following code executes?
List<Integer> list1 = new ArrayList<Integer>(); list1.add(new Integer(1)); list1.add(new Integer(2)); list1.add(new Integer(3)); list1.set(2, new Integer(4)); list1.add(2, new Integer(5)); list1.add(new Integer(6)); System.out.println(list1);
3
被替换成4
,5
再插入到4
之前。What will print when the following code executes?
List<String> list1 = new ArrayList<String>(); list1.add("Anaya"); list1.add("Layla"); list1.add("Sharrie"); list1.set(1, "Destini"); list1.add(1, "Sarah"); System.out.println(list1);
Destini
替换Layla
,然后Sarah
再插入到Destini
前面。What will print when the following code executes?
List<Integer> numList = new ArrayList<Integer>(); numList.add(new Integer(1)); numList.add(new Integer(2)); numList.add(new Integer(3)); numList.set(2, new Integer(4)); numList.add(1, new Integer(5)); numList.add(new Integer(6)); System.out.println(numList);
3
被替换成4
,5
再插入到2
之前。What will print when the following code executes?
List<Integer> list1 = new ArrayList<Integer>(); list1.add(new Integer(1)); list1.add(new Integer(2)); list1.add(new Integer(3)); list1.remove(1); System.out.println(list1);
2
。What will print when the following code executes?
List<Integer> list1 = new ArrayList<Integer>(); list1.add(new Integer(1)); list1.add(new Integer(2)); list1.add(new Integer(3)); list1.remove(2); System.out.println(list1);
3
。
0 条评论