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()方法并不会覆盖对象的地址,只是对对象地址的引用而已。对象地址 创建完在 中,数据常量池中。
相关推荐
第七序章40 分钟前
【C++STL】list的详细用法和底层实现
c语言·c++·自然语言处理·list
研华嵌入式7 小时前
如何在高通跃龙QCS6490 Arm架构上使用Windows 11 IoT企业版?
arm开发·windows·嵌入式硬件
散11210 小时前
01数据结构-01背包问题
数据结构
消失的旧时光-194310 小时前
Kotlinx.serialization 使用讲解
android·数据结构·android jetpack
Gu_shiwww10 小时前
数据结构8——双向链表
c语言·数据结构·python·链表·小白初步
带娃的IT创业者11 小时前
Windows 平台上基于 MCP 构建“文心一言+彩云天气”服务实战
人工智能·windows·文心一言·mcp
苏小瀚12 小时前
[数据结构] 排序
数据结构
csdn_aspnet14 小时前
Windows Node.js 安装及环境配置详细教程
windows·node.js
睡不醒的kun14 小时前
leetcode算法刷题的第三十四天
数据结构·c++·算法·leetcode·职场和发展·贪心算法·动态规划
吃着火锅x唱着歌14 小时前
LeetCode 978.最长湍流子数组
数据结构·算法·leetcode