Java Collections Framework比较
数组类Array是Java中最基本的一个存储结构。它用于存储一组连续的对象或基本类型的数据。其中的元素的类型必须相同。array是最有效 率的一种。
1、效率高,但容量固定且无法动态改变。 array还有一个缺点是,无法判断其中实际存有多少元素,length只是告诉我们array的容量。
2、Java中有一个Arrays类,专门用来 操作array ,提供搜索、排序、复制等静态方法。
equals():比较两个array是否相等。array拥有相同元素个数,且所有对应元素两两相等。 fill():将值填入array中。
sort():用来对array进行排序。
binarySearch():在排好序的array中寻找元素。 System.arraycopy():array的复制。
Java Collections Framework成员主要包括两种类型,即:Collection和Map类型。 在Java中提供了Collection和Map接口。其中List和Set继承了Collection接口;同时用Vector、ArrayList、 LinkedList三个类实现List接口,HashSet、TreeSet实现Set接口。直接有HashTable、HashMap、 TreeMap实现Map接口。由此可见,Java中用8种类型的基本数据结构来实现其Collections Framework;下面分别进行介绍。
Vector基于Array的List,性能也就不可能超越Array,并且Vector是“sychronized”的,这个也是Vector和ArrayList的唯一的区别。
ArrayList:同Vector一样是一个基于Array的,但是不同的是ArrayList不是同步的。所以在性能上要比Vector优越一些,但 是当运行到多线程环境中时,可需要自己在管理线程的同步问题。从其命名中可以看出它是一种类似数组的形式进行存储,因此它的随机访问速度极快。
LinkedList:LinkedList不同于前面两种List,它不是基于Array的,所以不受Array性能的限制。它每一个节点(Node) 都包含两方面的内容:1.节点本身的数据(data);2.下一个节点的信息(nextNode)。所以当对LinkedList做添加,删除动作的时候 就不用像基于Array的List一样,必须进行大量的数据移动。只要更改nextNode的相关信息就可以实现了所以它适合于进行频繁进行插入和删除操 作。这就是LinkedList的优势。Iterator只能对容器进行向前遍历,而 ListIterator则继承了Iterator的思想,并提供了对List进行双向遍历的方法。
List总结:
1. 所有的List中只能容纳单个不同类型的对象组成的表,而不是Key-Value键值对。例如:[ tom,1,c ];
2. 所有的List中可以有相同的元素,例如Vector中可以有 [ tom,koo,too,koo ];
3. 所有的List中可以有null元素,例如[ tom,null,1 ];
4. 基于Array的List(Vector,ArrayList)适合查询,而LinkedList(链表)适合添加,删除操作。
HashSet:虽然Set同List都实现了Collection接口,但是他们的实现方式却大不一样。List基本上都是以Array为基础。但是 Set则是在HashMap的基础上来实现的,这个就是Set和List的根本区别。HashSet的存储方式是把HashMap中的Key作为Set的 对应存储项,这也是为什么在Set中不能像在List中一样有重复的项的根本原因,因为HashMap的key是不能有重复的。HashSet能快速定位 一个元素,但是放到HashSet中的对象需要实现hashCode()方法0。
TreeSet则将放入其中的元素按序存放,这就要求你放入其中的对象是可排序的,这就用到了集合框架提供的另外两个实用类Comparable和 Comparator。一个类是可排序的,它就应该实现Comparable接口。有时多个类具有相同的排序算法,那就不需要重复定义相同的排序算法,只要实现Comparator接口即可。TreeSet是SortedSet的子类,它不同于HashSet的根本就是TreeSet是有序的。它是通过SortedMap来实现的。
Set总结:
1. Set实现的基础是Map(HashMap);
2. Set中的元素是不能重复的,如果使用add(Object obj)方法添加已经存在的对象,则会覆盖前面的对象; Set里的元素是不能重复的,那么用什么方法来区分 重复与否呢? 是用==还是equals()? 它们有何区别? Set里的元素是不能重复的,即不能包含两个元素e1、e2(e1.equals(e2))。那么用iterator()方法来区分重复与否。 equals()是判读两个Set是否相等。==方法决定引用值(句柄)是否指向同一对象。
Map是一种把键对象和值对象进行关联的容器,Map有两种比较常用的实现: HashTable、HashMap和TreeMap。
HashMap也用到了哈希码的算法,以便快速查找一个键,TreeMap则是对键按序存放,因此它有一些扩展的方法,比如 firstKey(),lastKey()等。HashMap和Hashtable的区别。 HashMap是Hashtable的轻量级实现(非线程安全的实现),他们都完成了Map接口。主要区别在于HashMap允许空(null)键 (key)或值(value),非同步,由于非线程安全,效率上可能高于Hashtable。 Hashtable不允许空(null)键(key)或值(value),Hashtable的方法是Synchronize的,在多个线程访问 Hashtable时,不需要自己为它的方法实现同步,而HashMap 就必须为之提供外同步。 Hashtable和HashMap采用的hash/rehash算法都大概一样,所以性能不会有很大的差异。
分享到:
相关推荐
Data Structures and the Java Collections Framework(3rd) 英文无水印pdf 第3版 pdf所有页面使用FoxitReader和PDF-XChangeViewer测试都可以打开 本资源转载自网络,如有侵权,请联系上传者或csdn删除 本资源...
本资源《Data Structures and the Java Collections Framework》旨在深入讲解这两个主题,帮助开发者更好地理解和应用它们。 数据结构是指在内存中组织数据的方式,它决定了数据的存储和访问效率。常见的数据结构...
### Java Collection Framework 相关知识点 #### 一、引言 在 Java 领域,《Java Collection Framework》这本书被广泛认为是一本优秀的教程,尤其适合初学者了解集合框架的前世今生。通过本书的学习,读者不仅能...
Java 集合框架(JCF:Java Collections Framework)之概述 Java 集合框架(JCF:Java Collections Framework)是 Java 语言中的一组类库,用于实现集合操作的统一标准。集合是计算机科学中的一种基本概念,来源于...
### Java Collections Framework 1016 #### 一、教程概览 本教程由developerWorks提供,旨在深入探讨Java Collections Framework。它不仅适用于初学者,也适合具有一定经验的开发人员。教程从简单的编程示例开始,...
Java 集合框架 Java 集合框架是一个强大的框架,提供了各种集合类和接口,以方便开发者处理数据。它是 Java 语言的核心组件之一,广泛应用于各种应用程序中。 集合框架概述 集合框架是一个泛型系统,提供了一个...
Java Collections Framework(JCF)是Java平台的一部分,旨在为开发者提供一个统一且灵活的方式来处理各种类型的数据集合。 ### Java Collections的主要组成部分 Java Collections Framework主要由以下几部分组成...
### Java Collections Framework详解 #### 一、概述 《Java Collections 2001 by John Zukowski》是一本深入探讨Java Collections Framework的专业书籍。该书由John Zukowski编写,出版于2001年,虽然时间久远,但...
Java Collections Apress This book describes how to use this Collections Framework. We'll also look at some of the common alternate frameworks available.
Java Collections Framework备忘单 这是一个小的备忘单和使用Java Collections Framework的经验法则。 资料来源: 所有Java Collections Framework类都实现Collection接口。 清单 列表实现List接口: ArrayList ...
本文章主要抽取了 Java Collections Framework 中的Collection 接口、List 接口、AbstractCollection 抽象类、AbstractList 抽象类和具体的ArrayList 的实现纵向研究了Java Collections Framework 中的Fail Fast ...
本文旨在深入探讨Java Collections Framework中的算法部分,通过对`Arrays`类和`Collections`类的功能分析,帮助读者理解并掌握这些算法的实际应用。 #### 二、Arrays类详解 `java.util.Arrays` 类主要用于处理...
在"JavaCollectionsTutorial:Java Collections Framework教程的源代码-Source code collection"中,你将找到一系列关于如何使用和理解这个框架的示例代码。 **1. 集合接口:** - **List接口**:代表有序的元素集合...
这个教程——"java-collections-examples"旨在通过简单易懂的示例,全面地介绍Java Collections Framework。下面我们将深入探讨其中的关键组件和概念。 1. **ArrayList**: 这是基于数组实现的列表,提供了随机访问...
《Jdk1.6 Collections Framework源码解析(2)-LinkedList》 LinkedList是Java集合框架中的一个重要的类,它是List接口的实现,同时继承了AbstractSequentialList,并实现了Deque接口。LinkedList是一种双链表结构,...