java中List中set方法和add方法的区别是什么


这篇“java中List中set方法和add方法的区别是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“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=newArrayList<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=newArrayList<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=newArrayList<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=newArrayList<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在当前集合的第四个位置插入FList<String>list=newArrayList<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在当前集合的第四个位置插入FList<String>list=newArrayList<String>();list.add("A");list.add("B");list.add("C");System.out.println(list);list.set(3,"F");System.out.println(list);#运行结果:抛出NullPointerException

以上就是关于“java中List中set方法和add方法的区别是什么”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注主机评测网行业资讯频道。


上一篇:JS前端中的设计模式和使用场景是什么

下一篇:怎么使用SpringBoot+Vue+Flowable模拟实现请假审批流程


Copyright © 2002-2019 测速网 www.inhv.cn 皖ICP备2023010105号
测速城市 测速地区 测速街道 网速测试城市 网速测试地区 网速测试街道
温馨提示:部分文章图片数据来源与网络,仅供参考!版权归原作者所有,如有侵权请联系删除!

热门搜索 城市网站建设 地区网站制作 街道网页设计 大写数字 热点城市 热点地区 热点街道 热点时间 房贷计算器