集合框架总结

Java的主要容器:

  • Collection
    • List
      • ArrayList
      • LinkedList
      • Vector(过时)
    • Set
      • HashSet
      • LinkedHashSet
      • TreeSet
  • Map
    • HashMap
      • LinkedHashMap
    • TreeMap
    • Hashtable(过时)
    • ConcurrentHashMap(支持并发,待看)

一、AraryList和Vector的区别

共同点
这两个类都实现了List接口,它们是有序的集合。底层的数据结构是数组,都可以根据索引实现随机查询,并且速度快,插入删除由于要移动元素,所以速度慢。允许元素为null
不同点

  • AraryList是不同步的,效率高。Vector保证了数据的操作是同步的,效率低。可以使用collections.synchronizedlist(new ...)实现ArrayList的同步

二、HashMap和Hashtable的区别

相同点:都是实现了Map接口,底层是哈希表+红黑树
不同点

  • 同步性:HashMap非同步,Hashtable同步(需要同步用ConcurrentHashMap)
  • 是否允许为null:HashMap允许为null,Hashtable不允许为null
  • HashMap继承自AbstractMap,HashMap继承自Dictionary
  • HashMap把Hashtable的contains方法去掉了,改成了containsValue和containsKey

三、 List和Map的区别

相同点:都是一种容器,可以储存元素(...)
不同点

  • 储存元素的方式:List储存的是单列的元素,Map存储的是键值对的元素
  • 元素是否可以重复:List可以重复,Map不可以重复
  • 元素是否有序:所有实现了List接口的集合都是有序的,Map无序(指的是是否保证插入顺序)

四、Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals()?

添加元素的时候,如果key(也对应的Set集合的元素)相等,那么则修改value值。而在Set集合中,value值仅仅是一个Object对象罢了(该对象对Set本身而言是无用的)。在put中两个方法都要用

五、Collections和Collection的区别

  • Collection是集合的一个接口,List和Set都继承了它
  • Collections是操作集合的一个工具类,提供了很多搜索、查找、同步等方法

六、说出ArrayList,LinkedList的存储性能和特性:

ArrayList底层是数组,LinkedList底层是双向链表

  • ArrayList可以使用下标对元素进行随机方法,而LinkedList
    访问元素只能遍历链表
  • ArrayList在插入删除元素时,需要移动元素。而LinkedLIst只需要修改对应的指针就可以了,消耗代价比较小。
  • 但是在某些情况下(百万级数据量),还是ArrayList快。例如在末尾插入删除,不需要移动元素。

七、 ListListIterator有什么特点

  • ListIterator继承了Iterator接口,它用于遍历List集合的元素。
  • ListIterator可以实现双向遍历,添加元素,设置元素

八、什么是并发集合类

ava1.5并发包(java.util.concurrent)包含线程安全集合类,允许在迭代时修改集合

  • 它们的迭代器是fail-fast的,遍历时修改会抛ConcurrentModificationException

十、Java中HashMap的key值要是为类对象则该类需要满足什么条件?

需要重写HashCode()和equals()方法
在调用put方法时,首先计算key的hash值(HashCode()),如果算的两个key的hash值相等是放到同一个桶上的。

  • 调用equal(),如果key相等,就替换掉value
  • 否则,就是发生了碰撞,将插入的元素放到合适的位置上。

在Object中的equals()默认是比较对象的地址的,我们认为如果两个对象的成员变量一样就说它们是相等,所以要重写equal()。又因为equals()认定两个对象相等,他们的hashcode也一定一样,所以也要重写hashCode()

十一、ArrayList中加入大量的数据,应该如何减小消耗

进行大数据量的插入时,ArrayList底层的动态数组频繁进行也会消耗大量的资源。因此可以在初始化时指定容量。也可以手动调用ensureCapacity(int minCapacity)进行扩容

十二、确定使用该集合类型下的哪个子类

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

推荐阅读更多精彩内容

  • 1.List,Set,Map之间的区别 2.ArrayList与LinkedList的区别 Arraylist底层...
    惜小八阅读 482评论 0 2
  • Java集合类可用于存储数量不等的对象,并可以实现常用的数据结构如栈,队列等,Java集合还可以用于保存具有映射关...
    小徐andorid阅读 1,939评论 0 13
  • 集合类框架的介绍: ![Java 集合类框架](https://upload-images.jianshu.io/...
    LynnGuo阅读 754评论 0 1
  • 原文地址 Java集合 Java集合框架:是一种工具类,就像是一个容器可以存储任意数量的具有共同属性的对象。 Ja...
    gyl_coder阅读 978评论 0 8
  • 前言 java的集合框架基本上是必备的知识,也感觉是面试的重灾区吧,,虽然我没有去面试过。集合框架确实是一个值得理...
    Zane96阅读 1,651评论 0 2