java.util 最常用的集合类之一是Map ,map提供了一个通用的元素存储方法。 Map 集合类用于存储元素对(称作“键”和“值”),其中每个键映射到一个值。常用到的有hashmap和hashtable。
[@more@]Map 的接口和方法
覆盖的方法。 我们将这 Object 的这两个方法覆盖,以正确比较 Map 对象的等价性。
equals(Object o) | 比较指定对象与此 Map 的等价性 |
hashCode() | 返回此 Map 的哈希码 |
其他方法
clear() | 从 Map 中删除所有映射 |
remove(Object key) | 从 Map 中删除键和关联的值 |
put(Object key, Object value) | 将指定值与指定键相关联 |
clear() | 从 Map 中删除所有映射 |
putAll(Map t) | 将指定 Map 中的所有映射复制到此 map |
如果我们使用putAll,则map可以自动扩展大小。如果使用put,建议在创建map的时候使用loadfactor自动扩展以提高效率。
查看 Map
访问元素
检索有关 Map 内容的信息但不更改 Map 内容。
get(Object key) | 返回与指定键关联的值 |
containsKey(Object key) | 如果 Map 包含指定键的映射,则返回 true |
containsValue(Object value) | 如果此 Map 将一个或多个键映射到指定值,则返回 true |
isEmpty() | 如果 Map 不包含键-值映射,则返回 true |
size() | 返回 Map 中的键-值映射的数目 |
key唯一但是value不一定唯一,所以使用containsValue的时候可能效率会较低。
hash技术
int hashvalue = (key.hashCode() & 0x7FFFFFFF) % table.length;
需要考虑和处理hash collision,如果是使用已有的则不需要考虑,如果自己实现hashmap,
则需要考虑和处理对应的case。
效率问题:之前使用的时候简单创建,基本上都没有初始化大小和负载因子,现在看了一下
jdk的help才发现有这两个参数可以在很多时候提高性能。
在创建map的时候建议使用
Map userMap = new HashMap();
来替代
HashMap userMap = new HashMap();
这也符合设计模式或者面向对象的理论,只要实现了相同的接口和方法
只需要在这个创建的地方修改,使用不同的类来创建,其他的调用代码则无须修改。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。