文档章节

Java - 复制ArrayList

LinJeffrey
 LinJeffrey
发布于 2015/08/13 06:14
字数 272
阅读 464
收藏 7

有时候当我们需要复制ArrayList时,最快的方法是新建一个实例,其实每个Collection类都有一个对应的通过自己复制的构造方法。clone()方法本身是有缺陷的,不推荐使用。推荐的做法如下:

List<Double> original = // some list
List<Double> copy = new ArrayList<Double>(original);

这个问题是在做HBase项目时发现的,当Scanner获得下一个结果时,如果直接将结果add进结果集并重用ArrayList的话,最后结果集里面的内容将会是最后一个结果的重复。

修改后的代码:

List<Cell> curVals = new ArrayList<Cell>();
List<List<Cell>> results = new ArrayList<List<Cell>>();
boolean finish = false;
do {
    curVals.clear();
    finish = scanner.next(curVals);
    List<Cell> tmp = new ArrayList<Cell>(curVals); // 复制中间结果 
    results.add(tmp);
} while (finish);

文章原文链接:http://stackoverflow.com/questions/715650/how-to-clone-arraylist-and-also-clone-its-contents

更新:以上例子只是浅复制(shallow clone),如果想要深复制(deep clone),需要迭代复制里面所有引用。

具体请查看http://www.itzhai.com/java-based-notebook-the-object-of-deep-and-shallow-copy-copy-copy-implement-the-cloneable-interface-serializing-deep-deep-copy.html

© 著作权归作者所有

共有 人打赏支持
LinJeffrey
粉丝 1
博文 12
码字总数 5343
作品 0
广州
私信 提问
集合——关于ArrayList的5道面试题

我以面试官的身份参加过很多Java的面试,以下是五个比较有技巧的问题,我发现有些初级到中级的Java研发人员在这些问题上没有完全弄明白,似懂非懂。所以我写了一篇相关的文章,帮助初级Java研...

亚特兰缇斯
2015/03/03
0
0
关于ArrayList的5道面试题

我以面试官的身份参加过很多Java的面试,以下是五个比较有技巧的问题,我发现有些初级到中级的Java研发人员在这些问题上没有完全弄明白,似懂非懂。所以我写了一篇相关的文章,帮助初级Java研...

LCZ777
2014/03/25
0
0
Java 中初始化 List 集合的 6 种方式!

List 是 Java 开发中经常会使用的集合,你们知道有哪些方式可以初始化一个 List 吗?这其中不缺乏一些坑,今天栈长我给大家一一普及一下。 1、常规方式 这种就是我们平常用的最多最平常的方式...

Java技术栈
2018/12/06
0
0
Java集合详解1:ArrayList,Vector与Stack

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/a724888/article/details/80261556 这位大侠,这是我的公众号:程序员江湖。 分享程序员面试与技术的那些事。...

程序员江湖
2018/05/09
0
0
Scala和Java在多核处理性能的一次对比和思考

今天在网络上看到了一篇关于Scala和java多线程对比的文章《Simple Scala actor Vs java Thread Vs Kilim Test,原文链接:http://www.blogjava.net/BlueDavy/archive/2009/11/25/303662.html......

qinhui99
2012/05/13
0
3

没有更多内容

加载失败,请刷新页面

加载更多

取变量的地址赋值给另一个变量,C通过,C++编译出错

取变量的地址赋值给另一个变量,C通过。正常运行,C++编译出错。 代码如下: #include <stdio.h>int main(int argc, char *argv[]){int x = 3;int *p = &x;int y = p;/*c ...

SamXIAO
55分钟前
1
0
利用隐写术实施攻击

尽管隐写术是一种低频攻击途径,但网络犯罪分子已经开始利用它结合社交媒体的普遍性和快速传播性来传递恶意有效负载。 低调但有效的隐写技术虽然是旧把戏,但将代码隐藏在看似正常的图像中,...

Linux就该这么学
55分钟前
3
0
YII2的乐观锁和悲观锁

乐观锁与悲观锁¶ Web应用往往面临多用户环境,这种情况下的并发写入控制, 几乎成为每个开发人员都必须掌握的一项技能。 在并发环境下,有可能会出现脏读(Dirty Read)、不可重复读(Unrep...

echojson
今天
2
0
UCOS线程切换原理

黑客画家
今天
3
0
最牛Java架构师进阶路线(年薪80W)

1、源码分析专题 详细介绍源码中所用到的经典设计思想,看看大牛是如何写代码的,提升技术审美、提高核心竞争力。 帮助大家寻找分析源码的切入点,在思想上来一次巨大的升华。知其然,并知其...

别打我会飞
今天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部