zoukankan      html  css  js  c++  java
  • 集合总结

    集合的简单结构(口头叙述一下):

    Iteratable接口中含有一个iterator()方法,可以产生一个iterator对象

    Collection接口继承了Iteratable接口,源码中使用的extends关键字;(单一数据)

    而Collection接口下有以下接口继承了Collection接口:

    实现了List接口的类:ArrayList; LinkList,Vector

    实现了Set接口的类或接口:HashSet,SortedSet->TreeSet

    与Collection接口类似,还有一个Map接口(键值对)

    HashMap,HashTable,SortedMap->TreeMap

    这里主要例举了比较重要的集合。

    LIst:(有序,可重复,含下标,且元素允许为空)

    ArrayList、LinkList和Vector的特点:

    ArrayList: 底层使用数组实现,初始默认容量为10,会进行扩容,扩容大小为原来大小的1.5倍,检索快,但是插入删除慢,当插入删除末尾元素时无影响。

    LinkList:底层使用双向链表实现,因此插入删除操作快,但是检索慢

    Vector:底层使用数组实现,初始默认容量为10,会进行扩容,扩容大小为原来的2被,方法含有synchronized 关键字,线程安全,但是由于效率低,基本被放弃

    Set:(无序,不可重复,HashSet元素允许为空,TreeSet元素不允许为空)

    HashSet:底层使用的是HashMap,添加元素时,HashSet集合作为HashMap的键进行构造,初始默认容量为16,会进行扩容,负载因子为0.75,即超过这个指标便会进行扩容,扩容为原来的2倍

    TreeSet:底层使用的是TreeMap,元素按照一定的规则进行排序,如果需要自定义规则时,需要实现Comparable接口或者传递Comparator对象。

    Map:(键值对)

    HashMap:底层使用的时哈希表,键和值允许为空,并且,键只允许一个为空。初始容量为16,会进行扩容,负载因子为0.75。并且,当哈希表单向链表中元素超过8个,单向链表数据结构会变成红黑树数据结构,当红黑树上的节点数小于6时,会重新变为单向链表。

    HashTable:底层使用的时哈希表,线程安全,键和值不允许为空。初始容量为11,扩容后大小为原容量的2倍+1。

    Properties:键和值只能为字符串。

    TreeMap:底层使用的是自平衡二叉树。

    哈希表,数据结构上是由一组单向链表组成的数组。当HashMap执行put()方法时,首先将key,value封装到Node对象中,然后调用key的hashCode()方法得出hash值,而后通过哈希函数将这个hash值转换为数组下标,如果数组下标对应的位置为空,就将此对象加进去。如果不为空,就会对key和链表上的每个key进行equals()比较,当所有返回的都是false,就添加到末尾,如果返回了true,就更新value。

    执行get()方法时,调用key的hashCode()方法,然后通过hash函数计算出数组下标定位,如果这个位置上无元素,放回null,如果有单向链表,key进行equals运算,若都返回false,get方法返回null,若返回ture,返回对应的value。

  • 相关阅读:
    经典多线程问题(四)-轮流打印字母和数字
    经典多线程问题 (一)-多线程售票
    买卖股票的最佳时机 II
    最长递增(严格递增)子序列-可以不连续
    环形链表 II
    最小栈
    买卖股票的最佳时机
    二叉树的层序遍历
    字符串相加
    最大子序和
  • 原文地址:https://www.cnblogs.com/xuhan74520/p/13894495.html
Copyright © 2011-2022 走看看