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()方法并不会覆盖对象的地址,只是对对象地址的引用而已。对象地址 创建完在 中,数据常量池中。
相关推荐
embrace9910 分钟前
【数据结构学习】数据结构和算法
c语言·数据结构·c++·学习·算法·链表·哈希算法
杨恒9814 分钟前
GESPC++三级编程题 知识点
数据结构·c++·算法
好奇的菜鸟15 分钟前
Windows 环境下使用 Docker 部署 Java 开发中间件完全指南
java·windows·docker
!停21 分钟前
自定义类型:结构体
windows
历程里程碑25 分钟前
LeetCode 283:原地移动零的优雅解法
java·c语言·开发语言·数据结构·c++·算法·leetcode
love530love27 分钟前
【笔记】把已有的 ComfyUI 插件发布到 Comfy Registry(官方节点商店)全流程实录
人工智能·windows·笔记·python·aigc·comfyui·torchmonitor
小高Baby@35 分钟前
map的数据结构,扩容机制,key是无序的原因
数据结构·golang·哈希算法
智航GIS39 分钟前
3.2 列表(List)
数据结构·windows·list
渡我白衣40 分钟前
计算机组成原理(10):逻辑门电路
android·人工智能·windows·嵌入式硬件·硬件工程·计组·数电
王璐WL40 分钟前
【数据结构】实现二叉树
数据结构