java集合总结 —— List、Set、Map

目录

一、集合大纲

二、List

1.ArrayList

2.LinkedList

3.Vector

三、Set

1.HashSet

2.TreeSet

3.LinkedHashSet

四、Map

1.HashMap

2.Hashtable

3.TreeMap

五、总结


一、集合大纲

这里只总结常被提及的相关集合:

ArrayList、LinkedList、Vector、HashSet、TreeSet、LinkedHashSet、HashMap、Hashtable、TreeMap

│——-List 
│—————-├ LinkedList 
│—————-├ ArrayList 
│—————-└ Vector 

│——-Set 
│—————-├ HashSet 
│—————-├ TreeSet 
│————————└ LinkedHashSet

│——-Map 
│—————-├ HashMap 
│—————-├ Hashtable 
│—————-└ TreeMap 


二、List

List接口实现类:有序(按元素进入的先后顺序存储)、可重复存储元素

1.ArrayList

        // ArrayList:底层数据结构是数组结构(动态数组)、线程不安全、可存储null数据
        ArrayList<String> arrayList = new ArrayList<String>();
        arrayList.add("qwer");
        arrayList.add("asdf");
        arrayList.add("zxcv");
        arrayList.add("zxcv");
        arrayList.add(null);
        System.out.println("arrayList:" + arrayList);

2.LinkedList

        // LinkedList:底层数据结构是链表结构、线程不安全、可存储null数据
        LinkedList<String> linkedList = new LinkedList<String>();
        linkedList.add("qwer");
        linkedList.add("asdf");
        linkedList.add("zxcv");
        linkedList.add("zxcv");
        linkedList.add(null);
        System.out.println("linkedList:" + linkedList);

3.Vector

        // Vector: 底层数据结构是数组结构、线程安全、可存储null数据
        Vector<String> vector = new Vector<String>();
        vector.add("qwer");
        vector.add("asdf");
        vector.add("zxcv");
        vector.add("zxcv");
        vector.add(null);
        System.out.println("vector:" + vector);

        其它比较(实际是算法结构的比较):

        ArrayList比LinkedList查询效率高:因为数组是有下标的,通过下标直接定位到数据,链表查询只能从第一个数据开始,顺着指针向下查找

        LinkedList比ArrayList增删效率高:链表某一个数据改动,只需要改变极少的数据指针指向,数组改动一个数据,从当前数据往后的所有数据都会有所变动

        Vector与ArrayList非常相似,但是Vector是同步的(线程安全的动态数组)

三、Set

Set接口实现类:无序或有序(比如treeSet按自然顺序/定制排序、LinkedHashSet按元素进入先后顺序)、不可重复存储元素

1.HashSet

        // HashSet:底层数据结构是哈希表、线程不安全、可存储null数据
        HashSet<String> hashSet = new HashSet<String>();
        hashSet.add("qwer");
        hashSet.add("asdf");
        hashSet.add("zxcv");
        hashSet.add("zxcv");
        hashSet.add(null);
        System.out.println("hashSet:" + hashSet);

2.TreeSet

        // TreeSet:底层数据结构是二叉树、线程不安全、不可存储null数据
        TreeSet<String> treeSet = new TreeSet<String>();
        treeSet.add("qwer");
        treeSet.add("asdf");
        treeSet.add("zxcv");
        treeSet.add("zxcv");
        // treeSet.add(null);
        System.out.println("treeSet:" + treeSet);

3.LinkedHashSet

        // LinkedHashSet:底层数据结构是链表+哈希表、线程不安全、可存储null数据
        LinkedHashSet<String> linkedHashSet = new LinkedHashSet<String>();
        linkedHashSet.add("qwer");
        linkedHashSet.add("asdf");
        linkedHashSet.add("zxcv");
        linkedHashSet.add("zxcv");
        linkedHashSet.add(null);
        System.out.println("linkedHashSet:" + linkedHashSet);

  其它比较:

        HashSet可存null元素,TreeSet不可以

        TreeSet自然排序/定制排序

        如果元素要存储到HashSet中,必须覆盖hashCode方法和equals方法(HashSet通过对象的hashCode和equals方法来完成对象唯一性的判断)

        如果元素要存储到TreeSet中,必须实现Comparable接口(TreeSet判断两个对象是否相同的方法是Comparable接口中的compareTo()方法)

        一般数据来说,哈希表的性能是较优的,但如果大量数据存储,可能会出现哈希冲突

        LinkedHashSet继承了HashSet,又使用了链表来维持元素的顺序,综合来看,LinkedHashSet在迭代访问Set中的全部元素时,性能比HashSet好,但是插入时性能稍微逊色于HashSet

四、Map

Map用于保存具有映射关系(键值对)的数据,key不能重复

1.HashMap

        // HashMap:底层数据结构是哈希表、线程不安全、key-value可为null
        HashMap<String, String> hashMap = new HashMap<String, String>();
        hashMap.put("qwer", "1");
        hashMap.put("asdf", "1");
        hashMap.put("zxvc", "1");
        hashMap.put("zxvc", "1");
        hashMap.put(null, null);
        System.out.println("hashMap:" + hashMap);

2.Hashtable

        // Hashtable:底层数据结构是哈希表、线程安全、key-value不可以为null
        Hashtable<String, String> hashtable = new Hashtable<String, String>();
        hashtable.put("qwer", "1");
        hashtable.put("asdf", "1");
        hashtable.put("zxcv", "1");
        hashtable.put("zxcv", "1");
        // hashtable.put(null, null);
        // hashtable.put("0", null);
        System.out.println("hashtable:" + hashtable);

3.TreeMap

        // TreeMap:底层数据结构是红黑树、线程不安全、key不可以为null、value可以为null
        TreeMap<String, String> treeMap = new TreeMap<String, String>();
        treeMap.put("qewr", "a");
        treeMap.put("asdf", "b");
        treeMap.put("zxcv", "c");
        treeMap.put("zxcv", "c");
        // hashtable.put(null, null);
        treeMap.put("0", null);
        System.out.println("treeMap:" + treeMap);

        其它比较:

        Hashtable线程安全,效率较低

        如果元素(key)要存储到HashMap中,必须覆盖hashCode方法和equals方法(HashMap通过对象的hashCode和equals方法来完成对象唯一性的判断)

        如果元素(key)要存储到TreeMap中,必须实现Comparable接口(TreeMap判断两个对象是否相同的方法是Comparable接口中的compareTo()方法)

        HashMap性能较好,但如果大量数据存储,可能会出现哈希冲突

五、总结

        集合不能存放基本数据类型,只能存放对象的引用

        List、Set都是继承自Collection接口,Map则不是

        List特点:元素有放入顺序(这里的顺序指的是元素进入集合的先后顺序),元素可重复

        Set特点:元素无放入顺序(这里的顺序指的是元素进入集合的先后顺序),元素不可重复,重复元素会覆盖掉

        Map用于保存具有映射关系(键值对)的数据,key不能重复

        以上集合Vector、HashTable是线程安全的

        ArrayXxx:底层数据结构是数组,查询快,增删慢

        LinkedXxx:底层数据结构是链表,查询慢,增删快

        HashXxx:底层数据结构是哈希表,依赖两个方法:hashCode()和equals()

        TreeXxx:底层数据结构是二叉树,两种方式排序:自然排序和比较器排序

        学无止境,如有问题,望多多指教(部分内容摘自百度~)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值