详解java中List中set方法和add方法的区别

 更新时间:2022年08月10日 12:05:41   作者:有梦想的攻城狮  
本文主要介绍了详解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区别内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • java中jdk代理和cglib代理使用步骤详解

    java中jdk代理和cglib代理使用步骤详解

    这篇文章主要给大家介绍了关于java中jdk代理和cglib代理使用步骤的相关资料,JDK代理和CGLIB是Java中两种常见的代理实现方式,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2023-11-11
  • Java使用反射和动态代理实现一个View注解绑定库

    Java使用反射和动态代理实现一个View注解绑定库

    这篇文章主要介绍了Java使用反射和动态代理实现一个View注解绑定库,代码简洁,使用简单,扩展性强,结合实例代码给大家介绍的非常详细,需要的朋友可以参考下
    2022-05-05
  • Spring中Eureka的服务下线详解

    Spring中Eureka的服务下线详解

    这篇文章主要介绍了Spring中Eureka的服务下线详解,根据默认的策略,如果在一定的时间内,客户端没有向注册中心发送续约请求,那么注册中心就会将该实例从注册中心移除,需要的朋友可以参考下
    2023-11-11
  • SpringBoot如何读取war包jar包和Resource资源

    SpringBoot如何读取war包jar包和Resource资源

    这篇文章主要介绍了SpringBoot如何读取war包jar包和Resource资源,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-01-01
  • Java实现微信网页授权的示例代码

    Java实现微信网页授权的示例代码

    这篇文章主要介绍了Java实现微信网页授权的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-07-07
  • 启用Spring事务管理@EnableTransactionManagement示例解析

    启用Spring事务管理@EnableTransactionManagement示例解析

    这篇文章主要为大家介绍了启用Spring事务管理@EnableTransactionManagement示例解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-09-09
  • Java构造函数通透理解篇

    Java构造函数通透理解篇

    这篇文章主要介绍了Java构造函数,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-09-09
  • 使用springboot配置和占位符获取配置文件中的值

    使用springboot配置和占位符获取配置文件中的值

    这篇文章主要介绍了使用springboot配置和占位符获取配置文件中的值,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-02-02
  • springboot自定义拦截器简单使用及举例

    springboot自定义拦截器简单使用及举例

    Spring Boot拦截器是AOP的一种实现,专门拦截对控制层的请求,主要应用于判断用户权限,拦截webSocket请求,下面这篇文章主要给大家介绍了关于springboot自定义拦截器简单使用及举例的相关资料,需要的朋友可以参考下
    2023-01-01
  • K8S环境下如何验证RocketMQ扩缩容

    K8S环境下如何验证RocketMQ扩缩容

    文章主要内容验证了K8S环境下RocketMQ的扩缩容特性,包括序号变化、命名规则以及节点重建后序号保持不变,StatefulSet确保Pod序号在重建后保持稳定,而Deployment创建的Pod名称是随机的
    2025-01-01

最新评论