Java集合QA

ArrayList、LinkedList、Vector 的底层实现和区别

  • 从同步性来看,ArrayList 和 LinkedList 是不同步的,而 Vector 是的。所以线程安全的话,可以使用 ArrayList 或 LinkedList,可以节省为同步而耗费的开销。但在多线程下,有时候就不得不使用 Vector 了。当然,也可以通过一些办法包装 ArrayList、LinkedList,使我们也达到同步,但效率可能会有所降低。

  • 从内部实现机制来讲 ArrayList 和 Vector 都是使用 Object 的数组形式来存储的。当你向这两种类型中增加元素的时候,如果元素的数目超出了内部数组目前的长度它们都需要扩展内部数组的长度,Vector 缺省情况下自动增长原来一倍的数组长度,ArrayList 是原来的 50%,所以最后你获得的这个集合所占的空间总是比你实际需要的要大。如果你要在集合中保存大量的数据,那么使用 Vector 有一些优势,因为你可以通过设置集合的初始化大小来避免不必要的资源开销。

  • ArrayList 和 Vector 中,从指定的位置(用 index)检索一个对象,或在集合的末尾插入、删除一个对象的时间是一样的,可表示为 O(1)。但是,如果在集合的其他位置增加或者删除元素那么花费的时间会呈线性增长 O(n-i),其中 n 代表集合中元素的个数,i 代表元素增加或移除元素的索引位置,因为在进行上述操作的时候集合中第 i 和第 i 个元素之后的所有元素都要执行 (n-i) 个对象的位移操作。LinkedList 底层是由双向循环链表实现的,LinkedList 在插入、删除集合中任何位置的元素所花费的时间都是一样的 O(1),但它在索引一个元素的时候比较慢,为 O(i),其中 i 是索引的位置,如果只是查找特定位置的元素或只在集合的末端增加、移除元素,那么使用 Vector 或 ArrayList 都可以。如果是对其它指定位置的插入、删除操作,最好选择 LinkedList。


HashMap 和 HashTable 的底层实现和区别,两者和 ConcurrentHashMap 的区别。

http://blog.csdn.net/xuefeng0707/article/details/40834595

HashTable 线程安全则是依靠方法简单粗暴的 sychronized 修饰,HashMap 则没有相关的线程安全问题考虑。。

在以前的版本貌似 ConcurrentHashMap 引入了一个 “分段锁” 的概念,具体可以理解为把一个大的 Map 拆分成 N 个小的 HashTable,根据 key.hashCode() 来决定把 key 放到哪个 HashTable 中。在 ConcurrentHashMap 中,就是把 Map 分成了 N 个 Segment,put 和 get 的时候,都是现根据 key.hashCode() 算出放到哪个 Segment 中。
通过把整个 Map 分为 N 个 Segment(类似 HashTable),可以提供相同的线程安全,但是效率提升 N 倍。


HashMap 的 hashcode 的作用?什么时候需要重写?如何解决哈希冲突?查找的时候流程是如何?

从源码分析 HashMap


Arraylist 和 HashMap 如何扩容?负载因子有什么作用?如何保证读写进程安全?

http://m.blog.csdn.net/article/details?id=48956087
http://hovertree.com/h/bjaf/2jdr60li.htm

ArrayList 本身不是线程安全的。 所以正确的做法是去用 java.util.concurrent 里的 CopyOnWriteArrayList 或者某个同步的 Queue 类。

HashMap 实现不是同步的。如果多个线程同时访问一个哈希映射,而其中至少一个线程从结构上修改了该映射,则它必须 保持外部同步。(结构上的修改是指添加或删除一个或多个映射关系的任何操作;仅改变与实例已经包含的键关联的值不是结构上的修改。)这一般通过对自然封装该映射的对象进行同步操作来完成。如果不存在这样的对象,则应该使用 Collections.synchronizedMap 方法来 “包装” 该映射。最好在创建时完成这一操作,以防止对映射进行意外的非同步访问.


TreeMap、HashMap、LinkedHashMap 的底层实现区别。

http://blog.csdn.net/lolashe/article/details/20806319


Collection 包结构,与 Collections 的区别。

Collection 是一个接口,它是 Set、List 等容器的父接口;Collections 是一个工具类,提供了一系列的静态方法来辅助容器操作,这些方法包括对容器的搜索、排序、线程安全化等等。


Set、List 之间的区别是什么?
http://developer.51cto.com/art/201309/410205_all.htm


Map、Set、List、Queue、Stack 的特点与用法。
http://www.cnblogs.com/yumo/p/4908718.html
Collection 是对象集合, Collection 有两个子接口 List 和 Set
List 可以通过下标 (1,2..) 来取得值,值可以重复
而 Set 只能通过游标来取值,并且值是不能重复的
ArrayList , Vector , LinkedList 是 List 的实现类
ArrayList 是线程不安全的, Vector 是线程安全的,这两个类底层都是由数组实现的
LinkedList 是线程不安全的,底层是由链表实现的
Map 是键值对集合
HashTable 和 HashMap 是 Map 的实现类HashTable 是线程安全的,不能存储 null 值HashMap 不是线程安全的,可以存储 null 值
Stack 类:继承自 Vector,实现一个后进先出的栈。提供了几个基本方法,push、pop、peak、empty、search 等。
Queue 接口:提供了几个基本方法,offer、poll、peek 等。已知实现类有 LinkedList、PriorityQueue 等。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,186评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,858评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,620评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,888评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,009评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,149评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,204评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,956评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,385评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,698评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,863评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,544评论 4 335
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,185评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,899评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,141评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,684评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,750评论 2 351

推荐阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,604评论 18 399
  • (一)Java部分 1、列举出JAVA中6个比较常用的包【天威诚信面试题】 【参考答案】 java.lang;ja...
    独云阅读 7,090评论 0 62
  • Java SE 基础: 封装、继承、多态 封装: 概念:就是把对象的属性和操作(或服务)结合为一个独立的整体,并尽...
    Jayden_Cao阅读 2,105评论 0 8
  • 本文出自 Eddy Wiki ,转载请注明出处:http://eddy.wiki/interview-java.h...
    eddy_wiki阅读 1,157评论 0 16
  • 天越发凉了,十点半左右回宿舍,真有点迈不开步子。 我蜷缩着身体前行,整个回宿舍的路,就我一人。看着前方高处的路灯,...
    苏潇潇阅读 195评论 1 0