• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

奋斗的软件工程师

  • 博客园
  • 联系
  • 订阅
  • 管理

公告

View Post

subList不能直接赋值给外部引用以达到修改的目的

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

class A {
    public static void main(String[] args) {

        List<Integer> list = new ArrayList<>();

        Collections.addAll(list, 9, 2, 8, 1, 5, 1);

        System.out.println(list.toString());//[9,2,8,1,5,1]

        List<Integer> subList = new ArrayList<>();

        getSubList(list, subList);

        System.out.println(subList.toString());//[]

        System.out.println(list.toString());//[9,2,8,1,5,1,1]
    }

    private static void getSubList(List<Integer> list, List<Integer> subList) {

        subList = list.subList(list.size() - 3, list.size());

        System.out.println(subList.toString());//[1,5,1]

        subList.add(1);
    }
}

/**
 * 结论:subList不能直接赋值给外部引用以达到修改的目的。
 * 
 * 这是因为subList返回的是原列表的一个视图,而不是一个新的列表对象。
 * 
 * 当你对subList进行修改时,实际上是在修改原列表。这是因为subList返回的是原列表的一个视图,
 * 
 * 而不是一个新的列表对象。这个视图是基于原列表的索引范围创建的,所以对subList的修改会反映到原列表上。
 * 
 * 举个例子,假设我们有一个列表list:[1, 2, 3, 4, 5]。
 * 
 * 然后我们获取了一个subList:subList = list.subList(1,4),即[2, 3, 4]。
 * 
 * 如果我们对subList进行修改,比如添加一个元素6,那么原列表也会被修改:list.add(6),变为[1, 2, 3, 4, 5, 6]。
 * 
 * 这是因为subList是原列表的一个视图,它只是原列表的一部分,而不是一个全新的列表。因此,对subList的修改会直接反映到原列表上。
 * 
 * List<Integer> subList = getSubList(list);
 * 
 * private static List<Integer> getSubList(List<Integer> list) {
 *      return new ArrayList<>(list.subList(list.size() - 3, list.size()));
 * }
 * 
 */

posted on 2024-05-18 21:43  周政然  阅读(20)  评论(0)    收藏  举报

刷新页面返回顶部
 
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3