详解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区别内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Java ArrayList add(int index, E element)和set(int index, E element)两个方法的说明

    一般使用List集合,估计都是使用这个ArrayList,一般呢也就是简单遍历数据和存储数据. 很少使用到add(int index, E element)和set(int index, E element)两个方法. 这两个方法,乍一看,就是在指定的位置插入一条数据. 区别: set()是更新,更新指定下标位置的值. add()是添加,区别于一般的add(E e),这个就是有个位置的概念,特殊位置之后的数据,依次往后移动就是了. 然后,看下面代码.来看看陷阱. 就算是,你知道了上面的内容,也不

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

    目录 前言 相同点 不同点 总结 前言 在Java中的常用的集合接口List中有两个非常相似的方法: E set(int index, E element); void add(int index, E element); 这两个方法都是在集合的指定位置插入指定的元素,那么这两个方法到底有什么区别呢?接下来我们通过ArrayList这个我们常用集合实现来看一下这两个方法的差异 相同点 首先我们来看一下这两个方法在ArrayList中的相同点 他们都会在集合的指定位置插入新的元素,例如下面的例子:

  • 详解java面试题中的i++和++i

    代码如下所示: public class TestPlusPlus{ public static void main(String[] args){ int k = addAfterReturn(10); System.out.println(k); //输出 10 int k1 = addbeforeReturn(10); System.out.println(k1); //输出11 } public static int addbeforeReturn(int i){ return ++i;

  • 详解Java删除Map中元素java.util.ConcurrentModificationException”异常解决

    今天在使用map并需要根据某些条件删除map元素时,自然而然想到调用Map中的remove(Object key)函数进行删除,代码如下: //遍历map,如果key<5,那么就删除此元素. Map<Integer, Integer> users = new LinkedHashMap<Integer, Integer>(); for (Map.Entry<Integer,Integer> entry : users.entrySet()){ for (int i

  • 详解Java关于JDK中时间日期的API

    目录 JDK 8中关于日期和时间的API测试 JDK 8 之前日期和时间的API测试 //1.System类中的currentTimeMillis() public void test1(){ long time = System.currentTimeMillis(); //返回当前时间与1970年1月1日0时0分0秒之间以毫秒为时间为单位的时间差. //称为时间戳 System.out.println(time);//1628416744054 } /* java.util.Date类 |-

  • StringUtils里的isEmpty方法和isBlank方法的区别详解

    前言 我们常说的字符串为空,其实就是一个没有字符的空数组.比如: String a = ""; a 就可以称为是一个空字符串.由于 String 在 Java 中底层是通过 char 数组去存储字符串的,所以空字符串对应的 char 数组表现形式为 private final char value[] = new char[0]; 但实际工作中,我们需要对字符串进行一些校验,比如:是否为 null,是否为空,是否去掉空格.换行符.制表符等也不为空.我们一般都是通过一些框架的工具类去做这

  • 详解Java编写并运行spark应用程序的方法

    我们首先提出这样一个简单的需求: 现在要分析某网站的访问日志信息,统计来自不同IP的用户访问的次数,从而通过Geo信息来获得来访用户所在国家地区分布状况.这里我拿我网站的日志记录行示例,如下所示: 121.205.198.92 - - [21/Feb/2014:00:00:07 +0800] "GET /archives/417.html HTTP/1.1" 200 11465 "http://shiyanjun.cn/archives/417.html/" &qu

  • 两万字详解Java Sring String的常见操作以及StringBuffer StringBuilder的区别

    目录 前言 1. 定义字符串 2.字符串比较相等 equals 使用注意事项 3. 字符串常量池( 多图解析 ) 第一个列子解析: 第二个列子解析: 第三个列子解析: 第四个列子解析: 第五个列子解析: 第六个列子解析: 第七个列子解析: 第八个列子解析: 面试题:请解释String类中两种对象实例化的区别 4. 理解字符串不可变 5.字符, 字节与字符串 字节与字符串 小结 6. 字符串常见操作 6.1 字符串比较 6.2 字符串查找 6.3 字符串替换 6.4 字符串拆分 6.5 字符串截取

  • 基于js 各种排序方法和sort方法的区别(详解)

    今天突发奇想,想明白sort方法是否比各种排序都有优势,所以就参考别人的代码,做了一个测试,结果令人惊讶啊,上代码. <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width,initial-scale=1.0,max

  • 对Keras中predict()方法和predict_classes()方法的区别说明

    1 predict()方法 当使用predict()方法进行预测时,返回值是数值,表示样本属于每一个类别的概率,我们可以使用numpy.argmax()方法找到样本以最大概率所属的类别作为样本的预测标签. 2 predict_classes()方法 当使用predict_classes()方法进行预测时,返回的是类别的索引,即该样本所属的类别标签.以卷积神经网络中的图片分类为例说明,代码如下: 补充知识:keras中model.evaluate.model.predict和model.predi

  • C#中Abstract方法和Virtual方法的区别

    简介: c#中Abstract和Virtual比较容易混淆,都与继承有关,并且涉及override的使用.virtual可以被子类重写,而abstract必须被子类重写.virtual修饰的方法必须有实现(哪怕是仅仅添加一对大括号),而abstract修饰的方法一定不能实现.它们有一个共同点:如果用来修饰方法,前面必须添加public,要不然就会出现编译错误:虚拟方法或抽象方法是不能私有的.毕竟加上virtual或abstract就是让子类重新定义的,而private成员是不能被子类访问的.下面

随机推荐