java集合框架

一、集合的主要类关系图

                              

 二、接口api

 三、set接口的实现类

  1、HashSet,存储原理,是通过hashmap存储

    public boolean add(E e) {
        return map.put(e, PRESENT)==null;
    }

    特点:

      a.非线程安全类

      b.无序的

      c.值不可重复

  2、LinkedHashSet,继承HashSet,多维护了一个链表,保证有序

  3、TreeSet,

  TreeSet时SortedSet接口的实现类,TreeSet可以保证元素处于排序状态,它采用红黑树的数据结构来存储集合元素。TreeSet支持两种排序方法:自然排序和定制排序,默认采用自然排序。

  ·自然排序

  TreeSet会调用集合元素的compareTo(Object obj)方法来比较元素的大小关系,然后将元素按照升序排列,这就是自然排序。如果试图将一个对象添加到TreeSet集合中,则该对象必须实现Comparable接口,否则会抛出异常。当一个对象调用方法与另一个对象比较时,             例如obj1.compareTo(obj2),如果该方法返回0,则两个对象相等;如果返回一个正数,则obj1大于obj2;如果返回一个负数,则obj1小于obj2。

  Java常用类中已经实现了Comparable接口的类有以下几个:

  ♦ BigDecimal、BigDecimal以及所有数值型对应的包装类:按照它们对应的数值大小进行比较。

  ♦ Charchter:按照字符的unicode值进行比较。

  ♦ Boolean:true对应的包装类实例大于false对应的包装类实例。

  ♦ String:按照字符串中的字符的unicode值进行比较。

  ♦ Date、Time:后面的时间、日期比前面的时间、日期大。

  对于TreeSet集合而言,它判断两个对象是否相等的标准是:两个对象通过compareTo(Object obj)方法比较是否返回0,如果返回0则相等。

  ·定制排序

  想要实现定制排序,需要在创建TreeSet集合对象时,提供一个Comparator对象与该TreeSet集合关联,由Comparator对象负责集合元素的排序逻辑。

  综上:自然排序实现的是Comparable接口,定制排序实现的是Comparator接口。

四、List接口的实现类

  1、ArrayList  数组实现

  2、LinkedList   链表实现,实现了Deque接口,可以当作双端队列来使用

  3、Vector

  4、Stack  继承自Vector,实现一个后进先出的堆栈

五、Map

  1、HashMap

    java7实现方式数组加链表,java8优化为数组+链表+红黑树,树化的的条件是链表的数量超过8个,并且数组的长度大于等于64,否则先进行扩容

  2、HashTable

    线程安全的map操作

  3、LinkedHashMap

    LinkedHashMap使用双向链表LinkedKeySet extends AbstractSet来维护key-value对的次序(其实只需要考虑key的次序即可),该链表负责维护Map的迭代顺序,与插入顺序一致,因此性能比HashMap低,但在迭代访问Map里的全部元素时有较好的性能。 

  4、Properties

    Properties类时Hashtable类的子类,它相当于一个key、value都是String类型的Map,主要用于读取配置文件。

  5、TreeMap

    SortedMap的实现类,是一个红黑树的数据结构,每个key-value对作为红黑树的一个节点。TreeMap存储key-value对时,需要根据key对节点进行排序。TreeMap也有两种排序方式:

    ♦ 自然排序:TreeMap的所有key必须实现Comparable接口,而且所有的key应该是同一个类的对象,否则会抛出ClassCastException。

    ♦ 定制排序:创建TreeMap时,传入一个Comparator对象,该对象负责对TreeMap中的所有key进行排序。

 

原文地址:https://www.cnblogs.com/sglx/p/15181485.html