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()方法并不会覆盖对象的地址,只是对对象地址的引用而已。对象地址 创建完在 中,数据常量池中。
相关推荐
励志的小陈8 小时前
数据结构--二叉树知识讲解
数据结构
笨笨饿9 小时前
#58_万能函数的构造方法:ReLU函数
数据结构·人工智能·stm32·单片机·硬件工程·学习方法
私人珍藏库10 小时前
[吾爱大神原创工具] QtScreenSwitcher[Win]一个现代化、极简、高颜值的多屏开关工具。
windows·工具·软件·win·多功能
competes11 小时前
慈善基金投资底层逻辑应用 顶层代码低代码配置平台开发结构方式数据存储模块
java·开发语言·数据库·windows·sql
零号全栈寒江独钓12 小时前
基于c/c++实现linux/windows跨平台获取ntp网络时间戳
linux·c语言·c++·windows
li星野15 小时前
刷题:数组
数据结构·算法
dyxal19 小时前
内网 Windows 离线安装 uv:极速 Python 包管理器的部署实战
windows·python·uv
故事和你9119 小时前
洛谷-数据结构-1-3-集合3
数据结构·c++·算法·leetcode·贪心算法·动态规划·图论
stone082319 小时前
如何解决Windows硬盘变成了空白
windows