插入元素

元素可以被插入到列表中。如果使用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插入在第三位,而之前索引为23则要往后移一位。
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插入到第二位,其他顺序不变。
1

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插入到第二位,其他顺序不变。
4

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);
列表顺序与插入顺序一致。
2

读取与替换元素

对于给定索引位置,可以用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被替换成45再插入到4之前。
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.set(1, "Destini");
list1.add(1, "Sarah");
System.out.println(list1);
Destini替换Layla,然后Sarah再插入到Destini前面。
4

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被替换成45再插入到2之前。
4

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
4

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
3


陈 欣

AADPS创始人

发表评论