`
xiaomogui
  • 浏览: 238556 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Think in java4笔记 --- 容器之集合(历史)

阅读更多

        当我们编写程序时,通常并不能确切地知道最终需要多少个对象。有些时候甚至想用更复杂的方式来保存对象。为解决这个问题,Java 提供了四种类型的“集合类”:Vector(矢量)、BitSet(位集)、Stack(堆栈)以及Hashtable(散列表)。

       Stack 实现了一个 LIFO(后进先出)序列,而 Hashtable 是一种“关联数组”,允许我们将任何对象关联起来。除此以外,所有Java 集合类都能自动改变自身的大小。

       缺点:类型未知 使用Java 集合的“缺点”是在将对象置入一个集合时丢失了类型信息。由于类型信息不复存在,所以集合能肯定的唯一事情就是自己容纳的是指向一个对象的句柄。

      Vector是同步的,线程安全的,当元素超过Vector的初始大小时,Vector的容量会翻倍。Vector类似数组顺序数据结构。

      Hashtable的方法是同步的,提供key到value的映射,任何作为key的对象都必须实现hashCode和equals方 法。hashCode和equals方法继承自根类Object,如果两个对象相同,即obj1.equals(obj2)=true,则它们的hashCode必须相同,但如果两个对象不同,则它们的hashCode不一定不同,如果两个不同对象的hashCode相同,这种现象称为冲突,冲突会导致操作哈希表的时间开销增大,所以尽量定义好的hashCode()方法,能加快哈希 表的操作。

      BitSet实际是由“二进制位”构成的一个 Vector。如果希望高效率地保存大量“开-关”信息,就应使用
BitSet。它只有从尺寸的角度看才有意义;如果希望的高效率的访问,那么它的速度会比使用一些固有类型
的数组慢一些。
此外,BitSet的最小长度是一个长整数(Long)的长度:64 位。这意味着假如我们准备保存比这更小的数
据,如8 位数据,那么BitSet就显得浪费了。 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics