集合

list

 

ArrayList

  01,list实现了长度可变的数组,在内存中分配连续的空间,遍历元素和随机访问元素的 效率比

较高

  02,List接口存储的是一组不唯一(可以重复),有序(插入顺序)的对象

  List  list  =  new ArrayList () ;     //初始化长度为10

  list . add (11) ;  //这时候集合会自动扩容,返回一个新的数组长度=原数组长度*1.5+1;

 

 

LinkedList

  01,采用链表存储方式,插入和删除元素时效率比较高

  

  

Set

  Set接口存储的是唯一,无序对象的集合

  

HashSet是set的实现类

  01,存放的是对象的引用、

  02,hashset底层是hashMap实现的

  02,hashsset中添加数据的步骤

    001,对key的hashcode进行hash运算,得到的值就是对应的index

    002,判断index所指向的数组元素是否为空,如果为空就直接插入

    003,如果不为空,依次查询entry中的next所指定的元素,判断key是否相等,如果想等就

直接覆盖

    004,如果不相等,通过next变量将值插入entry数组中

 

 

HashSet与treeSet对比

  01,HashSet是通过HashMap实现的,TreeSet是通过TreeMap实现的,只不过Set用的只不过

Map的key

  02,Map的Key和Set都有一个共同的特性就是集合的唯一性,TreeMap更是多了一个排序的功

  03,hashCode和equals()是hashMap用的,因为无需排序,所以只需要关注定位和唯一性即

  04,由于treemap需要排序,所以需要一个Comparator为键值进行大小比较

 

map

  01,map是一个键值对的集合,有key和value,通过key拿到value的值

  02,Set中的add默认底层走的是Map的put,所以key是不允许重复的,也是先判断对象的

hashCode,之后equals比较

 

posted @ 2017-07-06 11:14  等一杯咖啡  阅读(115)  评论(0编辑  收藏  举报