黑马程序员技术交流社区
标题:
请教:keySet获取原理
[打印本页]
作者:
王婷婷
时间:
2013-4-12 15:07
标题:
请教:keySet获取原理
本帖最后由 王婷婷 于 2013-4-14 15:09 编辑
keySet获取原理,听着有点晕
作者:
①人←①城市
时间:
2013-4-12 15:17
本帖最后由 ①人←①城市 于 2013-4-12 15:45 编辑
map中的keySet方法吗?
如果是的话,则是返回此映射中包含的键的 Set 视图。
返回map中的key键作为新的集合,然后可以根据这个key结合再去取map里面的value
在Map接口源码中这样定义的: Set<K> keySet();
比如在子类: TreeMap中的keySet()方法源码如下:
...
private transient KeySet<K> navigableKeySet = null;
...
public Set<K> keySet() {
return navigableKeySet();
}
/**
* @since 1.6
*/
public NavigableSet<K> navigableKeySet() {
KeySet<K> nks = navigableKeySet;
return (nks != null) ? nks : (navigableKeySet = new KeySet(this));
}
而这个java.util.NavigableSet
public interface NavigableSet<E> extends SortedSet<E> {
...
}
作者:
love_java
时间:
2013-4-12 15:43
看一个实例吧,有一个Map对象,这时候使用keySet()方法获取所有的key值,比如:
Map map = new HashMap();
map.put(1, "a");
map.put(2, "b");
map.put(3, "c");
map.put(4, "d");
Set keys1 = map.keySet();
Set keys2 = map.keySet();
Set keys3 = map.keySet();
上面三个set对象key1,key2,key3引用的是一个对象。这是map的keySet()方法只返回一个set实例,所以当从key1中删除一个对象时候,key2和key3将会受到影响。
keys1.remove(1);
System.out.println(keys1);
System.out.println(keys2);
System.out.println(keys3);
打印结果为:
[2, 4, 3]
[2, 4, 3]
[2, 4, 3]
下面是摘自API帮助文档的说明
keySet
public Set keySet()返回此映射中所包含的键的 set 视图。该集合受映射的支持,所以映射的变化也反映在该集合中,反之亦然。该集合支持元素的移除,通过 Iterator.remove、Set.remove、removeAll、retainAll 和 clear 操作,从该映射中移除相应的映射关系。它不支持 add 或 addAll 操作。
指定者:
接口 Map 中的 keySet
覆盖:
类 AbstractMap 中的 keySet
返回:
此映射所包含的键的 set 视图。
作者:
想学跑的猪
时间:
2013-4-12 19:08
keySet()是map中的一个方法,用于获取map集合里的所有对象所对应的的key'值,
map集合是一个双列集合,而Collection是单列集合,所谓的双列集合,集合列表
中有两个类型的值,key和value。而这两个类型的值是有关系的,在map接口中定
义了一个内部类专门对这两个值的关系进行了描述,我们只要知道两个类型的值是
有关系的,key值是不可重复的,所以我们可以根据集合中的key以及key与value的
关系找到value。
这是一个实例:
class Student{
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
Student(String name,int age){
this.name=name;
this.age=age;
}
}
public class Test3 {
public static void main(String[] args){
Student stu1=new Student("zhangsan",23);
Student stu2=new Student("lisi",21);
Student stu3=new Student("wangwu",19);
Map<Student,String> map=new HashMap();
map.put(stu1,"jiuye");
map.put(stu2,"jiuye");
map.put(stu3, "yure");
Set<Student> keys=map.keySet();
for(Object obj:keys){ //或者用迭代器去遍历也可以
map.get(obj);
}
}
}
作者:
打工人
时间:
2013-4-12 23:13
如果问题未解决,请继续追问,如果没有问题了,请将帖子分类 改为“已解决”,谢谢
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2