Java集合类详解

总览

Collection
Map

Colleciton接口

Set和List:继承Collection

  • Set和List对比:
    • Set:检索元素效率低下,删除和插入效率高,插入和删除不会引起元素位置改变。
    • List:和数组类似,List可以动态增长,查找元素效率高,插入删除元素效率低,因为会引起其他元素位置改变。
  • Set和List具体子类:
    • Set
      • HashSet:以哈希表的形式存放元素,插入删除速度很快。
    • List
      • ArrayList:动态数组
      • LinkedList:链表、队列、堆栈。
    • Linked 改快读慢
    • Array 读快改慢
    • Hash 两者之间

Map接口

  • 说明:Map 接口不是 Collection 接口的继承。而是从自己的用于维护键-值关联的接口层次结构入手。按定义,Map接口储存一组成对的键-值对象,提供key(键)到value(值)的映射,Map中的key不要求有序,不允许重复。value同样不要求有序,但可以重复。
  • 我们可以把这个接口方法分成三组操作:改变、查询和提供可选视图。
  • 改变操作允许您从映射中添加和除去键-值对。键和值都可以为 null。但是,您不能把Map 作为一个键或值添加给自身。
1
2
3
4
Object put(Object key, Object value)//将指定的值与此映射中的指定键关联,返回值是被替换的值。
Object remove(Object key)//如果存在一个键的映射关系,则将其从此映射中移除
void putAll(Map mapping)//从指定映射中将所有映射关系复制到此映射中
void clear()// 从此映射中移除所有映射关系
  • 查询操作允许您检查映射内容:
1
2
3
4
5
Object get(Object key)//返回指定键所映射的值;如果此映射不包含该键的映射关系,则返回 null
boolean containsKey(Object key)//如果此映射包含指定键的映射关系,则返回 true
boolean containsValue(Object value)//如果此映射将一个或多个键映射到指定值,则返回 true。
int size()//返回此映射中的键-值映射关系数。
boolean isEmpty()//如果此映射未包含键-值映射关系,则返回 true。
  • 最后一组方法允许您把键或值的组作为集合来处理。
1
2
3
public Set keySet()//映射中键的集合必须是唯一的
public Collection values()//映射中值的集合可能不唯一
public Set entrySet()//返回一个实现 Map.Entry 接口的元素 Set
  • HashMap 类和 TreeMap 类
    • 在Map 中插入、删除和定位元素,HashMap 是最好的选择。
    • 但如果您要按顺序遍历键,那么TreeMap 会更好。