list堆栈和单例缓存问题

你看见了吗° 2019-09-19 06:49:52
手机发帖,代码不好打,2楼发代码
...全文
103 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
ninuxGithub 2019-09-20
  • 打赏
  • 举报
回复
缓存的集合建议使用List<X> cacheList = Collections.unmodifiableList(list); 进行定义这样的好处是 如果在当前项目的其他地方有涉及到修改缓存的地方会抛异常 其是你的这个问题是对象深度拷贝的问题, 就是我需要缓存里面的集合对象, 需要复制一份做修改 但是同时又不修改缓存里面的初始值; 解决方法可以重新new 对象也可以, 还用一种方法就是深度拷贝 deepCopy
瘦死的黑骆驼 2019-09-20
  • 打赏
  • 举报
回复
引用 6 楼 a229397620 的回复:
[quote=引用 4 楼 瘦死的黑骆驼 的回复:] 你只是新new了list,但是lsit里面的Game对象还是原来的对象
那我在新new一个list,然后遍历robotList,遍历过程中,新new一个game实体,然后把遍历的对象数据用get,set的方式放入新对象,然后add到新list,这样可以改变这个地址吗[/quote] 对的,new一个新game对象,才是新的地址
你看见了吗° 2019-09-20
  • 打赏
  • 举报
回复
引用 4 楼 瘦死的黑骆驼 的回复:
你只是新new了list,但是lsit里面的Game对象还是原来的对象

那我在新new一个list,然后遍历robotList,遍历过程中,新new一个game实体,然后把遍历的对象数据用get,set的方式放入新对象,然后add到新list,这样可以改变这个地址吗
瘦死的黑骆驼 2019-09-19
  • 打赏
  • 举报
回复
引用 4 楼 瘦死的黑骆驼 的回复:
你只是新new了list,但是lsit里面的Game对象还是原来的对象
图画错了,意思是右边那三个小圈是同一个对象哦
瘦死的黑骆驼 2019-09-19
  • 打赏
  • 举报
回复
你只是新new了list,但是lsit里面的Game对象还是原来的对象
你看见了吗° 2019-09-19
  • 打赏
  • 举报
回复
正常来说,我new了两个对象,堆栈地址应该都不一样,add加到list里面,最终指向的地址都是单例的地址,有大咖回答下这是什么原理吗
你看见了吗° 2019-09-19
  • 打赏
  • 举报
回复
RobotUtils.loadRobotGame() 里面大致是new 一个新的list集合,然后遍历gameList,吧符合条件的对象add到list集合,然后返回来

我的问题是
for(int i=0;i<robotList.size();i++){
Game cp = robotList.get(i);
if(cp.getBetIdx().intValue() == 1){
cp.setSortIdx(14);
robotList.set(i, cp);
}
}

这段代码里面的操作setSortIdx(14),最终影响到了sysList单例里的值,就是后面每次从GameConf.getInstance().queryGameList()区里取值都是修改过的
你看见了吗° 2019-09-19
  • 打赏
  • 举报
回复
List<Game> gameList = new ArrayList<Game>();
List<Game> sysList = GameConf.getInstance().queryGameList();
List<Game> robotList = RobotUtils.loadRobotGame(gameList);
for(int i=0;i<robotList.size();i++){
Game cp = robotList.get(i);
if(cp.getBetIdx().intValue() == 1){
cp.setSortIdx(14);
robotList.set(i, cp);
}
}

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧