list.set交换数据需要(or不需要)添加其他中间变量,两个例子告诉你

说明:set()方法是来修改指定位置的元素

两个参数,第一个参数是要修改的元素的索引,第二个参数是要设置的新值。

案例一:当链表中传入的是字符串时:

java 复制代码
 public static void main(String[] args) {
        List list = new LinkedList();
        list.add("鱼香肉丝");
        list.add("粉蒸肉");
        list.add("梅干菜扣肉");

        System.out.println("=======迭代器遍历======");
        Iterator ito = list.iterator();
        while (ito.hasNext()) {
            Object o = ito.next();
            System.out.println(o);
        }

        //交换前两个元素,正确做法:
        String str1 = (String)list.get(0);
        String str2 = (String)list.get(1);
        list.set(0,str2);
        list.set(1,str1);
        
        //交换前两个元素,错误示例
        //list.set(0,list.get(1));
        //list.set(1,list.get(0));

        System.out.println("=======增强for遍历======");
        for (Object ob : list) {
            System.out.println(ob);
        }
    }

错误示例:当调用list.get(1)时,便将list.get(0)覆盖了,此时的 list.get(0)="粉蒸肉"。

当然,面对元素较少的List ,你也可以选择重新赋初值,示例如下:

java 复制代码
        list.set(0,"粉蒸肉");
        list.set(1,"鱼香肉丝");

打印结果:

案例二:当list传入的不是字符串,而是一个对象时:

java 复制代码
    public static void main(String[] args) {

        List list = new LinkedList();
//        List list = new Vector();
//        List list = new ArrayList();
        list.add(new Book("红楼小梦","曹雪芹",35.5));
        list.add(new Book("霸王别姬","张艺谋",98.5));
        list.add(new Book("一代妖姬","未知",30.5));
        list.add(new Book("前任三传","郑恺",32.5));

        System.out.println("=======迭代器遍历======");
        Iterator ito = list.iterator();
        while (ito.hasNext()) {
            Object o = ito.next();
            System.out.println(o);
        }

        Book book1 = (Book)list.get(0);
        Book book2 = (Book)list.get(1);
        //交换前两个元素
        list.set(0,book2);
        list.set(1,book1);

        System.out.println("=======增强for遍历======");
        for (Object ob : list) {
            System.out.println(ob);
        }
    }

此时,是创建的Book对象,而set()方法中并不会,覆盖赋值后的Book对象,只是对Book实例的引用而已。

打印结果:

小结:

  1. 当想要交换List的元素时,如果面对的对象较少,建议直接赋初值;
  2. 当面对元素较多时,可以将List向下转型,创建新的对象。此时,调用set()方法并不会覆盖对象的地址,只是对对象地址的引用而已。对象地址 创建完在 中,数据常量池中。
相关推荐
蹉跎x25 分钟前
力扣1358. 包含所有三种字符的子字符串数目
数据结构·算法·leetcode·职场和发展
坊钰1 小时前
【Java 数据结构】移除链表元素
java·开发语言·数据结构·学习·链表
阿七想学习2 小时前
数据结构《排序》
java·数据结构·学习·算法·排序算法
dntktop2 小时前
解锁自动化新高度,zTasker v2.0全方位提升效率
运维·windows
越甲八千3 小时前
总结一下数据结构 树 的种类
数据结构
eternal__day3 小时前
数据结构(哈希表(中)纯概念版)
java·数据结构·算法·哈希算法·推荐算法
蟾宫曲3 小时前
Node.js 工具:在 Windows 11 中配置 Node.js 的详细步骤
windows·npm·node.js·前端工具
OTWOL3 小时前
两道数组有关的OJ练习题
c语言·开发语言·数据结构·c++·算法
不惑_3 小时前
List 集合安全操作指南:避免 ConcurrentModificationException 与提升性能
数据结构·安全·list
带多刺的玫瑰4 小时前
Leecode刷题C语言之切蛋糕的最小总开销①
java·数据结构·算法