集合和数组的优劣势和使用场景

  1. 集合

    1. Map
      1. HashMap
        1. 1.8之前使用 位桶和链表实现(1.8改用红黑树),它是线程不安全的Map,方法上都没有synchronize关键字修饰。默认16,1.7下多线程下resize,rehash时可能会出现死循环,拖死系统。默认数据量超过3/4会进行扩充操作。
      2. TreeMap
        1. 他具有一个很大的特点就是会对Key进行排序,使用了TreeMap存储键值对,再使用iterator进行输出时,会发现其默认采用key由小到大的顺序输出键值对,如果想要按照其他的方式来排序,需要重写compartor接口。底层由红黑树实现。
      3. HashTable
        1. hashTable是线程安全的一个map实现类,它实现线程安全的方法是在各个公共方法上添加了synchronize关键字。(现已不推荐使用,效率低。改用ConcurrentHashMap)
      4. ConcurrentHashMap
        1. 1.5加入,使用segment分段锁。从1.8开始采用了CAS+Synchronize技术来保障线程安全。底层采用数组+链表+红黑树的存储结构,也就是和HashMap一样。
    2. List
      1. ArrayList
        1. 底层数据结构是数组,查询快,增删慢。
        2. 线程不安全,效率高
        3. 这个ArrayListObject[]数组的默认大小为16。默认数据量超过当前定义的容量时会进行扩充操作。这里可以根据自己的使用大小,指定集合的大小  new ArrayList(num)(HashMap同原理)
      2. LinkedList
        1. 底层数据结构是链表,查询慢,增删快。
        2. 线程不安全,效率高
    3. Set
      1. HashSet
        1. HashSet按照Hash算法来存储结合中的元素,因此具有良好的存取和查找的性能。底层是HashMap,value是Object
      2. LinkedHashSet
        1. 使用连表来维护元素,因为需要维护元素的插入顺序,所以性能略低,低于HashSet。继承自HashSet(HashSet内部还有对LinkedHashMap的实现)
      3. TreeSet
        1. 采用红黑树的数据结构来存储集合元素,并且支持两种排序方法,自然排序和定制排序。注意:使用TreeSet时,保证添加的对象全都实现了Comparable接口,否则会添加失败,并且抛出ClassCastExecption异常。简单一句话,如果想要TreeSet正常运行,只能添加同一种类型的对象。内部由TreeMap实现
  2. 数组

    1. 优点
      1. 数组定义简单,而且访问很方便
    2. 缺点
      1. 组中所有元素类型都必须相同
      2. 数组大小必须定义时给出,而且大多数情况下,数组空间的大小一旦确定后就不能更改
      3. 数组的空间必须是连续的,这就造成数组在内存中分配空间时必须找到一块连续的内存空间。所以数组不可能定义得太大,因为内存中不可能有那么多大的连续的内存空间,而解决这个问题的方法就是使用链表。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值