- 一、集合简介
- 二、集合框架
在正常实现方法或者关注性能时,你选择的不同的数据结构会带来很大的差异。 在大学的计算机科学课程中,有一门数据结构课程 ,通常要讲授一个学期。下面仅仅记录一下标准库中的集合函数。
集合的特点:
集合用来存储不同类型的对象(基本数据类型除外),存储长度可变。
java集合中实际存放的只是对象的引用,每一个集合元素都是一个引用变量,实际内容都放在堆内存中或者方法区里面,但是基本类型是在栈里分配空间的,栈上的数据随时都会被收回。
java最初只为最常见的数据结构提供了很少的一组类:Vector、Stack、HashTable 、 BitSety与Enumeration接口,其中Enumeration接口提供了一种用于访问任意容器中各个元素的抽象机制。这是一种很明智的选择,想要建立一个全面的集合类库需要大量的时间和高超的技能。虽然这些类都非常有用,但是它们缺少了一个核心的,统一的主题。
随着java1.2的问世,设计人员感到是退出一组功能完善的数据结果的时候了。面对一堆相互冲突的设计策略,他们希望让类库规模很小而且易于学习。
集合框架的被设计要满足以下几个目标
1.该框架必须是高性能的。基本集合(动态数组,链表,树,哈希表)的实现必须也是高效的。
2. 该框架允许是不同类型的集合,以类似的方式工作,具有高度的互 *** 作性。
3.对一个集合的扩展和适应必须是简单的。
为此,整个集合框架就围绕着一组标准接口设计。你可以直接使用这个接口的标准实现,诸如:linkedList,HashSet,和TreeSet等,除此之外你也可以通过这个接口实现自己的集合。
与现代的数据结构类库常见的做法一样,java集合框架类库也将接口与实现分离。接下来用队列(queue)来说明是如何分离的。
队列接口指出可以在队列的尾部添加元素,在队列的头部删除元素,并且可以查找队列中的元素个数,当需要收集对象,并按照“先进先出”方式检索对象时就应该使用队列。
队列接口的最简单形式可能类似下面这样
public interface Queue{ void add(E element); E remove(); int size(); }
这个接口并没有说明队列是如何实现的。队列通常有两种实现方式:一种是使用循环数组;另一种是使用列表;
每一个实现都可以用一个实现了Queur接口的类表示
注:实际上,java类库并没有名为CircuarArrayQueue和linkedListQueue的类。这里只是以这些类作为示例来解释集合接口与实现在概念上的区分。
//循环数组实现 public class CircularArrayQueueimplements Queue { private int head; //头 private int tail; //尾 CirularArrayQueue(int capacity){....} public void add(E element){....} public E remove(){....} public int size(){....} private E[] elements; }
//使用链表实现 public class linkedListQueueimplements Queue { private link head; //头 private link tail; //尾 linkedListQueue(){...} public void add(E element){...} public E remove(){...} public int size(){...} }
当在程序中使用队列时,一旦已经构造了集合,就不需要知道究竟使用了那种实现。因此,只有在构造集合对象时,才会使用具体的类。
接口本身并不能说明那种实现的效率究竟如何。循环数组要比链表更高效,因此多数人优先选择了循环数组。不过,通常来讲,这样做也需要付出一定代价。
循环数组是一个有界集合,即容量有限。如果程序中要收集的对象数量没有上线,就最好使用链表来实现。
集合接口:
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)