今天第一次使用java字典类,发现不知道如何对字典的键或值做遍历

一开始我以为和python的字典一样,直接使用.key()方法可以得到一个set或者list,然后发现不行。字典类里面只有一个看上去类似的.keys()方法,其返回的是一个Enumeration类,然后我就做了一些搜索:

Enumeration接口中定义了一些方法,通过这些方法可以枚举(一次获得一个)对象集合中的元素。

这种传统接口已被迭代器取代,虽然Enumeration 还未被遗弃,但在现代代码中已经被很少使用了。尽管如此,它还是使用在诸如Vector和Properties这些传统类所定义的方法中,除此之外,还用在一些API类,并且在应用程序中也广泛被使用。 下表总结了一些Enumeration声明的方法:

1boolean hasMoreElements( )
 测试此枚举是否包含更多的元素。
2Object nextElement( )
如果此枚举对象至少还有一个可提供的元素,则返回此枚举的下一个元素。

实例:

import java.util.Vector;
import java.util.Enumeration;
 
public class EnumerationTester {
 
   public static void main(String args[]) {
      Enumeration<String> days;
      Vector<String> dayNames = new Vector<String>();
      dayNames.add("Sunday");
      dayNames.add("Monday");
      dayNames.add("Tuesday");
      dayNames.add("Wednesday");
      dayNames.add("Thursday");
      dayNames.add("Friday");
      dayNames.add("Saturday");
      days = dayNames.elements();
      while (days.hasMoreElements()){
         System.out.println(days.nextElement()); 
      }
   }
}

 以上内容来自:Java Enumeration接口 | 菜鸟教程 (runoob)

看上去好像已经解决了,只需要利用.hasMoreElements()和.nextElement()不断往后迭代即可,但是实际运用中,.nextElement()返回的是Object类,所以其实不是我们所想要的字典键的类,因此这里我想到的是把它强转成我们需要的类

例如:

Dictionary<Person, Integer> dic = new Hashtable<>();
dict.put(p1,p2);
dict.put(p3,p4);//pi都是Person类
Enumeration e = dic.keys();
while(e.hasMoreElements()) {
    Person key = (Person) e.nextElement();
    System.out.print(key.name);
}

更多推荐

java字典(Dictionary)的遍历