ArrayList:数组 values[]
LinkedList:first,last; Node{item,pre,next};
HashMap:key-values
内部类,Node是对key,value的封装,同时,他也是链表的一个结点;
内部结构
内部由一个Node数组来存储数据,长度默认为16;
当向hashmap中增加一个key时,先计算出他的hash码,根据hash码及数组的长度来计算出元素的位置,如果此位置无数据则直接放在此位置,如果有数据再使用equals进行逐个比较,相同则替换,都不相同,则使用尾插法,插入到链表的尾部;
关于查找,也是先计算出hash码,再模上长度, 去此位置中查找;
关于自扩容,默认的加载因子是0.75,超过当前容量的75%,就是扩展2倍;
当链表的长度超过8时,将链表转成树结构(红黑树);
hash冲突
尽量减小,优化hash算法;
使用链表来解决,如果长度超过8,转换成树结构(面试);
Hashable
与Hashmap相同,线程安全,已弃用;
SortedMap
排序的Map接口,根据key的自然顺序或key的自定义比较器来排序;
方法:
firstkey();
lastkey();
headMap();
tailMap();
SubMap();
TreeMap
TreeMap是SortedMap的实现类;
小结
HashSet内部使用HashMap来实现,只用到了key;
TreeMap内部使用TreeMap来实现,只用到了key;
线性表
数组
链表
队列
栈
树
二叉树
红黑树
平衡二叉树
hsah表:
hashMap,key-value,查询的时间复杂度是O(1);
算法
暴力
双指针
hash
单调栈
剪枝