A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© ╰朕_有恃无恐 中级黑马   /  2013-12-8 09:16  /  1006 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 ╰朕_有恃无恐 于 2013-12-8 10:43 编辑

Collection集合中List下ArrayList接口中,为什么老师说,线程不同步,不安全,反而效率高呢?按理说应该安全了才好啊!老师也没有解释.

5 个回复

倒序浏览
ArrayList 是线程不安全的,所以效率高,不知道楼主看没看线程里同步代码块那里,如果要求线程同步,那么就会照成频繁的加锁、解锁,而这个过程比较耗时,又因为ArrayList在单线程中使用,不会出现安全问题的,所以我们在单线程里有限选择ArrayList,因为他高效。

那我们如果让ArrayList也变安全呢,这时我们就要用到Collections里的这个方法。返回一个安全的List。
static <T> List<T>   synchronizedList(List<T> list)
返回指定列表支持的同步(线程安全的)列表。

再提一句Vector是线程安全,从jddk1.0就有了。

评分

参与人数 1技术分 +1 收起 理由
简★零度 + 1

查看全部评分

回复 使用道具 举报 2 0
Collection集合重点学好什么呢?需要掌握的
回复 使用道具 举报
25343215 发表于 2013-12-8 09:25
ArrayList 是线程不安全的,所以效率高,不知道楼主看没看线程里同步代码块那里,如果要求线程同步,那么就 ...


Collection集合重点学好什么呢?需要掌握的
回复 使用道具 举报
╰朕_有恃无恐 发表于 2013-12-8 09:38
Collection集合重点学好什么呢?需要掌握的

把以下这些知识掌握,每个集合特有的方法,顶层集合抽取的方法。建议楼主还是仔细看毕老师的视频吧

Collection
        |--List:元素是有序的,元素可以重复。因为该集合体系有索引。
            
                |--ArrayList:底层的数据结构使用的是数组结构。特点:查询速度很快。但是增删稍慢。线程不同步。
                |--LinkedList:底层使用的链表数据结构。特点:增删速度很快,查询稍慢.线程不同步。
                |--Vector:底层是数组数据结构。线程同步。被ArrayList替代了。因为效低。

|--Set:无序,不可以重复元素。
     |--HashSet:数据结构是哈希表。线程是非同步的。
     保证元素唯一性的原理:判断元素的hashCode值是否相同。
     如果相同,还会继续判断元素的equals方法,是否为true。
     |--TreeSet:可以对Set集合中的元素进行排序。
     底层数据结构是二叉树。
     保证元素唯一性的依据:compareTo方法return 0.时表示元素重复
     TreeSet排序的第一种方式:让元素自身具备比较性。
     元素需要实现Comparable接口,覆盖compareTo方法。
     也种方式也成为元素的自然顺序,或者叫做默认顺序。
Java.util 接口 Comparable <T>
int compareTo(T o)
比较此对象与指定对象T 的顺序。如果此对象小于、等于或大于指        定对象T,则分别返回负整数、零或正整数。
TreeSet的第二种排序方式:
     当元素自身不具备比较性时,或者具备的比较性不是所需要的。
     这时就需要让集合自身具备比较性。
     在集合初始化时,就有了比较方式。
             Java.util 接口 Comparator<T>
int compare(T o)

回复 使用道具 举报
基本上每个集合你都要学到的,只有一两个基本很少用,

安全就代表加了同步代码块,如果你一个集合里面装了很多元素,又要遍历,而我每一次查询都要判断里面是否有线程在操作,这样速度就会非常慢。  我们应该做到自己判断什么时候需要安全集合,什么时候不需要。程序的效率也是很重要的


其实后面的视频也有讲到,在张孝祥老师多线程加强里面,你可以在后面看看
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马