LinkedHashmap与ListOrderedMap

今天偶然看到一个新的Apache下的api ListOrderedMap:说是保持key原有的顺序。

我就大概的比对了一下现有的一个保持put顺序的方法。

先上代码:

public static void test1(){
        LinkedHashMap link = new LinkedHashMap();
        link.put("qq","1");
        link.put("ww","2");
        link.put("ee","3");

        Set set1 = link.keySet();
        for (String key : set1) {
            System.out.println(key + ":" + link.get(key));
        }

        System.out.println("---------------------------------------");

        
        Map listOrderedMap = ListOrderedMap.decorate(new HashMap());
        listOrderedMap.put("1", "Test1");
        listOrderedMap.put("2", "Test2");
        listOrderedMap.put("3", "Test3");
        listOrderedMap.put("4", "Test4");

        Set set2 = listOrderedMap.keySet();
        for (String key : set2) {
            System.out.println(key + ":" + listOrderedMap.get(key));
        }
    }

结果是两种方法都可以达到保持put顺序的效果。那么apache为什么要做这种重复的事呢?

我个人觉得,这种装饰器的模式,其实是提供了一种选择。假如我们有一个场景是这样的:

我们在对接他人接口时,他的出参返回了一个HashMap,我们在处理逻辑是需要按照他put顺序去取值,这里就会发现装饰器的妙用,我们完全可以在不改变他原有结构的情况下,去实现key顺序的保持。回头看LinkedHashMap,额,,让他改接口???算了。

你可能感兴趣的:(LinkedHashmap与ListOrderedMap)