码迷,mamicode.com
首页 > 其他好文 > 详细

查询表

时间:2016-02-19 22:06:38      阅读:278      评论:0      收藏:0      [点我收藏+]

标签:

1.Map接口
  Map接口定义的集合又称查找表,用于存储所谓"Key-Value"映射对。
    Key可以看成是Value的索引,作为Key的对象在集合中不可以重复。
  根据内部数据结构的不同,Map接口有多种实现类,
    其中常用的有内部为hash表实现的HashMap和内部为排序 二叉树实现的TreeMap。
2.put()方法
  Map接口中定义了向Map中存放元素的put方法:
    V put(K key,V value)
  将Key-Value对存入Map,如果在集合中已经包含该Key,则操作将替换该Key所对应的Value,
    返回值为该Key原来所对应的Value(如果没有则返回null)。
3.get()方法
  Map接口中定义了从Map中获取元素的get方法:
    V get(Object key)
  返回参数key所对应的Value对象,如果不存在则返回null.
4.containsKey()方法
  Map接口中定义了判断某个key是否在Map中存在:
    boolean containsKey(Object key);
    若Map中包含给定的key则返回true,否则返回false。
5.Hash表的原理 (如图)

6.hashCode方法
  从HashMap的原理中我们可以看到,key的hashCode()方法的返回值对HashMap存储元素时会起着很重要的作用。
    而hashCode()方法实际上是在Object中定义的。那么应当妥善重写该方法:
  对于重写了equals方法的对象,一般要妥善的重写继承自Object类的hashCode()方法
    (Object提供的hashCode方法将返回该对象所在内存地址的整数形式).
  重写hashCode方法是需要注意两点:
    其一、与equals方法的一致性,即equals比较返回true的两个对象其hashCode方法返回值应该相同;
    其二、hashCode返回的数值符合hash算法的要求,
    试想如果有很多对象的hashCode方法返回值都相同,则会大大降低hash表的效率,
    一般情况下可以使用IDE(如Eclipse)提供的工具自动生成hashCode方法。
7.装载因子及HashMap优化
  Capacity:容量,hash表里bucket(桶)的数量,也就是散列数组大小。
  Initial capacity:初始容量,创建hash表时,初始bucket的数量,默认构建容量是16,也可以使用特定容量。
  Size:大小,当前散列表中存储数据的数量。
  Load factor:加载因子,默认值0.75(就是75%),当向散列表增加数据时如果size/capacity的值大于Load factor则发生扩容并且重新散列(rehash)。
  性能优化:加载因子较小时,散列查找性能会提高,同时也浪费了散列桶空间容量。
    0.75是性能和空间相对平衡结果。在创建散列表时指定合理容量,减少rehash提高性能。
8.使用Keyset()方法
  Map提供了三种遍历方式:
    遍历所有的Key
    遍历所有的Key-Value对
    遍历所有的Value(不常用)
  遍历所有Key的方法
    Set<K> keySet()
    该方法会将当前Map中所有的key存入一个Set集合后返回。
9.使用entryset()方法
  遍历所有的键值对的方法:
    Set<Entry<K,V>> entrySet()
    该方法会将当前Map中每一组key-value对封装为一个Entry对象并存入一个Set集合后返回。
10.LinkedHashMap实现有序Map
  使用Map接口的哈希表和链表实现,具有可预知的迭代顺序。此实现与HashMap的不同之处在于:
    LinkedHashMap维护着一个双向循环链表。此链表定义了迭代顺序,该迭代顺序通常就是存放元素的顺序。
  需要注意的是,如果在Map中重新存入已有的key,那么key的位置不会发生改变,只是将value值替换。

查询表

标签:

原文地址:http://www.cnblogs.com/Crow0/p/5202192.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!