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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 严海荣 高级黑马   /  2012-10-5 18:59  /  2175 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 严海荣 于 2012-10-6 14:14 编辑

StringBuider  线程不同步
StringBuffer  线程同步

Arraylist 线程不同步
verctor 线程同步

Hashtable 线程同步
HashMap 线程不同步

不同步的是不是因为效率问题都把同步的淘汰了?不知道还有哪些类似的情况。

评分

参与人数 1技术分 +1 收起 理由
唐志兵 + 1 赞一个!

查看全部评分

2 个回复

倒序浏览
同步的话 要每次都会判断锁,效率会很低,一般在java1.2新版本 的集合容器里面 都是非同步的 楼主记住这个就可以啦 哈哈

例如 collection集合 中的 list 集合
             ArrayList  底层是数组结构,非同步。查询快,1.2版本后出现的 为了提高效率。     
             linkedList  底层是链表结构,非同步,增删快,1.2版本后出现的 也是为了提高效率
             Vectory  底层是数组结构 被ArrayList给替代了 是同步的,除了可以用迭代器取出元素外,
                          还可以使用枚举方式来取出元素。这个集合是java的老成员1.0就存在的。要频繁的判断锁所以导致效率低。
                                  set集合
             HashSet:底层是哈希表结构,非同步,查询特快,取出元素时候是没有顺序的,因为hashset底层来判断数据有特有的哈希
                         算法,此集合存储的元素没有重复的,因为hashCode()方法比较完两个元素,如果有相同的,那么会再次调用     
                        equals方法来比较两个元素是否相同。,
             TreeSet:底层结构是二叉树,也是非同步的,取出元素时候默认是按自然排序的。

   揭下来是Map接口的集合:
这个接口里面的集合都是按一对 一对的来存储的。
map集合添加元素的方法是put()方法。,
map集合取出元素的方式是将map集合换成set集合 在使用迭代器取出,可以使用keyset()  或者是EntrySet()方法。

  hashmap:底层是哈希表,非同步,允许null作为键,允许null作为值。
  Treemap:底层是二叉树,非同步,默认是自然顺序,也可以使用比较器的方法。
  hashtable:底层是哈希表,被hashmap所取代了,也是元老级别的,是同步的,不允许null作为键,不允许null作为值。

大概总结这些 希望楼主采纳嘿嘿

评分

参与人数 1技术分 +1 收起 理由
唐志兵 + 1 赞一个!

查看全部评分

回复 使用道具 举报
线程同步的集合貌似都是元老级的呀,因为效率的问题JDK对其进行升了级。

JDK升级无外乎围绕三点进行,
1.提高安全性;
2.简化代码;
3.提高效率;

对于集合线程同步的升级就是为了提高效率,可能会问这线程都不同步了,万一真的碰到了多线程该怎么办,你可以使用线程安全的集合,但是这比较麻烦,还要自己加锁,还容易出错,java就提供了专门的方式,就是你给我一个线程不安全的集合,我就返回给你一个线程安全的集合,这避免了我们自己加锁的麻烦,降低了出错的概率。这个你可以查一下API,因为当时只是提了一次没有记清楚···

评分

参与人数 1技术分 +1 收起 理由
唐志兵 + 1 赞一个!

查看全部评分

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