java数据结构

主要分为实现Collection的集合类和实现Map接口的键值对。

Collection家族的主要成员:

  • ArrayList:
    • 大多的java应用都是用数据结构存储数据然后传递最后解析的过程,因此ArrayList是一个较多的选择。
    • ArraylList的实现就是一个数组,以Array.copy的方式来扩增数组长度。
    • 指定index的读取是优势,插入和删除都会涉及数组的copy是劣势
  • LinkedList:
    • 双向链表
    • 插入和删除只需要遍历链表是优势,随机读取(即get(i))是劣势
    • 遍历链表应该用迭代器,但是在迭代过程中不能改变链表的长度,否则会抛出ConCurrentModificationException
    • 1.5后的LinkedList实现Queue接口,若遍历时需要改变队列长度,可用队列poll的方式遍历
  • Set:
    • 用Map实现,即值都存储在Map的Key中
    • HashSet不保证写入Set的顺序,TreeSet可保证,他们都用对应的Map实现
  • Vector、Stack:
    • 实现和ArrayList一样,区别仅为方法均为同步
    • Stack为Vector的子类,提供了栈的操作而已

 

Map家族的主要成员:

  • HashMap:
    • HashMap的数据结构应该是多个单项链表形成的数组,每个链表中存储Map.Entry对象,一个链表中所有Entry的key值的hash值相同
    • put Entry的时候,通过Key的hash值再对当前数组的长度取模,最终确定Entry放置的链表,然后讲Entry插入到链表表头
    • 遍历时是不保证顺序的,用迭代器遍历entrySet和keySet均可
    • 由初始容量(inital_capacity,默认16),加载因子(load_factor,默认0.75),来控制容器的大小,如默认的情况:16*0.75=12,即当entry为12 时增加数组长度为原来的2倍
    • 读写迅速
  • TreeMap:
    • 可保证顺序,需遍历
    • 红黑树实现

posted on 2011-11-24 16:34  死写代码的  阅读(419)  评论(0)    收藏  举报

导航