加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

ArrayList VS Vector(ArrayList和Vector的区别)_面试的时候经常

发布时间:2020-12-14 06:30:07 所属栏目:Java 来源:网络整理
导读:div class="cnblogs_code" 数据增长 当需要增长时 默认增长为原来一培,而 却是原来的一半 这个我们可以看看他们的源码就可以知道: ArrayList的size()方法: } Vector的size()方法: } 其实Vector的其他很多方法都是同步的: setSize( modCount++ (newSize

<div class="cnblogs_code">

数据增长当需要增长时默认增长为原来一培,而却是原来的一半

这个我们可以看看他们的源码就可以知道:

ArrayList的size()方法:

}

Vector的size()方法:

}

其实Vector的其他很多方法都是同步的:

setSize( modCount++ (newSize > } ( i = newSize ; i < elementCount ; i++ elementData[i] = elementCount = elementCount == 0 }

那现在我们应该设计一个方案来研究我们的这些结论的正确性!!

下面给出ArrayList线程不安全证明方案:

HongtenArrayList List list = ArrayList(1 list = Collections.synchronizedList(new ArrayList()); Thread.sleep(() (Math.random() * 2 } main(String[] args) ThreadGroup group = ThreadGroup("hongtenGroup" HongtenArrayList t = ( i = 0; i < 10000; i++ Thread th = (group.activeCount() > 0 Thread.sleep(10 System.out.println("result=============" }

下面贴出部分运行结果:

线程不安全:

当然线程安全下面会出现:(运行结果都是10000)

9982 9988 9990 9979 9981 9977 9965 9971 9848 9846 9989 9993 9991 9678 9995 9992 9998 9994 9996 9997 9999============= 10000

对于增长,我们可以看看ArrayList的源码:

ArrayList:grow()

grow( oldCapacity = newCapacity = oldCapacity + (oldCapacity >> 1 (newCapacity - minCapacity < 0 newCapacity = (newCapacity - MAX_ARRAY_SIZE > 0 newCapacity = elementData = }

Vector:grow()

grow( oldCapacity = newCapacity = oldCapacity + ((capacityIncrement > 0) ? (newCapacity - minCapacity < 0 newCapacity = (newCapacity - MAX_ARRAY_SIZE > 0 newCapacity = elementData = }

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读