首页 > 代码库 > Java的Map的使用

Java的Map的使用

建立一个Java project如下图所示:

在Test.java:

//没用map的判断逻辑        int i = 1;//1,2,3        switch (i) {        case 1:            new RankLevel();            break;        case 2:            new RankNew();            break;        }
View Code

可以看到没有使用map的情况下使用了好多的case分支;

再看看有map的情况:

IStatusByFind.java:

package s_test.StatusByFind;public interface IStatusByFind {    public Object process(Object ...pram);}
View Code

RankLevel.java:

package s_test.StatusByFind;public class RankLevel implements IStatusByFind {    @Override    public Object process(Object... pram) {        // TODO Auto-generated method stub        System.out.println("hello:RankLevel"+pram);        return null;    }}
View Code

RankNew.java:

package s_test.StatusByFind;public class RankNew implements IStatusByFind {    @Override    public Object process(Object... pram) {        // TODO Auto-generated method stub        System.out.println("hellow:RankNew"+pram);        return null;    }}
View Code

在Test.java里面:

//有用map的判断逻辑        Map<Integer,IStatusByFind> map = new HashMap<Integer,IStatusByFind>();        map.put(1,new RankLevel());        map.put(2,new RankNew());        int input = 2;//1,2,3        if(map.containsKey(input)){            map.get(input).process(1);        }
View Code

可以看到我们不需要加入更多的分支,只是建多了分支的处理类;

其实struts2框架的核心也就这么点代码,(加载xml文件到内存,放到map里面,然后每个url就是一个key,类比于上面的int input = 2;//1,2,3,都对应有相应处理的action类比于上面的RankLevel、RankNew)

源码在那里?

here:

com.opensymphony.xwork2.config.impl

而且告诉你,几乎所有的MVC框架都是这种处理方式

附录,Test.java:

package s_test.StatusByFind;import java.util.HashMap;import java.util.Map;public class Test {    public static void main(String[] args) {        //没用map的判断逻辑        int i = 1;//1,2,3        switch (i) {        case 1:            new RankLevel().process(1);            break;        case 2:            new RankNew().process(1);            break;        }        //有用map的判断逻辑        Map<Integer,IStatusByFind> map = new HashMap<Integer,IStatusByFind>();        map.put(1,new RankLevel());        map.put(2,new RankNew());        int input = 2;//1,2,3        if(map.containsKey(input)){            map.get(input).process(1);        }            }}
View Code

运行结果:

hello:RankLevel[Ljava.lang.Object;@1888759hellow:RankNew[Ljava.lang.Object;@e53108
View Code