最新消息:从今天开始,做一个有好习惯的人。

java里集合这些事情-概述

java体系 迷路的老鼠 5010浏览 5评论

导读

一直想复习和总结一下集合里面的一些事情,现在终于可以安安心心写写了,可能不全面,可能有错误,欢迎指正。
作为概述,本文仅简要描述一下集合体系下常用的集合类以及优缺点,在后文会继续每个集合类做详细的总结和解析。

这里,先用一张图来大概了解一下常用的集合类,当然还有一些没有列举出来,主要是因为不常用(懒)。

Collection主要包括Set和List,Set是无序不重复集合,List是有序可重复集合,很多时候我们做List的去重操作时,偷懒的方法就是把List转换为Set集合。

从接口上看,List支持指定位置增加对象,同时增加了一个能够双向遍历线性表的新列表迭代器ListIterator以及sort排序。需要注意的是ArrayList和Vector的数据结构是数组,LinkedList的数据结构是链表。

  • ArrayList
    优点: 底层数据结构是数组,查询快,增删慢。
    缺点: 线程不安全,效率高
  • Vector
    优点: 底层数据结构是数组,查询快,增删慢。
    缺点: 线程安全,效率低
  • LinkedList
    优点: 底层数据结构是链表,查询慢,增删快。
    缺点: 线程不安全,效率高

Set接口扩展自Collection,它与List的不同之处在于,规定Set的实例不包含重复的元素。在一个规则集内,一定不存在两个相等的元素。AbstractSet是一个实现Set接口的抽象类,Set接口有三个具体实现类,分别是散列集HashSet、链式散列集LinkedHashSet和树形集TreeSet。

  • HashSet
    • 底层数据结构是哈希表。(无序,唯一)
    • hashCode()和equals() 保证元素唯一性
  • LinkedHashSet
    • 底层数据结构是链表和哈希表。(FIFO插入有序,唯一)
    • 1.由链表保证元素有序
    • 2.由哈希表保证元素唯一
  • TreeSet
    • 底层数据结构是红黑树。(唯一,有序)

再来说说Map,Map有三个比较常用和重要的实现类, 分别是HashMap、TreeMap和HashTable。

顺序性

  • TreeMap是有序的,HashMap和HashTable是无序的。
  • Hashtable的方法是同步的,HashMap的方法不是同步的。这是两者最主要的区别。

特点

  • Hashtable是线程安全的,HashMap不是线程安全的。
  • HashMap效率较高,Hashtable效率较低(线程安全的效率一般都低)。
  • 如果对同步性或与遗留代码的兼容性没有任何要求,建议使用HashMap。 查看Hashtable的源代码就可以发现,除构造函数外,Hashtable的所有 public 方法声明中都有 synchronized关键字,而HashMap的源码中则没有。
  • Hashtable不允许null值,HashMap允许null值(key和value都允许)
  • 父类不同:Hashtable的父类是Dictionary,HashMap的父类是AbstractMap

array、link、hash三种数据结构的特点

  • 数组查找快,增删慢(内存连续,数据增删通过copy)
  • 链表查询慢,增删快(内存不连续,首尾指向下一个节点)
  • 哈希表性能比较综合,通过链表链接数组空间

下一篇文章将从List开始

转载请注明:迷路的老鼠 » java里集合这些事情-概述

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

网友最新评论 (5)

  1. 666
    小涛哥5年前 (2019-09-27)回复
    • 哈哈
      迷路的老鼠5年前 (2019-09-27)回复
  2. 666
    迷你涛哥5年前 (2019-09-29)回复
    • 没创意 😮
      迷路的老鼠5年前 (2019-09-29)回复
  3. 团队协作优势互补呀 头部增加了乔老爷的求知若饥,虚心若愚,不错不错
    wa5年前 (2019-09-30)回复