Map,HashMap
Map(映射),又称为字典(Dictionary),是由关键字(Key)及其对应的元素值(Value)所组成的元素单元(Element)的表单式集合。 通常,对于Map而言,使用给定的Key,可以迅速地从单元集合中检索到相应的元素。因此,在需要对大量数据进行查找操作而查找的性能又占据重要地位的场合,Map无疑是一种较理想的容器。
HashMap:基于哈希表的 Map 接口的实现。此实现提供所有可选的映射操作,此类不保证映射的顺序,特别是它不保证顺序恒久不变。
(一)
下面有一段代码:
上述代码利用HashMap的put方法往映射中添加对象,第一个添加的对象的key是“a”,其对应元素值为"zhangsan"。
因为HashMap不保证顺序,所以输出来的顺序和添加进去的顺序不一定相等。
(二)如果再把一个key值一样的对象插进去会怎么样?
代码:
可见,后插入的键值一样的元素值会把之前的元素值替换掉。
(三)既然HashMap的查找性能高,那么如何体现呢?
代码:
上述代码,通过get()方法搜索key值为b和d的元素,以为key值为b对应的元素值为lisi,所以返回元素值
而key值为d的对象并没有在该HashMap中,所以返回null。
那么反过来,使元素值一样,key不一样的两个对象插入到HashMap中:
可以看出, value值相等,key不同,同样可以放到HashMap中。
(四)
Map里有一个keyset()方法,返回key的集合,Map中的Key是不能够重复的,可以推断出keySet()方法的返回类型是Set;
Map里还有一个values()方法,返回Map中的元素的值,因为元素值可以重复,所以values()方法返回类型是Collection。
所以我们可以通过keySet()方法的返回的Set集合,再调用它的一个迭代器来遍历HashMap内的元素。代码:
输出结果:
a=aa
c=dd
e=ee
b=bb
d=dd
不保证输出顺序。
(五)遍历HashMap的第二种方式
利用Map的内部类Entry来获得key的集合,然后调用entry的getkey()方法和getValue()方法,分别得到map中的key和value
(五)HashSet底层是使用HashMap实现的,当使用add方法将对象添加到Set当中时,实际上是将该对象作为底层所维护的Map对象的key,而value则都是同一个Object对象,这个Object对象实际上我们是用不上的。而Map对象的底层是一个一个Entry对象组成。
(六)当向HashMap中put一对键值时,它会根据key的hashCode值计算出一个位置,该位置即使此对象准备往数组中存放的位置。
如果计算出的位置没有对象存在,就把此对象放在那个位置,如果该位置已经存在对象,则顺着该位置的对象的链开始寻找(Entry类有一个Entry类型的next成员变量,指向该对象的下一个对象),不断地调用equals方法跟链上的对象进行比较,如果链上的对象与这个要插入的对象的equals方法都返回false,则把这个对象插入到该位置的最前面,并且指向原来链上的第一个Entry对象。
如图:
Map,HashMap的更多相关文章
- 【转】java 容器类使用 Collection,Map,HashMap,hashTable,TreeMap,List,Vector,ArrayList的区别
原文网址:http://www.360doc.com/content/15/0427/22/1709014_466468021.shtml java 容器类使用 Collection,Map,Hash ...
- (10)集合之双列集合Map,HashMap,TreeMap
Map中的元素是两个对象,一个对象作为键,一个对象作为值.键不可以重复,但是值可以重复. 看顶层共性方法找子类特有对象. Map与Collection在集合框架中属并列存在 Map存储的是键值对 Ma ...
- Map,HashMap,TreeMap
一.HashMap,TreeMap差别 1.两种常规Map性能 HashMap:适用于在Map中插入.删除和定位元素. Treemap:适用于按自然顺序或自定义顺序遍历键(key). 2.总结 Has ...
- Map,HashMap,LinkedHashMap,TreeMap比较和理解
/* * 获取功能: * V get(Object key):根据键获取值 * Set<K> keySet():获取集合中所有键的集合 * Collection<V> valu ...
- Map,Hashmap,LinkedHashMap,Hashtable,TreeMap
java为数据结构中的映射定义了一个接口java.util.Map;它有四个实现类,分别是HashMap Hashtable LinkedHashMap 和TreeMap. Map主要用于存储健值对, ...
- Map,HashMap五种遍历方法
假设有数组 HashMap<Integer, String> h=new HashMap<Integer,String>(); h.put( ...
- [剑指offer] 50. 第一个只出现一次的字符 + map,hashmap 及其区别
class Solution { public: int FirstNotRepeatingChar(string str) { map<char,int>mp; ;i<str.si ...
- Map接口,Map.Entry,hashMap类,TreeMap类,WeakHashMap。
Collection接口之前接触过,每次保存的对象是一个对象,但是在map中保存的是一对对象,是以key->value形式保存的. 定义: public interface Map<K,V ...
- Java中List,ArrayList、Vector,map,HashTable,HashMap区别用法
Java中List,ArrayList.Vector,map,HashTable,HashMap区别用法 标签: vectorhashmaplistjavaiteratorinteger ArrayL ...
随机推荐
- HttpWebRequest访问时,错误:(401)未经授权。
HttpWebRequest访问时,错误:(401)未经授权. 某网页,我不想做登录界面,直接使用域的帐号密码来访问.如果网站设置成Window身份验证,单独的页面都没问题,而是通过使用HttpWeb ...
- Could not find action or result
[WARN ] 2013-11-21 14:08:16 :Could not find action or resultThere is no Action mapped for namespace ...
- spring HibernateValidator 验证 子类不起作用
spring HibernateValidator 验证 子类不起作用,在要验证的子类前加上@Valid即可. public class UserInfo { private int Id; @Val ...
- List<string>里 每个元素重复了多少次
List<string>里 每个元素重复了多少次 static void Main(string[] args) { List<string> list = new List& ...
- iosiOS 地图 自定义以及添加锚点
- (void)clickLongPress:(UILongPressGestureRecognizer *)longPress { CGPoint point = [longPress locati ...
- JDBC链接MySQL和Oracle
import java.sql.*; JDBC中所要用的包几乎都在import?java.sql.*;中: 在项目中导入Oracel或者是MySQL包和装载驱动: 项目的Cla ...
- ansible 访问内网服务器
ssh https://medium.com/@paulskarseth/ansible-bastion-host-proxycommand-e6946c945d30#.rauzlfv0z http: ...
- CSS3 圆形时钟式网页进度条
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- GUI异步编程之BackgroundWorker类
GUI编程中,经常需要另建一个线程,在后台运行以完成某项工作,并不时地与界面主线程进行通信,以改变界面显示.BackgroundWorker类为此而生. BackgroundWorker类的主要成员: ...
- Java调第三方的webservice接口
1.eclipse中add dynamic web project 2.选中项目右键new——> webservice ——> webservice client 在service def ...