zoukankan      html  css  js  c++  java
  • Collection Map Java数据结构

                                Collection Map 框架图

    Collection          接口的接口   对象的集合 
    ├ List                   子接口      按进入先后有序保存   可重复 
    │├ LinkedList                接口实现类   链表   插入删除   没有同步   线程不安全 
    │├ ArrayList                  接口实现类   数组   随机访问   没有同步   线程不安全 
    │└ Vector                      接口实现类   数组                  同步        线程安全 
    │   └ Stack
    └ Set                   子接口       仅接收一次,并做内部排序

    ├ HashSet

    │   └ LinkedHashSet
    └ TreeSet

    对于 List ,关心的是顺序, 它保证维护元素特定的顺序(允许有相同元素),使用此接口能够精确的控制每个元素插入的位置。用户能够使用索引(元素在 List 中的位置,类似于数组下标)来访问 List 中的元素。

    对于 Set ,只关心某元素是否属于 Set (不 允许有相同元素 ),而不关心它的顺序。

    Map                接口      键值对的集合 
    ├ Hashtable                  接口实现类                  同步           线程安全 
    ├ HashMap                   接口实现类                  没有同步    线程不安全

    │├ LinkedHashMap

    │└ WeakHashMap

    ├ TreeMap
    └ IdentifyHashMap


    对于 Map ,最大的特点是键值映射,且为一一映射,键不能重复,值可以,所以是用键来索引值。 方法 put(Object key, Object value) 添加一个“值” (想要得东西 ) 和与“值”相关联的“键” (key) ( 使用它来查找 ) 。方法 get(Object key) 返回与给定“键”相关联的“值”。

    Map 同样对每个元素保存一份,但这是基于 " 键 " 的, Map 也有内置的排序,因而不关心元素添加的顺序。如果添加元素的顺序对你很重要,应该使用 LinkedHashSet 或者 LinkedHashMap.

    对于效率, Map 由于采用了哈希散列,查找元素时明显比 ArrayList 快。

    摘抄:几个具体区别

    HashMap和Hashtable的区别

    • HashMap是线程不安全的
    • HashTable 在HashMap的方法上都加入synchronized,所以是线程安全,但速度较慢
    • 另一个区别是HashMap的迭代器(Iterator)是fail-fast迭代器,而Hashtable的enumerator迭代器不是fail-fast的。所以当有其它线程改变了HashMap的结构(增加或者移除元素),将会抛出ConcurrentModificationException,但迭代器本身的remove()方法移除元素则不会抛出ConcurrentModificationException异常。但这并不是一个一定发生的行为,要看JVM。这条同样也是Enumeration和Iterator的区别。

    HashMap和ConcurrentHashMap

    从ConcurrentHashMap代码中可以看出,它引入了一个“分段锁”的概念,具体可以理解为把一个大的Map拆分成N个小的HashTable,根据key.hashCode()来决定把key放到哪个HashTable中。

    在ConcurrentHashMap中,就是把Map分成了N个Segment,put和get的时候,都是现根据key.hashCode()算出放到哪个Segment中:

    ArrayList,Vector,LinkedList

    LinkedList 主要保证元素的顺序,是线程不安全

    ArrayList,vector 都是采用连续数组的形式存储,但ArrayList 线程不安全,Vector线程安全

     

    文章参考:http://blog.csdn.net/zccst/article/details/5056920

  • 相关阅读:
    form 编译命令
    Form文件夹开发步骤
    使用View为Data Source的Form开发要点
    spring2.0包说明【转】
    Zero to One读后感
    Fourth glance in Go
    Third glance in Go
    Second glance in Go
    First glance in Go
    MongoDB 安装
  • 原文地址:https://www.cnblogs.com/yanyouqiang/p/6746145.html
Copyright © 2011-2022 走看看