java 集合:

java集合主要分为两个:

Collection:

                 List:

                       ArraryList:数据底层是由数组组成的,因为这个原因,其查询的的效率高,存储的数据是有序的,可以直接通过数组的下标获取对应数组中的元素的值。但是其中间的插入/删除数据的效率低下。因为不论你插入数据还是删除数据。但是导致后面的元素的移动。因此导致效率不高。

                       LinkedList:数据底层用的是链表结构。其只有在存储我前后的数据存储的地址就行。所以,在插入数据,删除数据是。效率高,但是在查找数据的时候,效率就低。

                       SynchronizedList(vector):线程安全,因为用了synchronized来修饰相关的方法。这里synchronized的为什么能够保证线程安全了。这哥是因为在相关的对象的堆内存中,在其的对象头里面,有一个monitor(锁标志),如果其为1,则说明这个是被使用,如果为0 ,则说明没有被使用

                 Set:

                       HashSet:以hashMap:作为数据底层结构(键值对),其将值存储在键中,值以默认值rensent存储。这就是其为什么不能够重复,以及无序的原因。

                       SynchronizedSet:增加了synchronized来修饰方法。保证了线程的安全。

Map:

        HashMap:数组+链表来作为存储数据的结构(能够处理hash冲撞的问题)。hashcode 使用会计算键的hash值,如果hash值相等,才会通过equal来比较内容是否相等。线程不安全。

        HashTable:线程安全,但是其父类以及被弃用。

        synchronizedmap:用syschronized来锁住整个(数组+链表)中的数组。这样是能够保证线程安全,但是效率低。

         ConcurrentMap:线程安全,主要结合了syschronized+cas的方法。其不想synchronizedmap那样直接简单粗暴的直接加锁,把整个数组就锁住。而是首先对数组进行了分段,可以说,数组中的每一个元素,都是一段。其次,在判断该数组中的元素所对应的链表是否在使用的时候,利用cas(比较与替换)的乐观锁的观念。先要判断该元素是否加锁,如果没有,就直接加锁使用,如果有,就一直自旋等待锁的释放。这样,相对的就在满足线程安全的情况下,有提高了效率。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值