keyset与entryset

1、基本概述

Set<Map.Entry<K,V>> entrySet()  返回此映射中包括的映射关系的 set 视图。

Set<K>              keySet()      返回此映射中包括的键的 set 视图。

2、效率分析

对于keySet事实上是遍历了2次,一次是转为iterator。一次就从hashmap中取出key所对于的value。

而entryset仅仅是遍历了第一次,他把key和value都放到了entry中,所以就快了。

3、使用举例

Map<String, String> maps = new HashMap<String, String>();  
  //方法一: 用entrySet()  
  Iterator<Entry<String,String>> it = maps.entrySet().iterator();  
  while(it.hasNext()){  
   Map.Entry<String,String> m = it.next();  
   String key = m.getKey();
   String value= m.getValue();
  }  
  // 方法二:jdk1.5支持,用entrySet()和For-Each循环()  
  for (Map.Entry<String, String> m : maps.entrySet()) {  
   String key = m.getKey();
   String value= m.getValue();   
  }  
  // 方法三:用keySet()  
  Iterator<String> it2 = maps.keySet().iterator();  
  while (it2.hasNext()){  
   String key = it2.next();
   String value= maps.get(key);
  }  
  // 方法四:jdk1.5支持。用keySet()和For-Each循环  
  for(String m: maps.keySet()){  
   String key = m;
   String value= maps.get(m);
  }

foreach和while的效率差点儿是差点儿相同的,而for则相对较慢一些。

foreach它可以替代出for权?显然不是。
foreach内部原则上或实际上 Iterator。但它不能像Iterator同样可以人为地控制,并且也不能称为iterator.remove(),但是你不能使用索引,以方便存取元件。

因此foreach这个周期一般只适合于迭代,提取数据显示,不适合根据标准添加复杂的操作,例如删除和使用。

时间: 2024-10-11 05:08:45

keyset与entryset的相关文章

JAVA之旅(二十二)——Map概述,子类对象特点,共性方法,keySet,entrySet,Map小练习

JAVA之旅(二十二)--Map概述,子类对象特点,共性方法,keySet,entrySet,Map小练习 继续坚持下去吧,各位骚年们! 事实上,我们的数据结构,只剩下这个Map的知识点了,平时开发中,也是能看到他的,所以还是非常值得去学习的一个知识点的,我们直接开车了 一.Map概述 泛型< k,v> 键值对,映射关系 基本特点 该集合存储键值对,是一对一对往里存,而且要保证键的唯一性 1.添加 put(key ,values) putAll() 2.删除 clear() remove(ob

HashMap中的keySet()和entrySet()

1.基本概述 Set<Map.Entry<K,V>> entrySet()  返回此映射中包含的映射关系的 set 视图. Set<K>              keySet()      返回此映射中包含的键的 set 视图. 2.效率分析 对于keySet其实是遍历了2次,一次是转为iterator,一次就从hashmap中取出key所对于的value.而entryset只是遍历了第一次,他把key和value都放到了entry中,所以就快了. 3.使用实例 pa

map对象中keyset()和entryset()区别

Set<K> keySet() //返回值是个只存放key值的Set集合(集合中无序存放的) Set<Map.Entry<K,V>> entrySet() //返回映射所包含的映射关系的Set集合(一个关系就是一个键-值对),就是把(key-value)作为一个整体一对一对地存放到Set集合当中的. 下面通过例子看看: 一. keySet()方式. Map<String,String> map = new HashMap<String,String&g

map集合中value()、keySet()、entrySet()区别

在Map集合中 values():方法是获取集合中的所有的值----没有键,没有对应关系, KeySet():将Map中所有的键存入到set集合中.因为set具备迭代器.所有可以迭代方式取出所有的键,再根据get方法.获取每一个键对应的值. keySet():迭代后只能通过get()取key entrySet(): Set<Map.Entry<K,V>> entrySet() //返回此映射中包含的映射关系的 Set 视图. Map.Entry表示映射关系.entrySet():迭

map集合的keySet和entrySet

Set<Map.Entry<K,V>> entrySet() 返回此映射中包含的映射关系的 set 视图. Set<K> keySet() 返回此映射中包含的键的 set 视图. 举例说明 import java.util.*; import java.util.Map.Entry; public class Demo { public static void main(String[] args) { Map<Integer,String> map = n

实在没想到系列——HashMap实现底层细节之keySet,values,entrySet的一个底层实现细节

我在看HashMap源码的时候发现了一个没思考过的问题,在这之前可以说是完全没有思考过这个问题,在一开始对这个点有疑问的时候也没有想到居然有这么个语法细节存在,弄得我百思不得其解,直到自己动手做实验改写了代码才完全明白. HashMap里面保存的数据最底层是一个Entry型的数组,这个Entry则保留了一个键值对,还有一个指向下一个Entry的指针.所以HashMap是一种结合了数组和链表的结构.正因为如此,你有3种对数据的观测方式:keySet,values,entrySet.第一个是体现从k

Map的keySet和entrySet

/*Map集合的两种 取出方式 * 1.keySet() * 2.entrySet() * */ //定义一个学生类 重写了equals.hashcode三个方法,实现了comparable接口并覆盖comparato方法 package 集合; public class Student implements Comparable<Student>{    private String name;    private int age;        public Student(){}  

【转】keySet和entrySet的区别

keySet是键的集合,Set里面的类型即key的类型entrySet是 键-值 对的集合,Set里面的类型是Map.Entry 1.keySet() Map map=new HashMap(); Iterator it=map.keySet().iterator(); Object key; Object value; while(it.hasNext()){ key=it.next(); value=map.get(key); System.out.println(key+":"+

Map集合的两种取出方式(keySet、entrySet)

/* * map集合的两种 取出方式:(map没有迭代器方法) *     1.Set<k> keySet:将map中的所有的键存入到Set集合,因为Set具备 迭代器. *         所以可以迭代方式取出所有的键,再根据get方法,获取每一个键对应的值. *         Map集合的取出原理:将map集合转成set集合,再通过迭代器取出 *     2.Set<Map.Entry<k,v>> entrySet:将map集合中的映射关系存入到set集合中, *