概念分类
Java 2将容器分为两个不同的概念: Collection 与Map
Collection: 提供对一组各自独立的元素的集合,List 与 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的进行数组拷贝。
LinkedList 是一个双向链表数据结构。其插入与删除操作效率要明显高于ArrayList。
而且其随机查找的时间复杂度为O(n) (其实每次随机查找的次数要依赖于size/2到要查找的目标index之间的个数)其查找的效率要低于ArrayList的O(1)。
Set
Set是集合类,该集合不能有“重复”对象存在,Java2中Set实现方式分成两种:
HashSet 将持有对象映射到在哈希表中。 (JDK1.6的内部实现是 HashSet只是个适配器,其将适配对象HashMap适配成了Set接口)
TreeSet 将持有对象放入RBTree(红黑树)中。(TreeSet也将适配对象TreeMap适配成了Set接口)
Map
Map是一组key-value(键值对)集合,其中的key(键)不能重复。
HashMap 用key对象生成hashcode然后映射到Entry<K,V>[]数组中(JDK1.6中其hashtable默认大小为16,在持有对象数量查过默认大小之后就会重新生成一个更大HashTable,然后将原有持有的对象逐个散列到新哈希表中)。其get(Object key) 最佳时间复杂度为O(1),最坏则为O(n)。但就查找的平均效率来说是要高于TreeMap。
TreeMap 用key对象为关键值存放在RBTree(红黑树)中。其get(Object key)方法的平均时间复杂度为O(logn)。
Iterator
Iterator迭代器实现对: 哈希表HashMap,红黑树TreeMap,链表LinkedList,动态数组ArrayList等数据结构的迭代。
所有实现了Collection接口对象都可以获得一个Iterator对象用来遍历自己的所持有的对象。而现实了Map接口的对象都是以key-value(键值对)形式存放的,所以在遍历时需要将对象转换成Collection或者Set来实现,Map接口中定义了以下几个方法将自己内部的值转换成Collection或者Set:
1. Collection<V> values() 生成一个只包含value(值)的Collection。
2. Set<Map.Entry<K,V>> entrySet() 生成了一个包含key-value(键值对)的集合。
3. Set<K> keySet() 生成一个只包含key的集合。
获得了Collection或Set之后使用Iterator<E> iterator()方法就可以获得迭代器了。Iterator的使用这里就不再多说了。
总结一下:
lArrayList与LinkedList效率比较
ArrayList查找操作的效率最高为,但其在添加和删除操作时需要拷贝数组所以效率较低,尤其是删除操作。该数据结构适用于需要频繁快速查找的地方。
LinkList 查找操作效率较低为,但其插入与删除操作效率较高,适用于需要频繁进行插入删除操作的情况。
以下测试数据来源于Think in Java
Type GET Iteration Insert Remove
ArrayList 281 1375 328 30484
LinkedLIst 5828 1047 109 16
HashSet和TreeSet就不介绍了,因为他们就是用HashMap和TreeMap实现的,可以直接参考下面的比较。
lHashMap与TreeMap效率比较
HashMap 的查找、添加、删除的效率都要高于TreeMap。TreeMap存在是唯一理由就是它内部是一个树形结构存储结构,而Java中的其他的容器都是线性的(即arraylist,linkedlist)或者说是线性的扩展(hashmap)。
以下测试数据来源于Think in Java
Type Size Put Get Iterator
TreeMap 10 26.6 20.3 43.7
100 34.1 27.2 45.8
1000 27.8 29.3 8.8
HashMap 10 21.9 18.8 60.9
100 21.9 18.6 63.3
1000 11.5 18.8 12.3
分享到:
相关推荐
10. **Java容器简介**:这可能是对Java容器的入门介绍,涵盖了基本概念和使用方法,适合初学者了解和学习。 11. **JAVA容器概述**:这个WPS文件可能提供了Java容器的全面概述,包括其重要性、主要接口和类,以及...
Java容器是Java编程语言中用于存储和操作对象的重要组成部分,主要设计目的是为了高效地管理和组织对象集合。在Java中,容器被广泛应用于各种场景,包括但不限于数据存储、数据检索、数据排序和数据过滤等。Java容器...
在IT领域,Java容器是一个非常重要的概念,尤其对于软件开发者来说,它们是理解和构建高效、可扩展的应用程序的关键。本文将深入探讨Java容器,并结合标签“源码”和“工具”,从源码层面和实用工具角度来分析这些...
Java容器详细解析 Java容器是一种基本的数据结构,用于存储和管理对象。Java容器主要分为两大类:Collection和Map。 Collection Collection是一个独立元素的序列,这些元素都服从一条或多条规则。Collection接口...
### Java容器学习心得详解 在Java编程中,容器(Containers)是存储和操作对象集合的重要工具,主要包括集合(Collections)和映射(Maps)。本文将深入解析Java容器的关键概念、特性以及不同容器类型的应用场景。 ...
JAVA 容器用法详解,关于JAVA容器的详细讲解
这篇博客"JAVA容器对象整理"可能涵盖了关于Java中的不同容器类、接口以及它们的使用方式。在这里,我们将深入探讨一些核心的Java容器知识点。 1. **ArrayList与LinkedList** - `ArrayList`是一个基于数组实现的...
本文将简要介绍Java容器的主要概念、API以及常用的容器类。 首先,Java容器分为两大主要类别:Collection和Map。Collection是所有单值容器的父接口,包括List、Set和Queue等子接口。List接口代表有序的集合,允许有...
Java容器是Java编程中至关重要的一个部分,它们用于存储、管理和操作对象集合。在这个主题下,我们将深入探讨Java中的核心容器类,包括数组、List、Set和Map,以及它们各自的特点和使用场景。 1. **数组**:数组是...
题目摘要:考虑下列的信息系统。出版社需要记录下列书籍和作者的信息: P1: 每一本书有一个title,一个description和一个ISBN number 还有 出版的日期(包括年/月) P2: 每一本书有1个或多个作者。...
Java容器讲解PPT,Collection Map(HashMap TreeMap LinkedHashMap) List (ArrayList LinkedList Vector) Set (HashSet TreeSet LinkedHashSet)
通过这些练习,你将巩固对Java容器的理解,提高代码编写效率,并为解决实际问题打下坚实基础。记得在实践中不断挑战自己,尝试不同的场景和数据结构,以便更好地掌握Java容器的精髓。祝你在学习过程中取得优异的成绩...
在Java编程中,容器是用来存储和管理对象的类或接口,它们使得我们可以在程序中方便地组织和操作数据。在Java中,常见的容器主要分为三类:List、Set和Map,这些都是Java集合框架的重要组成部分。 首先,我们来看...
Java 类容器是 Java 编程中非常重要的一个概念,它主要指的是 Java 集合框架中的各种类,如 ArrayList、LinkedList、HashSet、HashMap 等,这些类用于存储和管理对象。本文将深入探讨这些常用的Java类容器,帮助...
### Java容器起源与JSP容器背景解析 #### 容器技术概述 容器技术在现代IT领域扮演着极其重要的角色,特别是在云计算和微服务架构中。本文将深入探讨容器技术的起源,尤其是针对Java环境中JSP容器的发展历程及其...
Java容器类是Java编程语言中不可或缺的一部分,它们主要用于存储和管理对象。这些类和接口位于`java.util`包中,为开发者提供了灵活的数据结构和数据操作方式。在Java中,容器类主要分为两大类:Collection和Map。 ...
在Java编程语言中,容器(Container)是一种用来存储和管理数据结构的重要概念,它提供了组织、存储和操作数据的方式。容器通常指的是集合框架中的各种类,如List、Set、Map等,它们允许开发者以不同的方式存储和...
后缀为.mmap的思维导图,总结了JAVA容器的常见类
对于java容器的一些归纳整理,顺着思维导图能方便自己的理解,提高运用能力