集合

作者: mrjunwang | 来源:发表于2018-07-23 15:44 被阅读0次

    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接口~

    区别:

    • 同步性:

    • 是否允许为null:

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

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

      • HashMap<K,V> extends AbstractMap<K,V>
      • public class Hashtable<K,V> extends Dictionary<K,V>

    三、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

    image.png

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

    相关文章

      网友评论

          本文标题:集合

          本文链接:https://www.haomeiwen.com/subject/wgdjmftx.html