`
happy_zack
  • 浏览: 832 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

浅谈java集合框架

阅读更多

集合中存放的永远是对象的引用而不是对象本身。


1 ArrayList其实底层就是采用数组来实现的,当使用不带参数的构造方法创建ArrayList对象时,实际上会在底层生成一个长度为10的Object类型的数组。如果增加的元素的个数超过了10个,那么ArrayList底层会生成一个新的数组,长度为原数组的1.5倍+1,然后将原数组复制到新的数组当中去。
2 对于ArrayList的元素操作来说,可想而知效率不高,对于每个元素的删除它后续的元素都得向前移动,因为底层是数组来维护的嘛。
3 对于LinkedList而言,底层采用双向链表实现。当我们往LinkedList中添加对象时,实际上在LinkedList内部会生成一个Entry对象,该对象结构为:
Entry{
Entry previous;       //前一个节点的引用
Object element; //放入的对象
Entry next  ; //后一个节点的引用
}
其中的Object元素就是我们向LinkedList中添加的元素,然后Entry又构造好了向前和向后的引用previous、next,然后将生成的这个Entry对象加入到链表当中。换句话说,LinkedList中所维护的是一个个Entry对象。
4 LinkedList是通过节点直接彼此连接来实现的。每一个节点都包含前一个节点的引用,后一个节点的引用和节点存储的值。当一个新节点插入时,只需要修改其中保持先后关系的节点的引用即可,当删除记录时也一样。对于增加和删除操作来说效率很高
5 ArrayList与LinkedList的比较
1)ArrayList底层采用数组来实现的 ,LinkedList底层采用双向链表来实现的。
2)当执行插入和删除操作来说,LinkedList的效率要不ArrayList要高
3)当执行查找操作来说ArrayList的效率要高
4)两者都不是线程安全的,如果多个线程同时访问一个List,则必须自己实现访问同步 。
如:List list = Collections.synchronizedList(new LinkedList(…)); synchronizedList底层就是使用了synchronized关键字。其实没什么特别的,加上同步锁即可
synchronized(list) {
      Iterator i = list.iterator(); // Must be in synchronized block
      while (i.hasNext())
          foo(i.next());
  }

6   HashSet与HashMap
1)HashSet底层其实就是HashMap来实现的。当使用add方法将对象添加到Set当中 时,实际上是将该对象作为底层所维护的Map对象的key,而value则是同一个Object
private static final Object PRESENT = new Object();
这就是为什么HashSet中存放的元素不能重复

2)HashMap底层维护的是一个数组,当向HashMap中put一个对象时,首先会根据 key的hashCode值来计算出一个位置,该位置就是此对象准备往数组中存放的位置。如果该位置没有对象存在时,就将此对象放进数组当中去。如果该位置已经存在对象,则顺着此存在对象的链开始寻找(Entry类有一个Entry类型的next成员变量,指向该对象的下一个对象),如果此链上有对象的话,再去使用equals方法进行比较,如果此链上的某个对象的equals方法为false,则将该对象放到数组当中去,然后将数组当中该位置以前存在的那个对象连接到此对象的后面。否则不进行处理。

3)Map的keySet()方法返回key的集合,因为Map的键是不能重复的,因此keySet ()方法返回的类型Set;而Map的值是可以重复的,因此values()方法返回的类 型是Collection,可以容纳重复的元素

7 HashMap与HashTable比较
HashMap和Hashtable类似,不同之处在于HashMap是非同步的,并且允许null,即null value和null key。,但是将HashMap视为Collection时(values()方法可返回Collection),其迭代子操作时间开销和HashMap的容量成比例。因此,如果迭代操作的性能相当重要的话,不要将HashMap的初始化容量设得过高,或者load factor过低。

 

分享到:
评论

相关推荐

    浅谈JAVA集合框架及其应用.zip

    Java集合框架是Java编程语言中一个至关重要的组成部分,它为数据存储、管理和处理提供了丰富的类和接口。这个框架包括了数组、链表、队列、堆栈、映射等多种数据结构,极大地提高了开发效率和代码的可读性。在本文中...

    浅谈JAVA集合框架及其应用.pdf

    本文将从源码分析角度出发,深入探讨Java集合框架中常用的接口和实现类的底层数据结构及其特点,并探讨其在实际业务开发中的应用选择。 Java集合框架中的数据结构主要分为两大类:Collection集合和Map集合。...

    浅谈java!

    - **集合框架**:掌握Java的集合框架,了解List、Set、Map等容器的使用场景。 - **异常处理**:学会正确使用try-catch-finally语句处理异常情况。 - **输入输出流**:熟悉文件读写操作,包括文本文件和二进制文件的...

    浅谈Java程序设计在线开放课程.zip

    "浅谈Java程序设计在线开放课程"这个主题,将深入探讨Java语言的核心概念、编程实践以及如何通过在线平台有效地学习这门技术。 Java以其“一次编写,到处运行”的跨平台特性,成为了企业级应用开发的首选语言。课程...

    浅谈java集合类以及示例

    Java集合框架是Java编程语言中不可或缺的一部分,它提供了一种高效、灵活的数据组织方式。本文将深入探讨Java集合类的基本概念、分类以及示例。 首先,Java中的集合分为两大类:一种是以单个元素存储的集合,它们...

    浅谈Java web中基于Hashtable的数据库操作.zip

    - **无泛型支持**:Hashtable属于旧版集合框架,不支持泛型,这意味着在使用时需要进行类型转换,容易引发ClassCastException。 - **不支持迭代器**:与HashMap等新集合框架相比,Hashtable不支持foreach循环,使用...

    浅谈Java中常用数据结构的实现类Collection和M

    首先,Collection是Java集合框架的顶层接口,它是所有单值容器的父接口。Collection接口定义了对一组对象进行操作的基本方法,如添加元素(add),删除元素(remove),检查元素是否存在(contains)等。Collection的主要...

    Java基础之浅谈集合.doc

    总之,理解 Java 集合框架及其接口、实现类及其特性是每个 Java 开发者必备的基础知识,这有助于编写更高效、更易于维护的代码。通过熟练掌握这些概念,你可以更好地处理各种数据结构需求,并为解决实际问题打下坚实...

    浅谈java中集合的由来,以及集合和数组的区别详解

    Java集合框架的核心接口包括List、Set和Map。List接口代表一个有序的、允许重复元素的集合,比如ArrayList和LinkedList。Set接口则表示不允许重复元素的集合,如HashSet和TreeSet。Map接口用于存储键值对,如HashMap...

    浅谈Java在线开放课程建设.zip

    1. 课程体系设计:Java在线课程应包含基础语法、面向对象编程、集合框架、异常处理、多线程、网络编程等核心模块。每个模块应由易到难,逐步深入。 2. 实践项目:理论与实践相结合,设置实际的编程项目,如开发简单...

    java之浅谈深说--教你如何成长

    ### Java之浅谈深说——教你如何成长为Java编程高手 在IT行业中,Java作为一种广泛使用的编程语言,其重要性不言而喻。对于希望成为Java编程高手的学习者来说,掌握正确的学习路径至关重要。本文将根据提供的标题、...

    浅谈三种集合的关系、来源

    Java集合框架提供了丰富的API供开发者使用。例如,List接口提供了add、remove、contains等方法,Set接口则包含add、removeAll等。Map接口中,get、put和remove等方法用于管理键值对。 五、迭代器 迭代器是Java集合...

    浅谈Java中Collection和Collections的区别

    理解这两个概念的区别对于高效地利用Java集合框架至关重要。 首先,我们来详细了解一下`Collection`接口。`Collection`是Java集合框架的基础,它位于层次结构的顶层,位于`java.util`包下。`Collection`是一个接口...

    浅谈java中对集合对象list的几种循环访问

    Iterator接口是Java集合框架的核心组件,提供了一种迭代访问集合元素的方法,而无需暴露底层的实现。以下是使用Iterator遍历List的例子: ```java List<String> list = new ArrayList(); list.add("123"); list.add...

    浅谈jQuery的应用.pdf

    标题:“浅谈jQuery的应用” 知识点: 1. jQuery简介:jQuery是一个继prototype之后的优秀JavaScript框架,由John Resig创建于2006年初。它简化了JavaScript以及Ajax编程,以“write less, do more”为宗旨,用更...

    浅谈java中Map的用法

    在Java编程语言中,`Map`接口是集合框架的一部分,它提供了一种存储键值对数据结构的方法。Map接口定义了映射关系,其中每个键(Key)都是唯一的,并且与一个值(Value)相关联。它替代了早期的`Dictionary`类,因为...

    浅谈java中unmodifiableList方法的应用场景

    浅谈Java中unmodifiableList方法的应用场景 Java是一个强大的面向对象的编程语言,广泛应用于Android开发、Web开发、企业软件开发等领域。Java集合框架(Java Collections Framework)是Java语言中的一种基本工具,...

    java集合_浅谈Iterable和Iterator的区别

    在Java编程语言中,集合框架是处理对象数组的关键部分,而`Iterable`和`Iterator`则是这个框架中的两个核心概念,它们提供了遍历集合元素的...了解这两个接口的差异和用法,对于提升Java集合框架的使用效率至关重要。

    浅谈java Iterator.remove()方法的用法(详解)

    在深入讲解`Iterator.remove()`之前,我们先来了解一下Java集合框架中的迭代器。 Java集合框架提供了一种方式来遍历和操作集合中的元素,这就是迭代器(Iterator)。迭代器是一种设计模式,它允许程序员遍历任何...

Global site tag (gtag.js) - Google Analytics