如题,下面程序中Map m = new HashMap();这句话怎么理解啊??定义的m是Map类型,那么new一个HashMap有什么用啊?
还有最后打印m的时候,打印时是按什么顺序打印出来的?
例如执行语句:java TestArgsWords ddd eee aaa eee sss ddd ddd www,打印结果是
5 distinct words detected:
{aaa=1, sss=1, ddd=3, www=1, eee=2},它们是按什么顺序打印的啊???谢谢各位指点下啊!!!
import java.util.*;
public class TestArgsWords
{
private static final int ONE = 1;
public static void main(String[] args)
{
Map m = new HashMap();
for(int i =0; i<args.length;i++)
{
  int freq =(Integer)m.get(args[i])== null ? 0 : (Integer)m.get(args[i]) ;
m.put(args[i],(freq == 0 ? ONE : freq + 1));

}
System.out.println(m.size() +" distinct words detected:"); 
System.out.println(m);
 }
}

解决方案 »

  1.   

    定义一个 Map 类型的对象 m,这个对象是一个新的 HashMap 实例。
      

  2.   

    HashMap 是不保证顺序的;TreeMap、SortedMap 等有自己的排序规则。具体请参考 Map 类注释。
      

  3.   

    既然LZ提到了Map接口,那应该也知道接口是不能被实例化的,而需要对此类型实例化时,可以对它的某个实现类进行实例化,即OO中多态的概念。所以有了new HashMap()。
    HashMap没有固定的映射顺序,所以LZ所问的打印顺序是无解的。
      

  4.   

    这里有多态,父类的引用指向子类的对象HashMap是无序无重复的  
      

  5.   

    把 HashMap 改成 LinkedHashMap 就是有序的了,类似的还有 LinkedHashSet,没事的时候要多看看常用类的 API DOC 哦。  ^_^
      

  6.   

    HashMap是Map的一个子类。在这里用Map指向它的子类实例HashMap。
      

  7.   

    HashMap 应该是Map的实现类吧, 据我所知Map是接口呢。 类能继承接口么?