java中如何按输入的顺序遍历一个map和set

来源:互联网 发布:人类学 知乎 编辑:程序博客网 时间:2024/06/03 22:41
今天在使用如下的方式遍历HashMap里面的元素时
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());       }    }    }  


原创粉丝点击