java集合简述

一.集合与数组的区别
  集合不是固定长度,和固定存放数据类型的,
  数组只能存放统一的数据类型的数据,且长度是固定的

二.集合是什么(java集合存放在java.util包中,用来存放对象的容器)
注意:
  1.集合只能存放对象,基本数据类型进集合都会自动转换为包装类
  2.集合存放的是对象的引用,对象本身还是在堆内存中
  3.集合能存放不同类型,不限数量的对象


三.集合的分类:
  继承了Iterable接口的collection接口集合
  Iterable接口中封装了Iterator接口(迭代器)(存在于java.lang包中)
    Iterator:是实现了collection接口集合的顶层接口,存在于java.util包中
  核心方法有:next(),hasnext(),remove()
  1)Collection:List 接口和 Set 接口的父接口
    1)List:有序,可以重复的集合。
      List list1 = new ArrayList();
        底层数据结构是数组,查询快,增删慢;线程不安全,效率高
       2)List list2 = new Vector();
        底层数据结构是数组,查询快,增删慢;线程安全,效率低,几乎已经淘汰了这个集合
       3)List list3 = new LinkedList();
        底层数据结构是链表,查询慢,增删快;线程不安全,效率高
    4)Set:典型实现 HashSet()是一个无序,不可重复的集合
       Set hashSet = new HashSet();
       不能保证元素的顺序;不可重复;不是线程安全的;集合元素可以为 NULL,其底层其实是一个数组    
    5)Set linkedHashSet = new LinkedHashSet();
       不可以重复,有序,因为底层采用 链表 和 哈希表的算法。链表保证元素的添加顺序,哈希表保证元素的唯一性
    6)Set treeSet = new TreeSet();
       有序;不可重复,不保证元素的添加顺序,但是会对集合中的元素进行排序,底层使用 红黑树算法,擅长于范围查询。
以上三个 Set 接口的实现类比较:
   共同点:
      1、都不允许元素重复
      2、都不是线程安全的类,解决办法:Set set = Collections.synchronizedSet
2)Map:key-value的键值对,key不允许重复,value可以(严格来说 Map 并不是一个集合,而是两个集合之间的映射关系)
注意:
  1)Map可以看成由多个Entry组成
  2)没有实现Iterable接口,所以不能用加强for循环遍历Map集合
Map的常用实现类:
  1)HashMap:采用哈希表算法,key不保证添加的顺序,但不许重复(用equals判断是否为true,hashcode相等,(key值可以为null,但只能有一个)
  2)TreeMap:红黑树算法,Key会按照自然排序或定制排序进行排序(compareTo/compare的返回值是否为0,要求里面的对象都实现了Comparable接口,key值不可以为null)
  3)LinkedHashMap:链表和哈希表算法,链表保证了key先后添加的顺序,哈希表算法保证key不重复
  4)Properties:要求Key和value都是String类型
上面三个都是线程不安全的,properties由于父接口为HashTable(采用哈希表算法,不推荐),为线程安全的,但效率较低

posted @ 2020-03-22 14:02  whhhd  阅读(197)  评论(0编辑  收藏  举报