> 文档中心 > List中set方法和add方法的区别

List中set方法和add方法的区别


前言

在Java中的常用的集合接口List中有两个非常相似的方法
E set(int index, E element);

void add(int index, E element);
这两个方法都是在集合的指定位置插入指定的元素,那么这两个方法到底有什么区别呢?接下来我们通过ArrayList这个我们常用集合实现来看一下这两个方法的差异

相同点

首先我们来看一下这两个方法在ArrayList中的相同点

  • 他们都会在集合的指定位置插入新的元素,例如下面的例子:
#在集合的第2位插入一个 F# 通过add方法插入List list = new ArrayList(); list.add("A"); list.add("B"); list.add("C"); System.out.println(list); list.add(2, "F"); System.out.println(list); #运行结果:  [A, B, F, C]#通过set方法插入List list = new ArrayList(); list.add("A"); list.add("B"); list.add("C"); System.out.println(list); list.set(2, "F"); System.out.println(list);#运行结果: [A, B, F]
  • 上述两个方法中的element都不允许为null,如果为null的话会抛出NullPointerException

  • 上述两个方法中的element对应的类如果无法存入该集合,都会抛出ClassCastException异常

  • 上述两个方法中的element对应的类型如果无法存入该集合,都会抛出IllegalArgumentException异常

不同点

  • 第一个不同点从上面的例子就可以看出来,add 方法是在指定位置插入新的值,然后将原先位置的元素
    和原先位置之后的所有元素都向后移动了一位,而 set 方法是直接覆盖了原来的元素
#在集合的第2位插入一个 F# 通过add方法插入List list = new ArrayList(); list.add("A"); list.add("B"); list.add("C"); System.out.println(list); list.add(2, "F"); System.out.println(list); #运行结果:  [A, B, F, C]#通过set方法插入List list = new ArrayList(); list.add("A"); list.add("B"); list.add("C"); System.out.println(list); list.set(2, "F"); System.out.println(list);#运行结果: [A, B, F]
  • add 方法对于index的取值范围是 0<= index <= size(),也就是说add方法可以在当前集合的最后一个元素后面再添加一个新元素;set 方法对于index的取值范围是 0< index < size(),也就是说set方法只能覆盖当前已有的元素,取值范围不能超出当前集合元素的范围
#通过add在当前集合的第四个位置插入F List list = new ArrayList(); list.add("A"); list.add("B"); list.add("C"); System.out.println(list); list.add(3, "F"); System.out.println(list); #运行结果: [A, B, C, F]#通过set在当前集合的第四个位置插入F List list = new ArrayList(); list.add("A"); list.add("B"); list.add("C"); System.out.println(list); list.set(3, "F"); System.out.println(list); #运行结果: 抛出NullPointerException 

总结

通过总结List接口中上述两个非常相似的常用方法的相同点与不同点,使我们在日常工作中可以更加得心应手的去使用这些常用的集合类