昨天在程序检查时发现的以下的一段程序:
List list = new ArrayList();
Map map = new HashMap();
map.put("id", "1");
map.put("name", "dd");
list.add(map);
map = new HashMap();
map.put("id", "2");
map.put("name", "ff");
list.add(map);
map = new HashMap()后,会发生什么问题呢?
因为list增加过map对象,按照传递指针的方法,那么最后的结果大家都知道了,就是最后list中的两个对象都指向了最后的那个map对象,即包含Id为2的那个map。但是结果是如此吗?
很遗憾,我也被搞混了,结果是正确的,List 包含了两个不同的Map。
带着疑惑google了一下,没有结果。怎么办? 查看一下jdk的源代码可能会有帮助。
public boolean add(Object o) {
ensureCapacity(size + 1); // Increments modCount!!
elementData[size++] = o;
return true;
}
谜底就此揭开,原来ArrayList在实现的时候,在内部维护者一个数组,这样每次add以后,都是由它自身的内部数组对象指向那个对象了。所以上面的答案也就正确了。
虽然用了java很长时间,也以为对常用的比较了解,困惑以后看看jdk源代码看来还是很有帮助的。
分享到:
相关推荐
介绍),当处理的数据集比较小的时候,差距不明显,甚至还表现差一点;但是,当数据集增长到数万或百万以上时,提高就非常大了,具体还是取决于处理器和系统环境。排序算法
这是我从JDK中拿出的Arraylist,Vector,LinkedList源码,自己看源码的时候弄出来的,并写了一点自己的分析,仅供源码分析者使用
今天不看源码(想看源码的同学可以自己在...实现RandomAccess接口表示它可以支持随机访问(强调一点,并不是因为实现了RandomAccess接口,ArrayList才支持随机访问。RandomAccess只是一个标记接口,接口RandomAccess中
以面试题来驱动学习,每天进步一点!:party_popper: 题目均来自测试开发岗的大厂真实面试题 除此之外,还会不定期更新 测试内推岗 测试学习资源:clinking_beer_mugs: 使用建议 在阅读题目时,先自我思考一下:...
软件开发过程中,不可避免会用到集合,C#中的集合表现为数组和...很遗憾,在微软提供给我们的第一代集合类型中没有做到这一点,下面我们看ArrayList这个类的使用情况: ArrayList al=new ArrayList(); al.Add(0);
实现简单的用户管理,图书管理和借阅管理,字符界面,没有做GUI(偷懒了一点呵呵) 使用数组列表保存数据ArrayList, 退出后所有数据丢失,没有用文件系统和数据库, 主要是保留自己以前用C写的时候的样子,怀念一下
本书使用传记简介、引用以及哲学片段来突出计算的历史和理性背景,着重强调算法和问题解决,而今天的初级教科书通常忽略了这一点。 内容简介 自1995年首次发布以来,Java编程语言作为一种教学语言变得日益重要,现在...
- (System.Double,System.Double,System.Double,System.Collections.ArrayList)"> <summary>Ca函数</summary> 中心线</param> 管制上限</param> 管制下限</param> <returns>Ca</returns> 开方(2*(中心线-...
java源码关于 该项目提供了用于其他 Java 项目的通用类和实用程序。 这可能包括第 3 方库以及 Brightcove 开源库。 要求 只要有可能,这些库将与 Java 1.5 兼容,但在某些情况下可能需要 Java 1.6。 每个公共图书馆...
初始化仓库,其实这份源码之前有阅读过一点,有一些注释现在正是开始同步写博客分析 Java8 源码 博客地址: ArrayList ctor-3 get set add-2 remove-2 clear addAll write/readObject fast-fail subList iterator ...
我实现的思路: 1.继承ImageView类 2.重写onTouchEvent方法,在ACTION_MOVE(即移动时),记录下所经过的点坐标,在ACTION_UP时(即手指离开时,这时一条线已经画完),将所画的线(点的集合... ArrayList<ViewPoint> po
我对J2EE和.NET的一点理解 难分难舍的DSO(一) InternalsVisibleToAttribute,友元程序集访问属性 Essential .NET 读书笔记 [第一部分] NET FrameWork的Collections支持 .NET的反射在软件设计上的应用 关于跨程序集...
(这一点与C相同); 其它与C语言中的数组概念相同,包括利用数组下标赋值、取值以及内存中的存储方式等。 与C语言不同,数组也是类(对象),有许多方法可调用(如长度等) 二:多维数组(二维数组) ...
而且也有很多很好的控件给发出来了,如:richfaces、primefaces、myfaces等,就日前来讲primefaces功能很强大,控件很多,但有一点不好就是不支持IE6,特别是下拉列表,p:dialog等,其它的分页p:datatable实际使用...
import java.util.ArrayList; import java.util.List; public class BaseDaoImpl<T> { protected List<T> read(File file) { FileInputStream fis = null; ObjectInputStream ois = null; List<T> list = new ...
一点背景:J2SE 5.0 为 Java 语言增加了几个新的特性,并且和它们一起增加了许多新的警告并承诺在将来增加更多的警告。您可以为 "javac" 增加 -Xlint 参数来控制是否报告这些警告(如上面的 @Deprecated 部分所示)...
为了实现这一点,我们尝试执行模型-视图-控制器 (MVC) 之类的关注点分离,即使对于低级数据结构和算法也是如此。 生成的代码可能看起来有点复杂,不再像面向对象编程,但实际上将数据对象与代码对象分开而不是混合...
初学者可以看看,欢迎交流! 可变数组与数组有很大区别,你能从中收获一点东西!
如果仅仅是为了实现这个简单的初衷,为什么一切会那么复杂,我觉的自己可以写一个更简单的东西,它不需要过度设计,只需要看上去更酷一点,更小巧一点,功能更强一点。于是我将自己对分布式的理解融入到这个框架中,...
学生管理系统,可供参考,没有对象类。包含学生管理系统,方便简洁,博主以后也会陆陆续续更新自己的一点小东西,可供学弟们参考下。java面向对象抽调的是真的舒服。