`

Java 容器(Collection和Map)介绍

    博客分类:
  • Java
阅读更多
  • 概念分类 

    Java 2将容器分为两个不同的概念: Collection 与Map 

    Collection: 提供对一组各自独立的元素的集合,List 、Queue与和Set接口都继承自Collection接口。 

    Map:提供了一组key-value(键值对)。

  两种类型的主要区别在于: Collection类型每个位置只持有一个元素(Object),比如List以加入到容器中的先后顺序来持有一个独立的的对象。Set中的对象不得重复,并且它会使用自己内部的一种排序机制。Map类型所持有的是key-value(键值对)Map不接受重复的key

  • 容器分类

Java的所有容器类都实现了来自于List, Set, Map三种接口中的一个。我们可以通过Think in Java里面的类图来观察他们之间的关系:

  • List

List定义了一个线性表接口,Java2中的List实现方式分为两种:

 

ArrayList(插入慢、查找快) 是以array(数组)实现的线性表数据结构,其get(int index)方法的时间复杂度为O(1)。而其插入与删除操作的元素在中央时,其效率较低。因为每次都要对插入或删除位置(index)后面的array的进行数组拷贝。每个ArrayList实例都有一个容量(Capacity),即用于存储元素的数组的大小。这个容量可随着不断添加新元素而自动增加,但是增长算法并没有定义。当需要插入大量元素时,在插入前可以调用ensureCapacity方法来增加ArrayList的容量以提高插入效率.和LinkedList一样,ArrayList也是非同步的(unsynchronized)。

 

LinkedList (插入快、查找慢)是一个双向链表数据结构。其插入与删除操作效率要明显高于ArrayList而且其随机查找的时间复杂度为O(n) (其实每次随机查找的次数要依赖于size/2到要查找的目标index之间的个数)其查找的效率要低于ArrayListO(1)。LinkedList实现了List接口,允许null元素。此外LinkedList提供额外的get,remove,insert方法在 LinkedList的首部或尾部。这些操作使LinkedList可被用作堆栈(stack),队列(queue)或双向队列(deque)。注意LinkedList没有同步方法。如果多个线程同时访问一个List,则必须自己实现访问同步。一种解决方法是在创建List时构造一个同步的List: 
  List  list  =  Collections.synchronizedList(new  LinkedList(...)); 


Vector类非常类似ArrayList,但是Vector是同步的。由Vector创建的Iterator,虽然和ArrayList创建的 Iterator是同一接口,但是,因为Vector是同步的,当一个Iterator被创建而且正在被使用,另一个线程改变了Vector的状态(例如,添加或删除了一些元素),这时调用Iterator的方法时将抛出ConcurrentModificationException,因此必须捕获该异常。

Stack类继承自Vector,实现一个后进先出的堆栈。Stack提供5个额外的方法使得Vector得以被当作堆栈使用。基本的push和pop 方法,还有peek方法得到栈顶的元素,empty方法测试堆栈是否为空,search方法检测一个元素在堆栈中的位置。Stack刚创建后是空栈。

 

 

 

 

 

  • Set

Set是集合类,该集合不能有“重复”对象存在,Java2Set实现方式分成两种:

HashSet 将持有对象映射到在哈希表中。  (JDK1.6的内部实现是 HashSet只是个适配器,其将适配对象HashMap适配成了Set接口)

TreeSet 将持有对象放入RBTree(红黑树)中。(TreeSet也将适配对象TreeMap适配成了Set接口)

  • Queue

  • Map

Map是一组key-value(键值对)集合,其中的key()不能重复。实现Map接口的类有Hashtable、HashMap、TreeMap和SortedMap类。 

 

 

 

Hashtable是继承Dictionary类,Hashtable的方法是同步的。Hashtable的key和value都不能为null。  

 

 

 

HashMap实现Map接口的,HashMap的方法不是同步的。HashMap可以让null作为一个表的条目的key或value,但HashMap中只有一条记录可以是一个null的key,而任意数量的条目可以是null的value。

 

TreeMapkey对象为关键值存放在RBTree(红黑树)中。其get(Object key)方法的平均时间复杂度为O(logn)key对象为关键值存放在RBTree(红黑树)中。其get(Object key)方法的平均时间复杂度为O(logn)  

 

WeakHashMap是一种改进的HashMap,它对key实行“弱引用”,如果一个key不再被外部所引用,那么该key可以被GC回收

  • Iterator

 Iterator迭代器实现对: 哈希表HashMap,红黑树TreeMap,链表LinkedList,动态数组ArrayList等数据结构的迭代。

 

 

  • 总结

ArrayListLinkedList效率比较

ArrayList查找操作的效率最高为,但其在添加和删除操作时需要拷贝数组所以效率较低,尤其是删除操作。该数据结构适用于需要频繁快速查找的地方。

LinkList 查找操作效率较低为,但其插入与删除操作效率较高,适用于需要频繁进行插入删除操作的情况。

HashMapTreeMap效率比较

HashMap 的查找、添加、删除的效率都要高于TreeMap

TreeMap存在是唯一理由就是它内部是一个树形结构存储结构,而Java中的其他的容器都是线性的(arraylist,linkedlist)或者说是线性的扩展(hashmap)

 

分享到:
评论

相关推荐

    java容器详细解析

    Java容器主要分为两大类:Collection和Map。 Collection Collection是一个独立元素的序列,这些元素都服从一条或多条规则。Collection接口提供了基本的操作方法,例如add、remove、contains等。 List List是一个...

    Java容器框架 collection集合

    Java容器类库主要目的是为了存储对象,根据不同的数据结构,可以将其划分为两个主要的概念:**Collection** 和 **Map**。 - **Collection**:这是一个单一元素的序列。它进一步细分为以下几个子类: - **List**:...

    java Collection&Map

    - Collection是所有单值容器的基接口,包括Set和List接口。 - **Set接口**:不允许重复元素,主要实现有HashSet、TreeSet和LinkedHashSet。 - HashSet:无序存储,不保证元素顺序,允许快速查找。 - TreeSet:...

    java容器详解(collection,list,set,map)

    java集合的详解,collection,list,set,map疑难解答,对于对容器似懂非懂的新手来说,这无疑是给你指点迷津的一个非常不错的选择,讲解内容丰富。

    Java集合Collection、List、Set、Map使用详解

    本文将深入解析Java集合中的Collection、List、Set和Map,包括它们的使用方法、实现原理以及如何进行排序。 ### 集合框架概述 1.1.1 容器简介 容器是Java集合框架的基础,它是一个可以存储多个对象的容器,提供了...

    Java容器简要介绍

    首先,Java容器分为两大主要类别:Collection和Map。Collection是所有单值容器的父接口,包括List、Set和Queue等子接口。List接口代表有序的集合,允许有重复元素,如LinkedList、ArrayList和Vector。Set接口则不...

    java容器学习心得

    通过以上解析,我们可以看到Java容器的强大功能和灵活性,它们不仅能够高效地存储和操作数据,还能适应不同的应用场景,是Java程序员不可或缺的工具箱。掌握并灵活运用这些容器,将极大地提升编程效率和代码质量。

    Java 容器.pdf_电子版pdf版

    Java 容器是 Java 语言中的一种集合类库,主要包括 Collection 和 Map 两种类型。Collection 存储着对象的集合,而 Map 存储着键值对(两个对象)的映射表。 Collection Collection 是一种集合接口,提供了对集合...

    java容器类 是初学者很好的学习材料

    Java容器类是Java编程语言中不可或缺的一部分,它们主要用于存储和管理对象。这些类和接口位于`java.util`包中,为开发者提供了灵活的数据结构和数据操作方式。在Java中,容器类主要分为两大类:Collection和Map。 ...

    JAVA容器对象整理

    这些知识点仅仅是Java容器对象的一部分,实际的博客可能会包含更多细节,如源码分析、性能对比和最佳实践。通过阅读博客中的`持有对象.xmind`文件,可以进一步了解博主对这些概念的详细整理和分类。如果你对Java容器...

    java容器(持有对象)

    在Java中,常见的容器主要分为三类:List、Set和Map,这些都是Java集合框架的重要组成部分。 首先,我们来看Collection接口,它是所有单值容器的基础接口。Collection接口定义了通用的操作方法,比如size()返回容器...

    JAVA容器知识积累

    Java容器是Java编程中至关重要的一个部分,它们用于存储、管理和操作对象集合。在这个主题下,我们将深入探讨Java中的核心容器类,包括数组、List、Set和Map,以及它们各自的特点和使用场景。 1. **数组**:数组是...

    JAVA容器的作用和概览

    Java容器(集合框架)是Java编程中极其重要的部分,它提供了多种数据结构,如列表、集合和映射,以适应不同场景下的数据存储和处理需求。通过合理选择和使用不同的容器,可以优化代码的性能和可维护性。同时,了解和...

    基础深化和提高-java容器

    Java容器主要分为两大类:Collection 和 Map。 Collection: Collection表示一组对象,它的主要子接口包括List、Set和Queue。其中: List:以线性方式存储元素,允许重复元素,并且可以根据索引访问元素。 Set:不...

    Java集合Collection、List、Set、Map使用详解.doc

    Java 集合框架中的容器可以分为两大类:Collection 和 Map。Collection 是一个接口,定义了容器的基本操作,而 Map 则是键值对的容器。 1.2 Collection Collection 是 Java 集合框架中的一个接口,定义了容器的...

    JAVA容器讲解.pdf

    Java容器讲解PPT,Collection Map(HashMap TreeMap LinkedHashMap) List (ArrayList LinkedList Vector) Set (HashSet TreeSet LinkedHashSet)

    java容器介绍及应用

    10. **Java容器简介**:这可能是对Java容器的入门介绍,涵盖了基本概念和使用方法,适合初学者了解和学习。 11. **JAVA容器概述**:这个WPS文件可能提供了Java容器的全面概述,包括其重要性、主要接口和类,以及...

    Java集合:Collection、List、Set、Map使用详解

    本文将深入探讨Java集合框架中的四个主要接口:Collection、List、Set和Map,以及它们的实现原理。 ### 集合框架概述 集合框架是Java API中用于存储和管理对象的统一框架。它为数据结构提供了抽象接口,使得程序员...

Global site tag (gtag.js) - Google Analytics