【Java】集合总结

Collection结构图

Map结构图

总结

推荐视频:Java零基础教程视频(适合Java 0基础,Java初学入门)

ArrayList:底层是数组

LinkedList:底层是双向链表

Vector:底层是数组,线程安全的,效率较低,使用较少

HashSet:底层是 HashMap,放到 HashSet集合中的元素等同于放到HashMap集合 key部分

TreeSet:底层是TreeMap,放到TreeSet.集合中的元素等同于放到TreeMap集合key部分

HashMap:底层是哈希表

HashTable:底层是哈希表,线程安全,效率较低,使用较少

Properties:线程安全的,key和value只能存储字符串

TreeMap:底层是二叉树,它的key可以自动按照大小排序

List集合存储元素的特点:

  • 有序:存进去和取出来的顺序相同,每个元素都有下标
  • 可重复

Set集合存储元素的特点:

  • 无序:存进去和取出来的顺序不相同,Set集合中元素没有有下标
  • 不可重复

SortedSetSortedMap)集合存储元素的特点

  • 无序不可重复
  • SortedSet集合中元素是可排序的
  • 可排序:可以按照大小顺序排列

Map集合的key就是一个Set集合,往Set集合放数据实际上放到了Map集合的key部分。


ArrayList

  1. 默认初始化容量为10
  2. 底层是object数组
  3. 扩容1.5倍
  4. 建议给定一个预估的初始化容量,减少数组的扩容次数
  5. 优点:随机增删元素效率低
  6. 缺点:末尾增删元素效率高

LinkedList

  1. 底层也是有下标的,双向链表
  2. 检索、查询的时候只能从头结点开始
  3. 优点:随机增删元素效率高
  4. 缺点:查询效率低

Vector

  1. 线程安全
  2. 初始化容量为10
  3. 2倍扩容
  4. 底层是数组

HashSet

  1. 底层HashMap
  2. 无序,不可重复
  3. 无序是指没有下标

TreeSet

  1. 底层TreeMap
  2. 无序,不可重复
  3. 元素会自动排序存储
  4. 要实现Comparable<T>compareTo(T o)方法

HashMap

  1. 底层是哈希表

  2. 数组+单向链表

  3. 源码

    public class HashMap<K,V>{
        //数组
        transient Node<K,V>[] table;
        //链表
        static class Node<K,V> implements Map.Entry<K,V> {
            final int hash;
            final K key;
            V value;
            Node<K,V> next;
        }
    }
    
  4. 同一个链表的hash值相等

  5. 放在HashMap中的元素需要重写equals和hashCode方法

  6. map.put(k,v)

    1. 封装node对象
    2. 调用hashCode()方法获取哈希值
    3. 通过哈希函数转化成数组下标
    4. 下标处没有元素,直接将Node添加到这个位置
    5. 有元素,在链表每个节点进行euquals()比较,如果全为false,在末尾添加,如果有True,更新Value
  7. map.get(k)

    1. 调用hashCode()方法获取哈希值
    2. 通过哈希函数转化成数组下标
    3. 下标处没有元素,返回None
    4. 下标有链表,对链表元素的Key比较equals,有true返回value,全为false,代表没有元素,返回null
  8. 扩容是原来长度的2倍

  9. 允许key值为null


HashTable

  1. key和value都不能为null
  2. 线程安全
  3. 初始化容量11
  4. 扩容2倍+1

Properties

  1. 继承HashTable,线程安全的
  2. key和value只能存储字符串

TreeMap

  1. 放到TreeMap集合中的元素的key部分进行排序有两种实现方式
    1. 实现java.lang.Comparable的compareTo方法
    2. 构造TreeSet或TreeMap集合的时候传一个比较器对象Comparator
  2. 比较规则不会发生改变或者比较规则只有一个的时候使用Comparable
  3. 比较规则多个,并且比较规则需要频繁切换Comparator
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值