2006-8-15 集合类 数据结构

1 LinkedList

n       LinkedList是采用双向循环链表实现的。

n       利用LinkedList实现栈(stack)、队列(queue)、双向队列(double-ended queue )

2 数据结构

一般将数据结构分为两大类:线性数据结构和非线性数据结构。线性数据结构有线性表、栈、队列、串、数组和文件;非线性数据结构有树和图。

3 线性表

n       线性表的逻辑结构是n个数据元素的有限序列:

              (a1, a2 ,a3,…an)

n为线性表的长度(n0)n=0的表称为空表。

n       数据元素呈线性关系。必存在唯一的称为第一个的数据元素;必存在唯一的称为最后一个的数据元素;除第一个元素外,每个元素都有且只有一个前驱元素; 除最后一个元素外,每个元素都有且只有一个后继元素。

n       所有数据元素在同一个线性表中必须是相同的数据类型。

n       线性表按其存储结构可分为顺序表和链表。用顺序存储结构存储的线性表称为顺序表;用链式存储结构存储的线性表称为链表

n       将线性表中的数据元素依次存放在某个存储区域中,所形成的表称为顺序表一维数组就是用顺序方式存储的线性表。

4、栈

n       (Stack)也是一种特殊的线性表,是一种后进先出(LIFO)的结构。

n       栈是限定仅在表尾进行插入和删除运算的线性表,表尾称为栈顶(top),表头称为栈底(bottom)

n       栈的物理存储可以用顺序存储结构,也可以用链式存储结构

n       Java中虽然提供了Stack集合类,但由于它继承至Vector,所以提供了不安全的elementAt()方法,所以不推荐大家使用,建议自己利用LinkedList来实现Stack功能。

5 队列

n       队列(Queue)是限定所有的插入只能在表的一端进行,而所有的删除都在表的另一端进行的线性表。

n       表中允许插入的一端称为队尾(Rear),允许删除的一端称为队头(Front)

n       队列的操作是按先进先出(FIFO)的原则进行的。

n       队列的物理存储可以用顺序存储结构,也可以用链式存储结构。

6 ArrayListLinkedList的比较

n       ArrayList底层采用数组完成,而LinkedList则是以一般的双向链表(double-linked list)完成,其内每个对象除了数据本身外,还有两个引用,分别指向前一个元素和后一个元素。

n       如果我们经常在List的开始处增加元素,或者在List中进行插入和删除操作,我们应该使用LinkedList,否则的话,使用ArrayList将更加快速,尤其随机的访问操作。

7 HashSet

n       实现Set接口的hash table(哈希表),依靠HashMap来实现的。HashSet没有提供get(),需要通过Iterator来实现。

n       我们应该为要存放到散列表的各个对象定义hashCode()equals()(切记不要忘记重写equals()方法)。

n       HashSet中存放的对象的位置与加入的先后顺序无关。且同一个对象在HashSet中只能有一个,哈希函数利用hashCode来计算对象的散列位置。

8 散列表

n       散列表又称为哈希表。散列表算法的基本思想是:

    以结点的关键字为自变量,通过一定的函数关系(散列函数)计算出对应的函数值,以这个值作为该结点存储在散列表中的地址。

n       当散列表中的元素存放太满,就必须进行再散列,将产生一个新的散列表,所有元素存放到新的散列表中,原先的散列表将被删除。在Java语言中,通过负载因子(load factor)来决定何时对散列表进行再散列。例如:如果负载因子是0.75,当散列表中已经有75%的位置已经放满,那么将进行再散列。

n       负载因子越高(越接近1.0),内存的使用效率越高,元素的寻找时间越长。负载因子越低(越接近0.0),元素的寻找时间越短,内存浪费越多。

n       HashSet类的缺省负载因子是0.75

9TreeSet

n       TreeSet是依靠TreeMap来实现的。

n       TreeSet是一个有序集合,TreeSet中元素将按照升序排列,缺省是按照自然顺序进行排列,意味着TreeSet中元素要实现Comparable接口。

n       我们可以在构造TreeSet对象时,传递实现了Comparator接口的比较器对象。

10HashSetTreeSet的比较

HashSet是基于Hash算法实现的,其性能通常都优于TreeSet。我们通常都应该使用HashSet,在我们需要排序的功能时,我们才使用TreeSet

11HashMap

n       HashMapkey进行散列。

n       keySet()values()entrySet()

12TreeMap

n       TreeMap按照key进行排序。

13HashMapTreeMap的区别

Set类似,HashMap的速度通常都比TreeMap快,只有在需要排序的功能的时候,才使用TreeMap

14Java1.0/1.1的集合类

n       Vector:用ArrayList代替Vector

n       Hashtable:用HashMap代替Hashtable

n       Satck:用LinkedList代替Stack

n       Properties

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值