欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

java集合总结-List、Set、Map

程序员文章站 2022-05-02 12:52:43
...

目录

一、集合大纲

二、List

1.ArrayList

2.LinkedList

3.Vector

三、Set

1.HashSet

2.TreeSet

3.LinkedHashSet

四、Map

1.HashMap

2.Hashtable

3.TreeMap

五、总结


一、集合大纲

java集合总结-List、Set、Map

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

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:底层数据结构是二叉树,两种方式排序:自然排序和比较器排序

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

相关标签: java