`
kimfly
  • 浏览: 47124 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

关于ArrayList的一点问题

    博客分类:
  • java
阅读更多

    昨天在程序检查时发现的以下的一段程序:

      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源代码看来还是很有帮助的。

分享到:
评论
1 楼 leeight 2006-11-29  
呵呵

相关推荐

    第8讲 对比Vector、ArrayList、LinkedList有何区别1

    介绍),当处理的数据集比较小的时候,差距不明显,甚至还表现差一点;但是,当数据集增长到数万或百万以上时,提高就非常大了,具体还是取决于处理器和系统环境。排序算法

    JDK1.6中Arraylist,Vector,LinkedList源码

    这是我从JDK中拿出的Arraylist,Vector,LinkedList源码,自己看源码的时候弄出来的,并写了一点自己的分析,仅供源码分析者使用

    今天会是有Offer的一天么:面试时不要再问我ArrayList、LinkedList和CopyOnWriteArrayList的区别了

    今天不看源码(想看源码的同学可以自己在...实现RandomAccess接口表示它可以支持随机访问(强调一点,并不是因为实现了RandomAccess接口,ArrayList才支持随机访问。RandomAccess只是一个标记接口,接口RandomAccess中

    java猜数字源码-softtest-interview:软件测试工程师or测试开发真实面试题,并附上答案。希望能够节省大家寻找面试题的时间,

    以面试题来驱动学习,每天进步一点!:party_popper: 题目均来自测试开发岗的大厂真实面试题 除此之外,还会不定期更新 测试内推岗 测试学习资源:clinking_beer_mugs: 使用建议 在阅读题目时,先自我思考一下:...

    编写高质量代码改善C#程序——使用泛型集合代替非泛型集合(建议20)

    软件开发过程中,不可避免会用到集合,C#中的集合表现为数组和...很遗憾,在微软提供给我们的第一代集合类型中没有做到这一点,下面我们看ArrayList这个类的使用情况: ArrayList al=new ArrayList(); al.Add(0);

    JAVA 学生管理系统设计实现

    实现简单的用户管理,图书管理和借阅管理,字符界面,没有做GUI(偷懒了一点呵呵) 使用数组列表保存数据ArrayList, 退出后所有数据丢失,没有用文件系统和数据库, 主要是保留自己以前用C写的时候的样子,怀念一下

    Java语言的科学与艺术(国外计算机科学经典教材)

    本书使用传记简介、引用以及哲学片段来突出计算的历史和理性背景,着重强调算法和问题解决,而今天的初级教科书通常忽略了这一点。 内容简介 自1995年首次发布以来,Java编程语言作为一种教学语言变得日益重要,现在...

    .net 各种实用方法

    - (System.Double,System.Double,System.Double,System.Collections.ArrayList)"> <summary>Ca函数</summary> 中心线</param> 管制上限</param> 管制下限</param> <returns>Ca</returns> 开方(2*(中心线-...

    xalanjava源码-Java-Commons:该项目提供了用于其他Java项目的通用类和实用程序。这可能包括第3方库以及Brightcov

    java源码关于 该项目提供了用于其他 Java 项目的通用类和实用程序。 这可能包括第 3 方库以及 Brightcove 开源库。 要求 只要有可能,这些库将与 Java 1.5 兼容,但在某些情况下可能需要 Java 1.6。 每个公共图书馆...

    java8源码-JDKSourceCode:阅读jdk1.8的一些注意事项

    初始化仓库,其实这份源码之前有阅读过一点,有一些注释现在正是开始同步写博客分析 Java8 源码 博客地址: ArrayList ctor-3 get set add-2 remove-2 clear addAll write/readObject fast-fail subList iterator ...

    android中实现在ImageView上随意画线涂鸦的方法

    我实现的思路: 1.继承ImageView类 2.重写onTouchEvent方法,在ACTION_MOVE(即移动时),记录下所经过的点坐标,在ACTION_UP时(即手指离开时,这时一条线已经画完),将所画的线(点的集合... ArrayList<ViewPoint> po

    asp.net知识库

    我对J2EE和.NET的一点理解 难分难舍的DSO(一) InternalsVisibleToAttribute,友元程序集访问属性 Essential .NET 读书笔记 [第一部分] NET FrameWork的Collections支持 .NET的反射在软件设计上的应用 关于跨程序集...

    第三章JAVA 中的数组及字符串.doc

    (这一点与C相同);   其它与C语言中的数组概念相同,包括利用数组下标赋值、取值以及内存中的存储方式等。  与C语言不同,数组也是类(对象),有许多方法可调用(如长度等) 二:多维数组(二维数组)  ...

    JSF2datatable分页控件与左侧菜单

    而且也有很多很好的控件给发出来了,如:richfaces、primefaces、myfaces等,就日前来讲primefaces功能很强大,控件很多,但有一点不好就是不支持IE6,特别是下拉列表,p:dialog等,其它的分页p:datatable实际使用...

    DVD项目功能实现

    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 ...

    @SuppressWarnings

    一点背景:J2SE 5.0 为 Java 语言增加了几个新的特性,并且和它们一起增加了许多新的警告并承诺在将来增加更多的警告。您可以为 "javac" 增加 -Xlint 参数来控制是否报告这些警告(如上面的 @Deprecated 部分所示)...

    cervidae:Cervidae - 低级数据结构和算法

    为了实现这一点,我们尝试执行模型-视图-控制器 (MVC) 之类的关注点分离,即使对于低级数据结构和算法也是如此。 生成的代码可能看起来有点复杂,不再像面向对象编程,但实际上将数据对象与代码对象分开而不是混合...

    C#中可变数组运用

    初学者可以看看,欢迎交流! 可变数组与数组有很大区别,你能从中收获一点东西!

    Fourinone分布式并行计算四合一框架

    如果仅仅是为了实现这个简单的初衷,为什么一切会那么复杂,我觉的自己可以写一个更简单的东西,它不需要过度设计,只需要看上去更酷一点,更小巧一点,功能更强一点。于是我将自己对分布式的理解融入到这个框架中,...

    StudentArrayList.java

    学生管理系统,可供参考,没有对象类。包含学生管理系统,方便简洁,博主以后也会陆陆续续更新自己的一点小东西,可供学弟们参考下。java面向对象抽调的是真的舒服。

Global site tag (gtag.js) - Google Analytics