版权声明:本文为博主原创文章,转载请在文章开头注明出处,谢谢. https://blog.csdn.net/Darry_R/article/details/78915420 </div>
<link rel="stylesheet" href="https://csdnimg.cn/release/phoenix/template/css/ck_htmledit_views-d7e2a68c7c.css">
<div class="htmledit_views" id="content_views">
Map是java中的接口,Map.Entry是Map的一个内部接口。
Map提供了一些常用方法,如keySet()、entrySet()等方法,keySet()方法返回值是Map中key值的集合;entrySet()的返回值也是返回一个Set集合,此集合的类型为Map.Entry。
Map.Entry是Map声明的一个内部接口,此接口为泛型,定义为Entry<K,V>。它表示Map中的一个实体(一个key-value对)。接口中有getKey(),getValue方法。
下面是遍历Map的四种方法:
- public static void main(String[] args) {
- Map<String, String> map = new HashMap<String, String>();
- map.put("1", "value1");
- map.put("2", "value2");
- map.put("3", "value3");
- //第一种:普遍使用,二次取值
- System.out.println("通过Map.keySet遍历key和value:");
- for (String key : map.keySet()) {
- System.out.println("key= "+ key + " and value= " + map.get(key));
- }
- //第二种
- System.out.println("通过Map.entrySet使用iterator遍历key和value:");
- Iterator<Map.Entry<String, String>> it = map.entrySet().iterator();
- while (it.hasNext()) {
- Map.Entry<String, String> entry = it.next();
- System.out.println("key= " + entry.getKey() + " and value= " + entry.getValue());
- }
- //第三种:推荐,尤其是容量大时
- System.out.println("通过Map.entrySet遍历key和value");
- for (Map.Entry<String, String> entry : map.entrySet()) {
- System.out.println("key= " + entry.getKey() + " and value= " + entry.getValue());
- }
- //第四种
- System.out.println("通过Map.values()遍历所有的value,但不能遍历key");
- for (String v : map.values()) {
- System.out.println("value= " + v);
- }
- }
首先HashMap的底层实现用的时候一个Entry数组
- java] view plain copy
- <pre name="code" class="java"> /**
- * The table, resized as necessary. Length MUST Always be a power of two.
- */
- transient Entry[] table; //声明了一个数组
- ........
- public HashMap() {
- this.loadFactor = DEFAULT_LOAD_FACTOR;
- threshold = (int)(DEFAULT_INITIAL_CAPACITY * DEFAULT_LOAD_FACTOR);
- table = new Entry[DEFAULT_INITIAL_CAPACITY];//初始化数组的大小为DEFAULT_INITIAL_CAPACITY(这里是16)
- init();
- }</pre><br>
再来看一下Entry是在什么地方定义的,继续上源码,我们在HashMap的源码中发现了它的定义,原来他是HashMap的一个内部类,并且实现了Map.Entry接口,
- static class Entry<K,V> implements Map.Entry<K,V> {
- final K key;
- V value;
- Entry<K,V> next;
- final int hash;
- /**
- * Creates new entry.
- */
- Entry(int h, K k, V v, Entry<K,V> n) {
- value = v;
- next = n;
- key = k;
- hash = h;
- }
- public final K getKey() {
- return key;
- }
- public final V getValue() {
- return value;
- }
- public final V setValue(V newValue) {
- V oldValue = value;
- value = newValue;
- return oldValue;
- }
- public final boolean equals(Object o) {
- if (!(o instanceof Map.Entry))
- return false;
- Map.Entry e = (Map.Entry)o;
- Object k1 = getKey();
- Object k2 = e.getKey();
- if (k1 == k2 || (k1 != null && k1.equals(k2))) {
- Object v1 = getValue();
- Object v2 = e.getValue();
- if (v1 == v2 || (v1 != null && v1.equals(v2)))
- return true;
- }
- return false;
- }
- public final int hashCode() {
- return (key==null ? 0 : key.hashCode()) ^
- (value==null ? 0 : value.hashCode());
- }
- public final String toString() {
- return getKey() + "=" + getValue();
- }
- /**
- * This method is invoked whenever the value in an entry is
- * overwritten by an invocation of put(k,v) for a key k that's already
- * in the HashMap.
- */
- void recordAccess(HashMap<K,V> m) {
- }
- /**
- * This method is invoked whenever the entry is
- * removed from the table.
- */
- void recordRemoval(HashMap<K,V> m) {
- }
Map接口不是Collection接口的继承。Map接口用于维护键/值对(key/value pairs)。该接口描述了从不重复的键到值的映射。
Map提供了一些常用方法,如keySet()、entrySet()等方法,keySet()方法返回值是Map中key值的集合;entrySet()的返回值也是返回一个Set集合,此集合的类型为Map.Entry。
下面看如下的遍历代码
- [java] view plain copy
- 1. Map map = new HashMap();
- Irerator iterator = map.entrySet().iterator();
- while(iterator.hasNext()) {
- Map.Entry entry = iterator.next();
- Object key = entry.getKey();
- //
- }
- 2.Map map = new HashMap();
- Set keySet= map.keySet();
- Irerator iterator = keySet.iterator;
- while(iterator.hasNext()) {
- Object key = iterator.next();
- Object value = map.get(key);
- //
- }
- 另外,还有一种遍历方法是,单纯的遍历value值,Map有一个values方法,返回的是value的Collection集合。通过遍历collection也可以遍历value,如
- [java] view plain copy
- Map map = new HashMap();
- Collection c = map.values();
- Iterator iterator = c.iterator();
- while(iterator.hasNext()) {
- Object value = iterator.next();
还是要声明下:本文仅供参考,欢迎转载分享交流.(其中部分内容摘自其他博主.)
生活不只有Coding!
版权声明:本文为博主原创文章,转载请在文章开头注明出处,谢谢. https://blog.csdn.net/Darry_R/article/details/78915420 </div>
<link rel="stylesheet" href="https://csdnimg.cn/release/phoenix/template/css/ck_htmledit_views-d7e2a68c7c.css">
<div class="htmledit_views" id="content_views">