集合

Java容器可分为两大类:

  • Collection

    • List

      • ArrayList
      • LinkedList
      • Vector(了解,已过时)
    • Set

      • HashSet

        • LinkedHashSet
      • TreeSet

  • Map

    • HashMap

      • LinkedHashMap
    • TreeMap

    • ConcurrentHashMap

    • Hashtable(了解,,已过时)

着重标出的那些就是我们用得最多的容器。

一、ArrayList和Vector的区别

共同点:

  • 这两个类都实现了List接口,它们都是有序的集合(存储有序),底层是数组。我们可以按位置索引号取出某个元素,允许元素重复和为null

区别:

  • 同步性:

    • ArrayList是非同步的
    • Vector是同步的
    • 即便需要同步的时候,我们可以使用Collections工具类来构建出同步的ArrayList而不用Vector
  • 扩容大小:

    • Vector增长原来的一倍,ArrayList增长原来的0.5倍

二、HashMap和Hashtable的区别

共同点:

  • 从存储结构和实现来讲基本上都是相同的,都是实现Map接口~

区别:

  • 同步性:

    • HashMap是非同步的
    • Hashtable是同步的
    • 需要同步的时候,我们往往不使用,而使用ConcurrentHashMapConcurrentHashMap基于JDK1.8源码剖析
  • 是否允许为null:

    • HashMap允许为null
    • Hashtable不允许为null
  • contains方法

    • 这知识点是在牛客网刷到的,没想到这种题还会有(我不太喜欢)....
    • Hashtable有contains方法
    • HashMap把Hashtable的contains方法去掉了,改成了containsValue和containsKey
  • 继承不同:

    • HashMap extends AbstractMap
    • public class Hashtable extends Dictionary

三、List和Map的区别

共同点:

  • 都是Java常用的容器,都是接口

不同点:

  • 存储结构不同

    • List是存储单列的集合
    • Map存储的是key-value键值对的集合
  • 元素是否可重复

    • List允许元素重复
    • Map不允许key重复
  • 是否有序

    • List集合是有序的(存储有序)
    • Map集合是无序的(存储无序)
      四、Collection和Collections的区别
      Collection是集合的上级接口,继承它的有Set和List接口
      Collections是集合的工具类,提供了一系列的静态方法对集合的搜索、查找、同步等操作
      五、Java中HashMap的key值要是为类对象则该类需要满足什么条件?
      需要同时重写该类的hashCode()方法和它的equals()方法。

从源码可以得知,在插入元素的时候是先算出该对象的hashCode。如果hashcode相等话的。那么表明该对象是存储在同一个位置上的。
如果调用equals()方法,两个key相同,则替换元素
如果调用equals()方法,两个key不相同,则说明该hashCode仅仅是碰巧相同,此时是散列冲突,将新增的元素放在桶子上
一般来说,我们会认为:只要两个对象的成员变量的值是相等的,那么我们就认为这两个对象是相等的!因为,Object底层比较的是两个对象的地址,而对我们开发来说这样的意义并不大~这也就为什么我们要重写equals()方法

重写了equals()方法,就要重写hashCode()的方法。因为equals()认定了这两个对象相同,而同一个对象调用hashCode()方法时,是应该返回相同的值的!
[集合的基本问题](https://www.jianshu.com/p/80c999ebb5f0)

集合_第1张图片
image.png

什么是哈希?
将任意长度的输入,通过散列函数计算后,转为固定长度的输出。输出就是哈希值。

你可能感兴趣的