java各种集合的优点与缺点

353 阅读2分钟

1.数组与集合的区别 1.1 数组开始声明了类型,而集合不会 1.2 数组开辟的空间是静态的,集合是动态的 1.3 数组只能存放相同类型的数据,集合可以存放不同类型的数据(Object类的子类都可以) 1.4 但是数组比集合块,特指执行的方法速度。 2.集合框架概述 1.collection框架 List(add,remove,contains和size) 元素可以重复

  1. ArrayList
    1. 线程不安全,底层是数组,查得快,增删慢
    2. CopyOnWriteArrayList

解决arrayList线程不安全,在插入数据时copy一个数组作为缓存,而且可以读取。实时性差。

  1. Vector
    1. 线程安全,底层是数组,查得快,增删慢
  1. LinkedArrayList
    1. 线程不安全,底层是链表,查得慢,增删快

Set(add,remove,contains和size)

元素不重复

  1. HashSet
    1. 保证元素不重复,依靠equals和hashCode
  1. TreeSet
    1. 保证元素不重复,依靠红黑树排序

2.Map框架

Key->Value的形式

  1. HashMap(线程不安全)
    1. 保证元素不重复,依靠equals和hashCode

数据结构是数组+链表+红黑树组成,其中当当个链表大小不超过8位时,是数组加链表,否则转换为红黑树。

负载因子默认是0.75,数组容量每次扩容1倍,扩容的阀值=数组大小*负载因子。

  1. comcurrentHashMap(线程安全,高效)
    1. 使用分段式的线程加锁,将整个结构分段加锁,锁为链表头,并发量为分段数量。
  1. HashTable(线程安全)
    1. 保证元素不重复,依靠equals和hashCode
  1. TreeMap
    1. 保证元素不重复,依靠红黑树排序

3.集合框架的常用方法

boolean add(Object o)

添加一个元素到集合里面

boolean addALl(Collection c)

添加一整个集合元素到集合里

boolean remove(Object o)

到集合里面删除一个元素(arrylist里只删除一个)

boolean removeAll(Collection c)

删除所以集合中包含的元素,相同的元素全部删除,删除一个就返回ture。

boolean contain(Object o)

判断集合是否包含一个元素

boolean containAll(Collection c)

判断集合是否包含一整个集合的元素

boolean retainAll(Collection c);

只保留与集合相同的元素,即交集。boolean的意思是集合与原先相比是否发生了变化。