Java集合体系

1.    List , Set, Map都是接口,前两个继承至Collection接口,Map为独立接口

  Set下有HashSet,LinkedHashSet,TreeSet

  List下有ArrayList,Vector,LinkedList

  Map下有Hashtable,LinkedHashMap,HashMap,TreeMap

 

2.  Connection接口

  1. List   有序   可重复

    ArrayList    优点:底层数据结构是数组,查询快,增删慢      缺点:线程不安全,效率高

    Vector      优点:底层数据结构是数组,查询快,增删慢        缺点:线程安全,效率低

    LinkedList     优点:底层数据结构是链表,查询慢,增删快     缺点:线程不安全,效率高

    

    ArrayList和Vector的区别:

      Vector的方法都是同步的,是线程安全的,而ArrayList不是,由于线程的同步必然要影响性能,因此,ArrayLisy的性能比Vector好

      当ArrayList和Vector中的元素超过它的初始化大小时,Vector会将它的容量翻倍,而ArrayList只增加50%的大小。因此ArrayList有利于节约内存空间

 

  2. Set   无序   唯一

    HashSet    底层结构是Hash表    如何保证元素的唯一 ?  依赖两个方法:hashCode()和equals()

    LinkedSet  底层结构是链表和Hash表   (先进先出   插入有序   唯一)     用链表保证元素有序以及用hash表保证元素唯一

    TreeSet      底层结构是红黑树    

        如何保证元素排序?

          自然排序和比较器排序

            自然排序:

        1. 用TreeSet集合存储自定义对象时,无参构造方法使用的是自然排序对元素进行排序

        2. 自然排序是让元素所属的类实现Comparable接口,重写compareTo()方法

        3. 重写方法时候,要按照主要条件和次要条件来写 返回值为1 为升序 -1 为降序

            

            比较器排序:

              在TreeSet方法中,采用匿名内部类的形式  new comparator 接口

 

         如何保证元素的唯一性?

            根据比较返回值是否为0来决定

 

 

         Set 集合如何保证元素不重复?  

          1.添加元素时,先计算这个元素的hash值
          2.如果hash表尚未初始化,就先初始化hash表
          3.根据对象的hash值计算对象的存储位置,如果该位置没有元素,就存储元素
          4.如果该位置有元素,就把存入的元素和以前的元素进行比较hash值
          5.如果hash值不同,会继续向下运行,将元素添加到集合中
          6.如果hash值相同,会调用equals方法进行比较,如果返回false,会继续运行,将元素添加到集合中,如果返回true
           说明元素重复,不存储

 

    3.Map接口

      三个比较重要的实现类,分别是HashMap、TreeMap和HashTable

         TreeMap是有序的,HashMap和HashTable是无序的。

         HashTable的方法是同步的,HashMap的方法不是同步的。这是两者最主要的区别。

         

     总结:

      HashTable是线程安全的,HashMap不是线程安全的。

      HashMap效率较高,HashTable效率较低。

      HashTable不允许null值,HashMap允许null值(key和value都允许)

      父类不同:HashTable的父类是Dictionary,HashMap的父类是AbstractMap

 

 

 

posted @ 2020-07-14 22:46  做个有梦想的瓜皮  阅读(106)  评论(0)    收藏  举报