黑马程序员技术交流社区

标题: Collection集合 [打印本页]

作者: ╰朕_有恃无恐    时间: 2013-12-8 09:16
标题: Collection集合
本帖最后由 ╰朕_有恃无恐 于 2013-12-8 10:43 编辑

Collection集合中List下ArrayList接口中,为什么老师说,线程不同步,不安全,反而效率高呢?按理说应该安全了才好啊!老师也没有解释.
作者: 25343215    时间: 2013-12-8 09:25
ArrayList 是线程不安全的,所以效率高,不知道楼主看没看线程里同步代码块那里,如果要求线程同步,那么就会照成频繁的加锁、解锁,而这个过程比较耗时,又因为ArrayList在单线程中使用,不会出现安全问题的,所以我们在单线程里有限选择ArrayList,因为他高效。

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

再提一句Vector是线程安全,从jddk1.0就有了。
作者: ╰朕_有恃无恐    时间: 2013-12-8 09:38
Collection集合重点学好什么呢?需要掌握的
作者: ╰朕_有恃无恐    时间: 2013-12-8 09:38
25343215 发表于 2013-12-8 09:25
ArrayList 是线程不安全的,所以效率高,不知道楼主看没看线程里同步代码块那里,如果要求线程同步,那么就 ...


Collection集合重点学好什么呢?需要掌握的
作者: 25343215    时间: 2013-12-8 09:49
╰朕_有恃无恐 发表于 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)


作者: Weix1992    时间: 2013-12-8 14:14
基本上每个集合你都要学到的,只有一两个基本很少用,

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


其实后面的视频也有讲到,在张孝祥老师多线程加强里面,你可以在后面看看




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2