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


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

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

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

    1. public static void main(String[] args) {
    2. List list = new LinkedList();
    3. list.add("鱼香肉丝");
    4. list.add("粉蒸肉");
    5. list.add("梅干菜扣肉");
    6. System.out.println("=======迭代器遍历======");
    7. Iterator ito = list.iterator();
    8. while (ito.hasNext()) {
    9. Object o = ito.next();
    10. System.out.println(o);
    11. }
    12. //交换前两个元素,正确做法:
    13. String str1 = (String)list.get(0);
    14. String str2 = (String)list.get(1);
    15. list.set(0,str2);
    16. list.set(1,str1);
    17. //交换前两个元素,错误示例
    18. //list.set(0,list.get(1));
    19. //list.set(1,list.get(0));
    20. System.out.println("=======增强for遍历======");
    21. for (Object ob : list) {
    22. System.out.println(ob);
    23. }
    24. }

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

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

    1. list.set(0,"粉蒸肉");
    2. list.set(1,"鱼香肉丝");

    打印结果:

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

    1. public static void main(String[] args) {
    2. List list = new LinkedList();
    3. // List list = new Vector();
    4. // List list = new ArrayList();
    5. list.add(new Book("红楼小梦","曹雪芹",35.5));
    6. list.add(new Book("霸王别姬","张艺谋",98.5));
    7. list.add(new Book("一代妖姬","未知",30.5));
    8. list.add(new Book("前任三传","郑恺",32.5));
    9. System.out.println("=======迭代器遍历======");
    10. Iterator ito = list.iterator();
    11. while (ito.hasNext()) {
    12. Object o = ito.next();
    13. System.out.println(o);
    14. }
    15. Book book1 = (Book)list.get(0);
    16. Book book2 = (Book)list.get(1);
    17. //交换前两个元素
    18. list.set(0,book2);
    19. list.set(1,book1);
    20. System.out.println("=======增强for遍历======");
    21. for (Object ob : list) {
    22. System.out.println(ob);
    23. }
    24. }

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

    打印结果:

    小结:

    1. 当想要交换List的元素时,如果面对的对象较少,建议直接赋初值;
    2. 当面对元素较多时,可以将List向下转型,创建新的对象。此时,调用set()方法并不会覆盖对象的地址,只是对对象地址的引用而已。对象地址创建完在中,数据常量池中。
  • 相关阅读:
    可编程 USB 转串口适配器开发板与振弦传感器测量模块的关系
    Linux进程间通信(一)
    基础DML(数据更新)知识点总结及实例讲解
    NC191 二叉搜索树的最近公共祖先
    以新版 Mini Conda 的安装而引申的思考
    关于路由转发
    波士顿房价预测分析----以线性回归LinearRegression为例
    Lua学习笔记:debug.sethook函数
    密文域可逆信息隐藏安全性研究-从图像到视频
    Android Studio中配置jdk版本无效问题
  • 原文地址:https://blog.csdn.net/qq_58341172/article/details/133880119