keySet()方法
如果有一个Map对象,可以使用 map.keySet() 方法获取所有的key值,
Iterator迭代器
Java Iterator(迭代器)不是一个集合,它是一种用于访问集合的方法。
如果是 HashMap、HashSet 这些则打印的顺序于你插入的顺序无关,只与你插入的内容有关(根据HASHCODE排序)的。所以这样输出我们会丢失我们插入时的顺序。
如果我们需要按照插入的顺序进行迭代遍历,则创建Map时新建 LinkedHashMap 。它继承于 HashMap,底层是数组+链表。它额外维护了一个双向链表用于保持迭代顺序。此外,LinkedHashMap可以很好的支持LRU算法。具体测试的代码如下:
import java.util.*;
public static void main(String[] args) {
Map<Integer,Integer> linkedhashmap = new LinkedHashMap<>();
Map<Integer,Integer> hashmap = new HashMap<Integer,Integer>();
linkedhashmap.put(1, 1); //为linkedhashmap赋值
linkedhashmap.put(3, 3);
linkedhashmap.put(2, 2);
linkedhashmap.put(5, 5);
linkedhashmap.put(4, 4);
hashmap.put(1, 1); //为hashmap赋值
hashmap.put(3, 3);
hashmap.put(2, 2);
hashmap.put(5, 5);
hashmap.put(4, 4);
Iterator it_link = linkedhashmap.keySet().iterator(); //新建一个迭代器
while ( it_link.hasNext() ){
//linkedhashmap.remove( itnext.next() ); //可以通过此方法按照Set的顺序删除键值对
System.out.println( it_link.next() );
}
Iterator it_map = hashmap.keySet().iterator();
while( it_map.hasNext() ){
//hashmap.remove( it_map.next() ); //可以通过此方法按照HashCode的顺序删除键值对
System.out.println( it_map.next() );
}
}
我们按照1,3,2,5,4的顺序分别插入到 linkedhashmap 与 hashmap 中。通过迭代器遍历输出结果,linkedhashmap会根据Set的顺序输出。hashmap会根据HashCode的顺序输出。