`
kimfly
  • 浏览: 48121 次
  • 性别: 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  
呵呵

相关推荐

    ASP .NET - ArrayList对象

    可以通过调用`TrimToSize()`方法来实现这一点: ```vb mycountries.TrimToSize() ``` 这行代码将确保`ArrayList`只分配足够的内存来存储当前的元素数量。 #### 排序元素 对于需要按照一定顺序显示列表的情况,...

    day09-ArrayList集合&学生管理系统.pdf

    ArrayList的特点是基于数组的数据结构,这使得它在随机访问元素时表现良好,但数组的缺点是容量固定,而ArrayList弥补了这一点,它的容量是动态变化的,能够随着元素的增加而自动扩展。 ### ArrayList类概述 ...

    Java中ArrayList的工作原理详解

    ArrayList 的自动扩容是其最重要的一点。当我们向 ArrayList 中添加元素时,如果当前数组的长度不足以容纳新元素,那么 ArrayList 将扩展其数组的长度,以满足新的存储需求。扩展的规则是将当前数组的长度增加 50%,...

    C#检查指定对象是否存在于ArrayList集合中的方法

    在使用ArrayList.Contains方法时,还有一点需要注意:如果ArrayList中存储的是自定义类型,而这些类型没有重写Equals和GetHashCode,那么默认的相等比较是基于对象的引用,而不是基于对象的值。因此,即使两个对象的...

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

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

    java代码-定义一个员工信息类Employee,使用ArrayList对员工信息进行添加和显示。曾子龙

    例如,我们可以创建一个`displayEmployees`方法来实现这一点: ```java public static void displayEmployees(ArrayList<Employee> employees) { for (Employee e : employees) { System.out.println("ID: " + e....

    C#的动态数组介绍可用

    `TrimToSize` 方法可以帮助实现这一点: ```csharp AL.TrimToSize(); ``` 调用后,`ArrayList` 的 `Capacity` 将被调整为当前的 `Count` 大小。 #### 清空 ArrayList 如果需要清空整个 `ArrayList`,可以使用 `...

    Java定义队列结构,并实现入队、出队操作完整示例

    在队列操作中,需要注意的一点是队列的同步问题。在多线程环境下,需要使用同步机制来避免队列操作的并发问题。此外,队列操作还需要注意队列的容量问题,避免队列溢出等问题。 七、结语 本文主要介绍了Java定义...

    一点课堂 JAVA核心知识点整理.zip

    "一点课堂 JAVA核心知识点整理.zip"这个压缩包文件包含了关于Java编程的关键概念和技能的详细总结,非常适合初学者和有经验的开发者进行学习和复习。 首先,Java的核心知识点包括基础语法。这包括变量声明、数据...

    关于做程序开发的一点小的总结

    在“关于做程序开发的一点小的总结”中提到的第一个关键点是自学能力的重要性。在快速变化的IT行业中,新技术不断涌现,旧技术不断被淘汰,因此具备良好的自学能力对于程序员来说至关重要。这不仅包括学习新的编程...

    Java集合框架面试题

    这一点也要看实际情况,若是单挑数据的插入或删除,ArrayList 速度反而由于 LinkedList;若是批量随机的插入或删除数据,LinkedList 速度大大由于 ArrayList。 5. HashMap 和 Hashtable 的区别: - 1、HashMap 是...

    Java线上故障排查方案(2).pdf

    5. 云厂商或运营商问题排查,特别是在使用云服务时,云服务提供商的问题也会引起线上故障,排查时不应忽略这一点。 在故障排查时,常见的Linux命令也必须掌握。比如,使用top或htop命令查看实时的系统状态,使用...

    《Java 基础之 List 深度探秘》.docx

    List集合可以通过索引访问,这一点类似于数组。同时,List集合支持动态的大小变化,可以在运行时添加或删除元素。List接口的主要实现类有ArrayList和LinkedList。ArrayList基于数组实现,适合于读取操作频繁的场景,...

    Java基础高级部分,适用于有一点及基础的在校学生或刚入门的程序员

    2. ArrayList:基于数组实现,适合快速随机访问,但在列表中间插入和删除元素时效率较低。 - 常见操作包括:add、remove、get、set、size等。 - 特殊操作包括:list.toArray(), list.indexOf(), list.contains()等...

    Java程序员面试题与经验工与总结.docx

    * 集合相关问题:HashMap、LinkedHashMap、ConcurrentHashMap、ArrayList、LinkedList 的底层实现,HashMap 和 Hashtable 的区别,ArrayList、LinkedList、Vector 的区别等。 * 多线程并发相关问题:创建线程的 3 种...

    CodingJava:只是解决了一点问题

    本主题围绕“CodingJava:只是解决了一点问题”,我们将深入探讨Java编程中的关键概念和技术,以及如何解决常见问题。 1. **基础语法**:Java的基础语法与C++类似,但更加简洁且具有自动内存管理。了解基本数据类型...

    一点Java复习资料

    - 软件学院05级OOP第二次测验试题及答案.doc:这可能是关于面向对象编程的一次测试,包括类、对象、封装、继承、多态等概念。 - OOP是Java的核心,理解类的定义、对象的创建和销毁、属性与方法的封装、单一职责...

    geek学习 有空就学习一点啦

    4. 集合框架:ArrayList、LinkedList、HashSet、HashMap等,以及它们的操作方法。 5. 输入/输出流:处理文件读写和网络通信。 6. 多线程:并发编程,理解Thread类和Runnable接口,以及同步机制(synchronized关键字...

    java练习程序集合类

    Java集合类中的ArrayList或LinkedList可以很方便地实现这一点。这里我们选择ArrayList,因为它的插入和访问速度较快。 ```java import java.util.ArrayList; import java.util.Collections; ArrayList<Integer> ...

    java.集合框架的特性与比较.md

    理解这一点对于编写健壮且功能丰富的程序代码至关重要,尤其是在处理集合数据时,能够正确地进行比较操作可以避免很多逻辑错误。 在实际编程中,理解并掌握Java集合框架的这些特性,可以帮助开发者更加高效地处理...

Global site tag (gtag.js) - Google Analytics