java集合

java中的集合框架

|---Collection接口

 |--List接口:存储有序的,可以重复的元素,添加进List中的元素或者对象所在的类都要重写equals()方法,便于使用Contains()方法判断是否包含

   |-ArrayList:主要的实现类,底层是数组实现的,适用于要求快速读取,但不经常进行插入删除操作的,非同步,不是线程安全的

   |-LinkedList:底层是以链表实现的,适用于频繁的插入删除操作,非同步,不是线程安全的

   |-Vector:线程安全,插入删除操作比较慢,较少使用

 |--Set接口:存储无序的,不可重复的元素,Set中常用的方法就是Collection接口提供的

    1.无序性!=随机性,无序性指的是元素在底层存储的位置是无序的

        2.不可重复行:当向Set中添加重复的元素时,后面这个不能加进去

    3.要求添加进Set中的元素所在的类一定要重写equals()和hashcode()方法

       4.Set中元素的存储方式:当向Set中添加对象时,首先调用此对象所在类的hashcode()方法,计算此对象的hash值,此hash值决定了对象在Set中的存储位置,若这个位置之前没有值,直接添加进来,若此位置已有对象存储,在通过equals()方法比较两个对象是否相同,如果相同后一个对象不能再添加进来,如果hash值一样,equals()返回false,则两个对象都存储进来,要求hashcode()方法要与equals()方法一致

   |-HashSet:主要的实现类,底层实现是HashMap

   |-LinkedHashSet:使用链表维护了一个添加进集合中的顺序,导致遍历时,是按照添加的顺序遍历的,插入性能低于HashSet,迭代访问全部元素时性能较高

   |-TreeSet:1.向TreeSet中添加的对象必须是同一个类的

         2.可以按照添加进集合中的元素的顺序遍历,像String、包装类等按照从小到大的顺序遍历

         3.如果有一个Person类需要插入TreeSet,那么该类必须实现comparable接口,否则会报错

         4.向TreeSet中插入自定义类的对象时,有两种排序方式:①自然排序 ②定制排序 ,当两种都存在时,定制排序优先

            Ⅰ.自然排序:自定义类实现java.lang.Comparable接口,并重写其CompareTo(Object obj)方法,在此类中按方法中用的那个属性排序

            Ⅱ.定制排序: 实现java.lang.Comparator接口,开发时,不能修改所要排序的类,建议使用该方式,可以多个条件排序,第一个条件一样,使用第二个排序

         5.向TreeSet添加元素时,首先按照CompareTo()方法进行比较,一旦返回0,虽然是两个子属性值一样,会认为这两个对象一样,后面的那个就不会存储进来 所以要HashCode(),CompareTo(),equals()三者一致              

|---Map接口

  |--HashMap:主要的实现类

  |--LinkedHashMap:使用链表维护添加进Map的顺序,遍历较快,进行添加删除操作时慢于HashMap

  |--TreeMap:按照添加进Map中的key的制定属性进行排序,要求key必须是同一个类的对象

  |--HashTable:古老的实现类,不允许使用null值作为key和value

    |---Properties:是HashTable的子类,多用于配置文件,key和value都是String类型

      

   

————我愿乘风破浪,踏遍黄沙海洋
原文地址:https://www.cnblogs.com/wb1993/p/5626839.html