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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 郝少普 中级黑马   /  2012-11-17 19:37  /  1748 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 sp000 于 2012-11-18 13:23 编辑

集合中分为哪几类?
哪些集合是线程安全的?
线程安全的与不安全的有什么区别?

评分

参与人数 1技术分 +1 收起 理由
奋斗的青春 + 1 鼓励分。

查看全部评分

5 个回复

倒序浏览
集合主要分为两大类:
     1、List 。 其子类主要有 :ArrayList、Vector、LinkedList
        2、Set 。 其子类主要有:HashSet、TreeSet
集合是线程安全的主要有:
     1、Vector    底层数据结构是数组,线程安全、增删慢,查询快。但是,线程安全,效率就低、所以查询也慢。
     2、HashTable   底层数据结构是哈希表、线程安全。
集合是线程不安全的主要有:
     1、ArrayList   底层数据结构是数组,线程不安、增删慢,查询快。
     2、LinkedList   底层数据结构是链表,线程不安全、增删快,查询慢。
     3、HashSet    底层数据结构是哈希表。线程不安全。
     4、TreeSet    底层数据结构是二叉树,线程不安全。
线程安全的与不安全的区别:
     1、线程安全就是多线程访问时,采用了加锁机制,当一个线程访问该类的某个数据时,进行保护,其他线程不能进行访问直到该线程读取完,其他线程才可使用。不会出现数据不一致或者数据污染。
     2、线程不安全就是不提供数据访问保护,有可能出现多个线程先后更改数据造成所得到的数据是脏数据。

另注:不要把Map与Collection混淆、他们是同等级的存在

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 赞一个!

查看全部评分

回复 使用道具 举报
集合分为两类:Collection和Map,其中Collection的子类有Llist(子类有ArrayList,Vector,LindedList)和Set(子类有HashSet,TreeSet),而Map的子类有HashMap,TreeMap,HashTable.


在JDK1.5之前的集合都是线程安全的,如Vector和HashTable,其他的集合都是JDK1.5之后出现的,是线程安全的。

线程的安全是指多个线程同时对一个线程操作时,操作这个对象的方法加了锁机制,那么在一个时间段内只能有一个线程操作这个这个方法,其他的线程必须处于等待状态,只有操作的线程完成任务后释放了锁后其他的线程才可以进入这个方法进行操作。线程不安全是多个线程在一个时间段可以同时操作同一个对象,这样会造成数据错误,如卖火车票当火车票的张数为0时就不可以卖了,而由于多个线程同时操作,当一个线程把张数改为1时恰在这时这个线程正要对张数进行输出但另外一个线程又把张数改为了0,这时如果刚才的那个线程再次抢到执行权时就会接着上次的操作输出张数是0.这是不对的。

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 神马都是浮云

查看全部评分

回复 使用道具 举报
PanTiangong 发表于 2012-11-18 11:00
集合主要分为两大类:
     1、List 。 其子类主要有 :ArrayList、Vector、LinkedList
        2、Set 。  ...

  不错,谢谢了


  
回复 使用道具 举报
集合类型主要有3种:set(集)、list(列表)和map(映射)
集Set
它的对象不按特定方式排序,只是简单的把对象加入集合中
对集中成员的访问和操作是通过集中对象的引用进行的,所以集中不能有重复的对象
列表List
List接口与其实现类是容量可变的列表,可以按照索引访问集合中的元素,是有序的集合
列表在数据结构中分别表现为:数组和向量、链表、堆栈、队列、常用的有ArrayList vector
映射Map
映射中每个项都是成对的,Map是把键对象和值对象进行关联的容器
映射中存数的每个对象都有一个相关的关键字(key)对象,关键字决定了对象在映射总的存储位置,
关键字应该是唯一的,常用的有HashMap,HashTable

线程安全的集合是:
Vector与HashTable
Vector内部数据结构是数组结构,HashTable内部结构是Hash表,它允许null作为键作为值


线程安全与不安全
线程安全:线程安全就是说多线程访问同一代码,不会产生不确定的结果。编写线程安全的代码是低依靠线程同步,
线程安全一般都涉及到synchronized,就是一段代码同时只能有一个线程来操作。

线程不安全:线程不安全就是不对同一个代码加锁,执行这对代码用到多个线程操作会产生不确定的结果,比如死锁。

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 神马都是浮云

查看全部评分

回复 使用道具 举报
凊係柈泩 发表于 2012-11-18 13:31
集合类型主要有3种:set(集)、list(列表)和map(映射)
集Set
它的对象不按特定方式排序,只是简单的把对象加 ...

谢谢  
  
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马