java中如何按输入的顺序遍历一个map和set
2017-10-02 14:54
597 查看
今天在使用如下的方式遍历HashMap里面的元素时
发现得到的元素不是按照之前加入HashMap的顺序输出的,发现是:HashMap散列图、Hashtable散列表是按“有利于随机查找的散列(hash)的顺序”。并非按输入顺序。遍历时只能全部输出,而没有顺序。甚至可以rehash()重新散列,来获得更利于随机存取的内部顺序。
总之,遍历HashMap或Hashtable时不要求顺序输出,即与顺序无关。
可以用java.util.LinkedHashMap
就是按加入时的顺序遍历了。
类似的还有 java.util.LinkedHashSet
1 for (Entry<String, String> entry : hashMap.entrySet()) { 2 MessageFormat.format("{0}={1}",entry.getKey(),entry.getValue()); 3 }
发现得到的元素不是按照之前加入HashMap的顺序输出的,发现是:HashMap散列图、Hashtable散列表是按“有利于随机查找的散列(hash)的顺序”。并非按输入顺序。遍历时只能全部输出,而没有顺序。甚至可以rehash()重新散列,来获得更利于随机存取的内部顺序。
总之,遍历HashMap或Hashtable时不要求顺序输出,即与顺序无关。
1 Map<String, String> paramMap = new HashMap<String, String>();
可以用java.util.LinkedHashMap
就是按加入时的顺序遍历了。
import java.util.Collection; import java.util.HashMap; import java.util.Iterator; import java.util.LinkedHashMap; import java.util.Map; import java.util.Map.Entry; import java.util.Set; import javax.swing.plaf.synth.SynthSeparatorUI; public class TestMap { public static void main(String[] args) { Map<String, String> map=new LinkedHashMap<String, String>(); map.put("1", "a"); map.put("2", "b"); map.put("3", "c"); Set<String> set=map.keySet(); for(String i:set){//方法一 String str=map.get(i); System.out.println(i+","+str); } System.out.println("--------------"); Set<Entry<String, String>> entry=map.entrySet();//方法二 Iterator<Entry<String, String>> it=entry.iterator(); while(it.hasNext()){ Entry<String, String> str=it.next(); System.out.println(str.getKey()+","+str.getValue()); } System.out.println("---------------"); Collection<String> set1= map.values();//方法三 for(String i:set1){ System.out.println(i); } } }
Set<String> set2=new LinkedHashSet<String>();
类似的还有 java.util.LinkedHashSet
import java.util.Collection; import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; import java.util.LinkedHashMap; import java.util.LinkedHashSet; import java.util.Map; import java.util.Map.Entry; import java.util.Set; import javax.swing.plaf.synth.SynthSeparatorUI; public class TestMap { public static void main(String[] args) { Set<String> set2=new LinkedHashSet<String>(); set2.add("aaa"); set2.add("qqq"); set2.add("wes"); for(String s:set2){//遍历方法一 System.out.println(s); } Iterator<String> it= set2.iterator(); System.out.println("-----------------"); while(it.hasNext()){//遍历方法二 System.out.println(it.next()); } } }
相关文章推荐
- Java8使用lambda表达式写的一个List,Set,Map遍历工具类
- Java的set,map容器中如何唯一确定一个元素——hashCode()和equals()
- 如何实现一个支持共享内存的Map或Set
- 在Java中如何遍历Map对象
- 如何在Java中选择Map/List/Set
- java控制台程序如何判断String字符串中只输入了一个回车
- 如何用Java编写从命令行输入一个整数N,当N小于或等于5则求1+2+3+
- Java如何遍历Map的所有的元素
- Java中如何遍历Map呢?
- Play Framework常用标签list,set,如何遍历list、map类型数据
- java例程练习(List,set,map的遍历)
- Play Framework常用标签list,set,如何遍历list、map类型数据
- 维护java.util.Set, java.util.Map的插入顺序
- 对面试题“输入n,求一个nXn矩阵,规定矩阵沿45度递增,形成一个zigzag数组(JPEG编码里取像素数据的排列顺序),请问如何用C++实现?”的理解
- java-51-输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。
- Java如何遍历Map的所有的元素
- Java如何遍历Map的所有的元素
- Java如何遍历Map的所有的元素
- java 输入一个整数数组,判断该数组是不是某二元查找树的后序遍历的结果
- java中遍历一个Map