集合的学习(一)

集合的学习(一),第1张

集合的学习(一)

关于集合
  • 一、集合简介
  • 二、集合框架

一、集合简介

   在正常实现方法或者关注性能时,你选择的不同的数据结构会带来很大的差异。 在大学的计算机科学课程中,有一门数据结构课程 ,通常要讲授一个学期。下面仅仅记录一下标准库中的集合函数。
集合的特点:
  集合用来存储不同类型的对象(基本数据类型除外),存储长度可变。
  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 CircularArrayQueue implements 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 linkedListQueue implements Queue{
  private link head; //头
  private link tail; //尾
 
  linkedListQueue(){...}
  public void add(E element){...}
  public E remove(){...}
  public int size(){...}
}

   当在程序中使用队列时,一旦已经构造了集合,就不需要知道究竟使用了那种实现。因此,只有在构造集合对象时,才会使用具体的类。
   接口本身并不能说明那种实现的效率究竟如何。循环数组要比链表更高效,因此多数人优先选择了循环数组。不过,通常来讲,这样做也需要付出一定代价。
   循环数组是一个有界集合,即容量有限。如果程序中要收集的对象数量没有上线,就最好使用链表来实现。

集合接口:

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5660980.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存