详解java中List中set方法和add方法的区别
前言
在Java中的常用的集合接口List中有两个非常相似的方法:
E set(int index, E element);
void add(int index, E element);
这两个方法都是在集合的指定位置插入指定的元素,那么这两个方法到底有什么区别呢?接下来我们通过ArrayList这个我们常用集合实现来看一下这两个方法的差异
相同点
首先我们来看一下这两个方法在ArrayList中的相同点
他们都会在集合的指定位置插入新的元素,例如下面的例子:
#在集合的第2位插入一个 F
# 通过add方法插入
List<String> list = new ArrayList<String>();
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<String> list = new ArrayList<String>();
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<String> list = new ArrayList<String>();
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<String> list = new ArrayList<String>();
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<String> list = new ArrayList<String>();
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<String> list = new ArrayList<String>();
list.add("A");
list.add("B");
list.add("C");
System.out.println(list);
list.set(3, "F");
System.out.println(list);
#运行结果: 抛出NullPointerException
总结
通过总结List接口中上述两个非常相似的常用方法的相同点与不同点,使我们在日常工作中可以更加得心应手的去使用这些常用的集合类
到此这篇关于详解java中List中set方法和add方法的区别的文章就介绍到这了,更多相关java中List中set和add区别内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!
相关文章