集合类(Collection和Map接口)简介

集合分为Collection和Map,详细分类如下图所示:

以下是测试验证代码:

        //HashSet,无序(存取不一致)、去重
        Set set_H = new HashSet();
        set_H.add(8);
        set_H.add(3);
        set_H.add("Hello");
        set_H.add(5);
        set_H.add(5);
        System.out.println(set_H);

输出结果:[3, Hello, 5, 8]
        //LinkedHashSet能保证怎么存就怎么取的集合对象 ,有序(存取一致)、去重
        Set set_L = new LinkedHashSet();
        set_L.add(8);
        set_L.add(3);
        set_L.add("Hello");
        set_L.add(5);
        set_L.add(5);
        System.out.println(set_L);

输出结果:[8, 3, Hello, 5]
        //TreeSet 能够对集合中对象进行排序,无序(存取不一致)、去重
        //排序规则:根据ASCII表大小升序排序
        //只能对存储同一种类型的数据才能排序
        Set set_T = new TreeSet();
        set_T.add("wo");
        set_T.add("ai");
        set_T.add("study");
        set_T.add("java");
        set_T.add("java");
        System.out.println(set_T);

输出结果:[ai, java, study, wo]
        //ArrayList,有序(存取一致)、不去重
        //查询快,增删慢
        List list_A = new ArrayList();
        list_A.add(8);
        list_A.add(3);
        list_A.add(1);
        list_A.add("hello");
        list_A.add("world");
        list_A.add("world");
        System.out.println(list_A);

输出结果:[8, 3, 1, hello, world, world]
        //LinkedList,有序(存取一致)、不去重
        //查询慢,增删快
        List list_L = new ArrayList();
        list_L.add(8);
        list_L.add(3);
        list_L.add(1);
        list_L.add("hello");
        list_L.add("world");
        list_L.add("world");
        System.out.println(list_A);

输出结果:[8, 3, 1, hello, world, world]
        //HashMap,键无序(存取不一致)、在Map 中插入、删除和定位元素,HashMap 是最好的选择
        Map map_H = new HashMap();
        map_H.put(452,"张三");
        map_H.put(285,"李四");
        map_H.put(689,"王五");
        map_H.put(968,"赵六");
        System.out.println(map_H);

输出结果:{689=王五, 452=张三, 968=赵六, 285=李四}
        //LinkedHashMap,键保存了插入的顺序,怎么存就怎么取
        Map map_L = new LinkedHashMap();
        map_L.put(452,"张三");
        map_L.put(285,"李四");
        map_L.put(689,"王五");
        map_L.put(968,"赵六");
        System.out.println(map_L);

输出结果:{452=张三, 285=李四, 689=王五, 968=赵六}
        //TreeMap,按键的升序排序
        Map map_T = new TreeMap();
        map_T.put(452,"张三");
        map_T.put(285,"李四");
        map_T.put(689,"王五");
        map_T.put(968,"赵六");
        System.out.println(map_T);

输出结果:{285=李四, 452=张三, 689=王五, 968=赵六}

总结:

基于array的集合适合查询,而基于linked(链表)的集合则适合添加和删除操作,基于哈希的集合介入二者之间。

* 在各种Lists中,最好的做法是以ArrayList作为缺省选择。当插入、删除频繁时,使用LinkedList();Vector总是比ArrayList慢,所以要尽量避免使用。

* 在各种Sets中,HashSet通常优于TreeSet(插入、查找)。只有当需要产生一个经过排序的序列,才用TreeSet。TreeSet存在的唯一理由:能够维护其内元素的排序状态。

* 在各种Maps中HashMap用于快速查找。

* 当元素个数固定,用Array,因为Array效率是最高的。

结论:最常用的是ArrayList,HashSet,HashMap,Array。而且,我们也会发现一个规律,用TreeXXX都是排序的。

猜你喜欢

转载自www.cnblogs.com/janson071/p/9663569.html