循环遍历map集合,循环输出map集合
使用foreach循环遍历Map集合,使key值和vaule值对应输出
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections;
namespace Myforeach
{
class Program
{
static void Main(string[] args)
{
Person p = new Person();
p[0] = "宝马";
p[1] = "奥迪";
p[2] = "阿斯顿马丁";
//for (int i = 0; i p.Count; i++)
//{
// Console.WriteLine(p[i]);
//}
//任何类型,只要想使用foreach来循环遍历,就必须在当前类型中
//存在: public IEnumerator GetEnumerator()方法,(一般情况我们会通过实现IEnumerable接口,来创建该方法。)
foreach (string item in p)
{
Console.WriteLine(item);
}
//IEnumerator etor = p.GetEnumerator();
//while (etor.MoveNext())
//{
// string str = etor.Current.ToString();
// Console.WriteLine(str);
//}
Console.ReadKey();
}
}
public class Person : IEnumerable
{
private Liststring listCar = new Liststring();
public int Count
{
get
{
return this.listCar.Count;
}
}
public string this[int index]
{
get
{
return listCar[index];
}
set
{
if (index = listCar.Count)
{
listCar.Add(value);
}
else
{
listCar[index] = value;
}
}
}
public string Name
{
get;
set;
}
public int Age
{
get;
set;
}
public string Email
{
get;
set;
}
#region IEnumerable 成员
//这个方法的作用不是用来遍历的,而是用来获取一个对象
//这个对象才是用来遍历的。
public IEnumerator GetEnumerator()
{
return new PersonEnumerator(listCar);
}
#endregion
}
//这个类型,的作用就是用来遍历Person中的List集合的。
public class PersonEnumerator : IEnumerator
{
public PersonEnumerator(Liststring _cars)
{
cars = _cars;
}
//这个字段中存储的就是Person对象中的listCar集合
private Liststring cars;
//假设一开始遍历的对象的索引是-1
private int index = -1;
#region IEnumerator 成员
//表示获取当前正在遍历的那个对象
public object Current
{
get
{
if (index 0)
{
return null;
}
return cars[index];
}
}
//让自定义下标index累加
public bool MoveNext()
{
index = index + 1;
if (index = cars.Count)
{
return false;
}
else
{
return true;
}
}
public void Reset()
{
index = -1;
}
#endregion
}
}
分享

map集合可以通过哪些方式进行遍历
方法一 在for-each循环中使用entries来遍历?这是最常见的并且在大多数情况下也是最可取的遍历方式。在键值都需要时使用。?Map?map?= new HashMap(); for (Map.Entry entry :?map.entrySet()) { System.out.println("Key = " + entry.getKey()
Map循环遍历常用方法
这里我简单写写我知道的几种方法------注意循环对象不要为null哦!
第1种方法:通过map.entrySet()循环获取数据
第2种方法:通过map.keySet()循环获取数据
第3种方法:通过map.values()循环获取数据,但是无法获取key值
第4种方法:通过iterator循环获取数据,优点在于可以添加或删除数据
map.keySet()和map.values()的迭代就不写了,其实就是Set和List的迭代。
性能对比:
同时遍历key与value时,keySet与entrySet方法的性能差异取决于key的具体情况,包括复杂度,离散度,冲突率等。entrySet一次性取出key与value是有性能损耗的,当这个损失小于HashMap查找value的开销时,entrySet的性能优势就会体现出来。当key是比较简单或者是比较连贯的数据的时候,使用keySet会相对高效。但是如果随着key的复杂化,entrySet更有优势。所以一般建议使用entrySet,它相对来说,比较稳定。
只遍历key时,keySet方法更为合适,因为entrySet将无用的value也给取出来了,浪费了性能和空间。
只遍历value时,使用vlaues方法是最佳选择,entrySet会略好于keySet方法。
JAVA循环遍历Map的几种方法
第一种用for循环
Java代码
for(Map.EntryString, String entry:map.entrySet()){
System.out.println(entry.getKey()+"---"+entry.getValue());
}
第二种用迭代
Java代码
Set set = map.entrySet();
Iterator i = set.iterator();
while(i.hasNext()){
Map.EntryString, String entry1=(Map.EntryString, String)i.next();
System.out.println(entry1.getKey()+"=="+entry1.getValue());
}
用keySet()迭代
Java代码
Iterator it=map.keySet().iterator();
while(it.hasNext()){
String key;
String value;
key=it.next().toString();
value=map.get(key);
System.out.println(key+"--"+value);
}
用entrySet()迭代
Java代码
Iterator it=map.entrySet().iterator();
System.out.println( map.entrySet().size());
String key;
String value;
while(it.hasNext()){
Map.Entry entry = (Map.Entry)it.next();
key=entry.getKey().toString();
value=entry.getValue().toString();
System.out.println(key+"===="+value);
}
map集合有几种遍历方式
方法一 在for-each循环中使用entries来遍历
这是最常见的并且在大多数情况下也是最可取的遍历方式。在键值都需要时使用。
MapInteger, Integer map = new HashMapInteger, Integer();
for (Map.EntryInteger, Integer entry : map.entrySet()) {
System.out.println("Key = " + entry.getKey() + ", Value = " + entry.getValue());
}
注意:for-each循环在java 5中被引入所以该方法只能应用于java 5或更高的版本中。如果你遍历的是一个空的map对象,for-each循环将抛出NullPointerException,因此在遍历前你总是应该检查空引用。
方法二 在for-each循环中遍历keys或values。
如果只需要map中的键或者值,你可以通过keySet或values来实现遍历,而不是用entrySet。
MapInteger, Integer map = new HashMapInteger, Integer();
//遍历map中的键
for (Integer key : map.keySet()) {
System.out.println("Key = " + key);
}
//遍历map中的值
for (Integer value : map.values()) {
System.out.println("Value = " + value);
}
该方法比entrySet遍历在性能上稍好
方法三使用Iterator遍历
使用泛型:
MapInteger, Integer map = new HashMapInteger, Integer();
IteratorMap.EntryInteger, Integer entries = map.entrySet().iterator();
while (entries.hasNext()) {
Map.EntryInteger, Integer entry = entries.next();
System.out.println("Key = " + entry.getKey() + ", Value = " + entry.getValue());
}
不使用泛型:
Map map = new HashMap();
Iterator entries = map.entrySet().iterator();
while (entries.hasNext()) {
Map.Entry entry = (Map.Entry) entries.next();
Integer key = (Integer)entry.getKey();
Integer value = (Integer)entry.getValue();
System.out.println("Key = " + key + ", Value = " + value);
}
方法四、通过键找值遍历(效率低)
MapInteger, Integer map = new HashMapInteger, Integer();
for (Integer key : map.keySet()) {
Integer value = map.get(key);
System.out.println("Key = " + key + ", Value = " + value);
}
总结
如果仅需要键(keys)或值(values)使用方法二。
如果你使用的语言版本低于java 5,或是打算在遍历时删除entries,必须使用方法三。
否则使用方法一(键值都要)。