Java学习笔记-集合

2016年12月29日

Java学习笔记-集合

Note:参阅书籍《Core Java,Volume I:Fundamentals》

集合框架-Collection Framework

集合的接口-interface

interface

  • 集合有两个基本的接口:CollectionMap
  • Iterator 迭代器接口;
  • RandomAccess ,这个接口没有任何方法,但可以检测一个特定的集合是否支持高效的随机访问;

集合框架中的类-class

class

具体的集合类

collection

ArrayList && LinkedList

  • List接口用于描述一个有序集合。
  • ArrayList 基于动态数组实现。扩容:计算新的容量大小,为当前容量的1.5倍 (oldCapacity * 3) / 2 + 1;
  • LinkedList 基于双链表实现。
  • 两者的比较:
    • 基于时间: 当主要是查找操作(get)时应使用ArrayList;当主要是插入、删除(insert,remove)操作时应使用LinkedList.
    • 基于空间: 当线性表的长度变化比较大时,应使用LinkedList;由于链式存储结构(LinkedList)使用了额外的存储空间来表示数据元素之间的逻辑关系,所以当线性表数据元素结构简单,长度变化不大时可以考虑采用顺序存储结构(ArrayList)。

HashSet 散列集

  • HassCode: 散列表为所有的对象计算一个整数,称为散列码。
  • 自己定义的hashCode方法应该与equals方法兼容,即a.equals(b)为true,则a与b必须要有相同的散列码。但反之不成立。
  • 散列表用链表数组实现,每个列表被称为桶(bucket),要想查找表中对象的位置,就要先计算它的散列码,然后与桶的总数取余,所得到的结果就是这个元素的桶的索引。
  • 装填因子(load factor,默认值0.75)决定何时对散列表进行再散列(rehashed).
  • HashSet是一个没有重复元素的元素集合。

hash

TreeSet 树集

  • 树集是一个有序集合,可以以任意顺序将元素插入到集合中,在对集合遍历时,每个元素将按照排序后的顺序呈现。
  • 将一个元素添加到树中要比添加到散列表中慢,但与将元素添加到数组、链表中的正确位置要快的多。
  • 可以通过将Comparator对象传递到TreeSet构造器中来使用不同的比较方法。

Map 映射表

遗留的集合类

left