HashMap中 keySet方法实现过程中只是new了keySet对象,它是如何获得Map的key的set集合的?

Setset=map.keySet();

public Set keySet() {
Set ks = keySet;
return (ks != null ? ks : (keySet = new KeySet()));
}

private final class KeySet extends AbstractSet<K> {
    public Iterator<K> iterator() {
        return newKeyIterator();
    }
    public int size() {
        return size;
    }
    public boolean contains(Object o) {
        return containsKey(o);
    }
    public boolean remove(Object o) {
        return HashMap.this.removeEntryForKey(o) != null;
    }
    public void clear() {
        HashMap.this.clear();
    }
}

看HashMap的源码中,keySet()方法,源码就是new了一个keySet也没有执行代码呀,是如何获得map中的key的set集合的?

0

1个回答

HashMap.KeySet 实现了Collection这个接口, 代码是

public Iterator<K> iterator() {
        return newKeyIterator();
}

所以,keySet()这个方法不会立即返回所有的key,而是当你迭代的时候才会去读取...

0
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
java集合之map中keySet方法
今天用到了map中keySet方法,出现了一个错误,记录下来。 出现错误原因:没有注意到map中keySet方法返回的是一个Set集合镜像,所以在修改该Set集合镜像时,map中所对应的键值对也会相应的被修改。 HashMap中keySet方法源码: 测试类: import java.util.HashMap; import java.util.Iterator; import j
hashmap的keyset方法为什么不是空?
我看了源代码,发现hashmap的keyset()方法调用了一个内部类,按正常逻辑应该返回空的呀,为什么会有值呢?
JAVA基础知识——从Map中获得Key集合及Value集合
有时,我们想获得Map中所有Key值集合。有时,我们又需要提取出Map中所有value的值。 很简单,就用两个Map自带的方法即可轻松实现:Set Map.keySet():获得Map中所有Key的集合; Collection Map.values() : 获得Map中所有value的集合;
hashMap用对象作为key
@Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + ((customerSiteId == null) ? 0 : customerSiteId.hashCode()); result = prime * result ...
如何得到hashmap的key?
hashmap里提供了get方法可以通过key得到value,但我想得到key应该怎么做?(不是通过value取key,而是直接得到key)
HashMap使用对象作为key实现
HashMap在使用可变对象作为key是一件很危险的事情 我们开始一个简单的实例 class People{ private String name; private int age; public People(){ } public People(String name, int age) { this.name = name; ...
如何根据HashMap的value获得KEY?
请教
如何获得Map hashMap = new HashMap();Object中的值
代码如下:rnMap hashMap = new HashMap();rn hashMap.put("ids", request.getParameterValues("ids"));rn跪求rn怎么获得id的值呀?
如何删除map中的key
if (wxqjxxTempMap != null) { Iterator iterator = wxqjxxTempMap.keySet().iterator(); while (iterator.hasNext()) { String key = (String) iterator.next(); if (temp.getTcxWx...
请问,如何取得HashMap对象的key
请问,如何取得HashMap对象的key。rn请注意哦!我问的可不是简单的HashMap对象.get("key");rn举例:rnHashMap hash = new HashMap();rnhash.put("A","");rnrn我现在文的是如何取出这个Key键--Arnrn我在线等,第一个答对者得分。马上揭帖!!!rn不慎感激!!!!
map如何通过value获得key吗
如题~!
求助,如何获得Google Map API key?
在dos命令下输入D:\Java\jdk1.6.0_21\bin>keytool -list -alias androiddebugkey -keystore "C:\Documents and Settings\Administrator\.android\debug.keystore" -storepass android -keypass android命令,结果显示keytool错误:java.lang.Exception:Keystore 文件不存在:C:\Documents and Settings\Administrator\.android\debug.keystore,我的debug.keystore确实在C:\Documents and Settings\Administrator\.android,很奇怪,不知道为什么显示不存在,求大虾帮忙?谢谢!
Map map = new HashMap();
这句话提示错误:HashMap cannot be resolved to atype;怎样解决?求大神。
HashMap中如何得到keyset的
看了HashMap的源码后知道是new KeySet(),但是entry中的key是如何被add到这个keyset中的,请大神请教rn public Set keySet() rn Set ks = keySet;rn return (ks != null ? ks : (keySet = new KeySet()));rn rnrn private final class KeySet extends AbstractSet rn public Iterator iterator() rn return newKeyIterator();rn rn public int size() rn return size;rn rn public boolean contains(Object o) rn return containsKey(o);rn rn public boolean remove(Object o) rn return HashMap.this.removeEntryForKey(o) != null;rn rn public void clear() rn HashMap.this.clear();rn rn
Map中的HashMap集合
Map集合:键值对对应的双链集合,分为:HashMap集合, Hashtable集合,TreeMap集合。 HashMap集合:采用接口多态的方式来创建对象。 HashMap集合的方法:添加功能: hashMap.put(); 特点:第一次添加的数据返回的是Null值;而后面添加键相同的数据的时候会发生键相同值覆盖的现象!HashMap的输入顺序与输入顺序是没有关系的即无序的。 程序
hashmap如何修改Key的大小写
如果一个hashMap,它的Key默认都是小写,现在有一个Key包含了大写字母,要将这个Key改为小写,怎么办?(将key里面的小写改为大写,自行类比)创建一个如题的map,代码:HashMap&amp;lt;String, String&amp;gt; map = new HashMap&amp;lt;String, String&amp;gt;(); map.put(&quot;name&quot;, &quot;jack&quot;); map.put(&quot;a...
遍历中修改HashMap的Key
一、不可变对象 1.1 什么是不可变对象 immutable Objects就是那些一旦被创建,它们的状态就不能被改变的Objects,每次对他们的改变都是产生了新的immutable的对象,而mutable Objects就是那些创建后,状态可以被改变的Objects。 不可变的优势: (1)提高效率。如果你知道一个对象是不可变的,那么需要拷贝这个对象的内容时,就不用复制它的本身而只...
HashMap中按key排序
今天面试,碰到一问题,觉得挺有意思的,记录下来。 以下代码,print方法输出的是key的集合:[1, 20, 3, 9],现在print2方法要实现以下功能,将map中的key-value按以下方式打印出来: 1----v1 3----v3 9----v9 20----v20 其中,map中的key是String类型的,但都是自然数,也即key为:"1"  "2" "8" "10
HashMap中key重复处理
用jdk本身的map是实现不了这种情况: 有重复key 但是不需要新的映射值value覆盖先前的value。 public interface Map&amp;lt;K,V&amp;gt;将键映射到值的对象。一个映射不能包含重复的键;每个键最多只能映射一个值。 自然继承一下HashMap,改写它的一个方法就ok了 Java代码   import java.util.*;      class...
HashMap中取出全部的key
HashMap中取出全部的key
通过keySet方法和get方法遍历map中的每一个value
package imooc_collection_map;import java.util.HashSet;import java.util.Set;public class Student {public String id;public String name;public Set course;public Student(String id,String name){this.id=id;
Map(Key, Value)中是如何鉴别相同的Key呢?
Integer i1 = new Integer("1");rnInteger i2 = new Integer("1");rnMap map = new HashMap();rnmap.put(i1, "a");rnmap.put(i2, "b");rn--------------------------rnmap.size() = 1;rnrn如果有这么一个类rnpublic class Tc rnpublic int hashCode() rnreturn 1;rnrnrnTc t1 = new Tc();rnTc t2 = new Tc();rnMap map = new HashMap();rnmap.put(t1, "a");rnmap.put(t2, "b");rn--------------------------rn这时候 map.size() = 2; 为什么呢?????????????rn
如何获取对象的key
var tt={'my':'hello'};for(var i in tt){console.log(i)}
HashMap 按key的字母排序
 HashMap排序; 如: 请以key按字母排序输出map。 HashMap map = new HashMap(); map.put("btest", "test"); map.put("catid", "test" ); map.put("acest", "test"); map.put("abatid","test"); map.put("dbatid","test"
使用主键作为key 查出key与对象的map
@SQL(&quot;SELECT uid, province, recommend,city, realname, work_years, description, school, positional_title, &quot; + &quot;company, prizes, cases, experience, is_designer, status, refuse, create_time...
简单的key value hashmap
简单的hashmap key、value方便以后直接用。
HashMap插入相同key
HashMap插入的描述 使用HashMap在插入操作时,会通过equal方法判断key是否相同。如果相同,则将覆盖对应的value;不相同才使用新的“桶”。 我的问题 当往HashMap中插入数据,即使有相同的key,但是能不能不进行覆盖操作,而是把新的value放在原有的value附近能够找到的位置? 想法 呃,其实大概方向就是通过一个HashMap&amp;lt;Integer, Arra...
有关hashmap的key
[code=Java]rnpackage StartDiaguo;rnrnimport java.io.Serializable;rn//import java.util.*;rnrnpublic class Appointment implements Serializable rn private String clientName;rn rn private String startTime;rn private String endTime;rn private String date;rn private Appointment next;rn rn rn rn public Appointment()rn clientName = null;rn date = null;rn startTime = null;rn endTime = null;rn next = null;rn rn rn public Appointment(String name,String d, String s, String e)rn clientName = name;rn date = d;rn startTime = s;rn endTime = e;rn next = null;rn rn rn rn public Appointment getNext()rn return next;rn rnrn public void setNext(Appointment ap)rn next = ap;rn rn rn public String getName()rn return clientName;rn rn rn public void setName(String name)rn clientName = name;rn rnrn public String getTime()rn return startTime +"-"+ endTime;rn rn rn public void setTime(String s, String e)rn startTime = s;rn endTime = e;rn rn public String getStartTime()rn return startTime;rn rn public void setStartTime(String s)rn startTime = s;rn rn public void setEndTime(String e)rn endTime = e;rn rn public String getEndTime()rn return endTime;rn rn public String getDate()rn return date;rn rn public void setDate(String d)rn date = d;rn rnrn public void setAppointment(String n, String d, String s, String e) rn clientName = n;rn startTime = s;rn endTime = e;rn date = d;rn rnrnrn[/code]rnprivate Map appBook; 来存一个AppointmentrnAppointment 是一个linkedlist的形式 rn我用hashmap来存这个自定linkedlist类,当我想改Appointment.next 的内容后 怎么返回第一个apprn还是有什么办法更改hashmap的key
HASHMAP的KEY值问题
我想把HASKMAP的KEY放为一个对象, rnOBJECT中有region, location, department属性,rn如果两个region和location,department都相同, 它们是不是对应同一个VALUE呢?rnrnClass Employee rn String region;rn String location;rn String department;rnrnrnEmployee employee1;rnEmployee employee2;rn这两个对象不是同一个引用, 但它们里面的属性的值是相同的,是否能做到这两个对象在HASHMAP中的KEY也是相同的
HashMap的key的问题
[code=Java]rnimport java.util.HashMap;rnimport java.util.Map;rnrnclass Dogrn public String name;rn public Dog(String name)rn this.name = name;rn rn public boolean equals(Object o)rn if((o instanceof Dog) && (((Dog)o).name == name))rn return true;rn elsern return false;rn rn rn public int hashCode()rn return name.length();rn rn public String toString()rn return name;rn rnrnrnpublic class Test111226rn public static void main(String[] args) rn Map m = new HashMap();rn Dog d1 = new Dog("clover");rn m.put(d1, "DDDDOG");rn System.out.println(m.get(d1));rn d1.name = "magnolia";rn for(Object o: m.keySet())rn System.out.println(o.hashCode());rn System.out.println(o.toString());rn rn System.out.println("================");rn System.out.println(d1.hashCode());rn System.out.println(d1.toString());rn System.out.println("----------------");rn System.out.println(m.get(d1));rn rn rnrn[/code]rnrn输出:rnDDDDOGrn8rnmagnoliarn================rn8rnmagnoliarn----------------rnnullrnrn请问:为什么第一次m.get(d1)的时候能返回"DDDDOG",而将d1.name修改后就返回了null(修改d1的name后,可以看到map中的key的hashCode和name也跟着变了,hashCode和equals仍然相同,为什么get不到呢?)
关于hashMap的Key用法
我想通过查询hashMap中是否以含有该对象,来决定是否需要存放入hashMap中.rn我有一个类rnpackage iss.com.equals;rnrnimport java.util.Date;rnrnclass CountIsable rnrn private Date date;rnrn private String accountNo;rnrn private String bankCode;rnrnrn public CountIsable(Date transactionTime, String accountNo, String bankCode) rn this.date = transactionTime;rn this.accountNo = accountNo;rn this.bankCode = bankCode;rn rnrn public CountIsable(String accountNo, String bankCode) rn this.accountNo = accountNo;rn this.bankCode = bankCode;rn rnrn public boolean equals(CountIsable mapKey) rn if (DateUtil.compareDate(date, mapKey.getDate()) == 0rn && accountNo.equals(mapKey.getAccountNo())) rn if (mapKey.getBankCode() == nullrn || mapKey.getBankCode().equals(bankCode))rn return true;rn rn return false;rn rn public int hashCode() rn return 1;rn rnrn public String getAccountNo() rn return accountNo;rn rnrn public String getBankCode() rn return bankCode;rn rnrn public Date getDate() rn return date;rn rnrnrnrn下面是测试用例rnpackage iss.com.equals;rnrnimport java.util.Date;rnimport java.util.HashMap;rnrnpublic class TestEquals rnrn public static void main(String[] args)rn rn HashMap importMap=new HashMap(8);rn Date date=new Date();rn String accountNo="1";rn String bankCode="1";rn CountIsable one=new CountIsable(date,accountNo,bankCode);rn CountIsable two=new CountIsable(date,accountNo,bankCode);rn CountIsable three=new CountIsable(date,accountNo,bankCode);rn CountIsable four=new CountIsable(date,accountNo,bankCode);rn importMap.put(one,"1");rn importMap.put(two,"2");rn importMap.put(three,"3");rn if(importMap.containsKey(four))rn rn rn System.out.println(importMap.size());rn System.out.println("--------------"+(String)importMap.get(one));rn rn elsern rn System.out.println("no object!");rn rn rn rnrn程序输出为no object!,是什么原因导致key找不到
HashMap得到某一key
己知HashMap的值,怎么得到对应的键
自定义对象作为HashMap的Key
这个问题在很多面试者面试时都会被提及,本人也是最近在看effective java第九条:覆盖equals时总要覆盖hashcode回想到了当初面试时也被问到了这个问题.于是动手写了几行代码,还真发现了一些小的问题,所以拿出来分享一下! 首先我们自定义一个学生对象,它有姓名和年龄两个字段. class Student{ public String name; public Integer...
一个Hashmap的Key的问题
使用Tomcat做的开发,原来是用的Tomcat生成的SESSION作为唯一标识与USER形成HASHMAP的键值对存在内存中,今天发现数字和字母的混合字符串的Hashcode()的重复率极高(大概90%),但是用纯数字(当然)或者纯大写字母或纯小写字母就没有重复,那么我想问,有没有什么加密算法加密后只有纯大写或小写字母或纯数字?或者各位有什么推荐的做法吗?不胜感激!
HashMap调用keySet()是怎么得到set集合的?
rn[size=18px][b]## 问题描述[/size]rnrn我们知道要获取HashMap中key可以调用keySet(方法), 可是我通过看源码, 发现该代码仅仅是返回一个KeySet对象, 并没有没有写构造方法, 没有对应的方法获取key, 但是一旦调用这个方法, 接受的set里就已经有值, 那么这个值是哪里来的呢?[/b]rnrn[code=java] rn public static void main(String[] args) throws IOException rnrn HashMap hm = new HashMap();rn //添加测试数据rn hm.put(1, "a");rn hm.put(2, "b");rn hm.put(3, "c");rnrn //调用keySet()方法得到set集合rn Set key = hm.keySet(); //这里只是返回一个KeySet对象, 为什么就已经有值了?rn System.out.println(key);rn //==>[1, 2, 3] 这里输出了key值的集合, 说明调用keySet方法就已经得到了这个集合rn rn [/code]rnrnrnrnSet key = hm.keySet(); debug>>rn[code=java] public Set keySet() rn Set ks = keySet;rn return (ks != null ? ks : (keySet = new KeySet())); //返回一个KeySet对象rn [/code]rnrn再来看KeySet类rn[code=java]private final class KeySet extends AbstractSet rn public Iterator iterator() rn return newKeyIterator();rn rn public int size() rn return size;rn rn public boolean contains(Object o) rn return containsKey(o);rn rn public boolean remove(Object o) rn return HashMap.this.removeEntryForKey(o) != null;rn rn public void clear() rn HashMap.this.clear();rn rn [/code]rnrn类代码中可见, KeySet 没有具体写构造方法, 那么应该默认有个空参构造方法, 父类中也没有找打相应的方法.rnrn问题可能描述的不清楚, 请多包涵!
危险!在HashMap中将可变对象用作Key
[url]http://www.importnew.com/13384.html[/url]
为什么 HashMap 常用 String 对象作 key
偶然的一次机会看到了这个题目,有一个网上的朋友说在面试的时候面到了这道题目,没有能给出解释。这里就谈一谈自己的理解。 在《Java 编程思想》中有这么一句话:设计hashCode() 时最重要的因素就是对同一个对象调用hashCode() 都应该产生相同的值。String 类型的对象对这个条件有着很好的支持,因为String 对象的hashCode() 值是根据String 对象的内容计算的,并...
如何取得Map当中的key
我定义了一个Map:Map map = new (); rn现在我想取得map当中的key:BufferedImage image = (BufferedImage)map.keySet(); rnrnrnrn这样做为什么不对?抛出类型转化异常
怎么得到Map的key值集合
public static void main(String[] args) {  Map map=new HashMap();  map.put(&quot;name&quot;, &quot;姓名&quot;);  map.put(&quot;sex&quot;, &quot;性别&quot;);  map.put(&quot;age&quot;, &quot;年龄&quot;);  map.put(&quot;address&quot;, &quot;地址&quot;);  System.out.
急急急,如何获得根据Map获得Key值
如题。