赞
踩
1、java基础:
Java基础知识点总结归纳,超级全面!(2021版)_Java程序员-张凯的博客-CSDN博客_java基础
2、Java集合
ArrayList:底层是数组
LinkedList:底层是双向链表
Vector:底层是数组,线程安全的,效率低,使用较少
HashSet:底层是HashMap,放到HashSet集合中的元素等同于放到HashMap集合key部分了
TreeSet:底层是TreeMap,放到TreeSet集合中的元素等同于放到TreeMap集合key部分了
HashMap:底层是哈希表。
Hashtable:底层是哈希表,线程安全的,效率低,使用较少
Properties:线程安全的,并且key和value只能存储字符串String
TreeMap:底层是二叉树。TreeMap集合的key可以自动按照大小顺序排序
Map的扩容机制_一只奈良森屿的博客-CSDN博客_map的扩容机制
java中的集合_HelloLV111的博客-CSDN博客_java集合
JAVA——集合_BerglingYY的博客-CSDN博客_java集合
ConcurrentModificationException异常原因和解决方法_碌碌无为_心不在烟的博客-CSDN博客_concurrentmodificationexception
注意:HashMap链表转红黑树,插入一千万个元素都没有触发红黑叔?
答案:根据泊松分布统计,通常情况下 哈希冲突 链表长度达到8的可能性只有亿分之六,红黑树只是在极端情况下出现的。要想体验,可以重写 hashcode返回0或固定值。萌新问一个HashMap链表转红黑树的问题【java吧】_百度贴吧 (baidu.com)
3、树
红黑树规则
Nil
或Null
)红黑树详解:红黑树详解_晓之木初的博客-CSDN博客_红黑树
4、排序算法
冒泡:简单的说, 就是设置一个标准值
, 将大
于这个值的放到右边
(不管排序), 将小
于这个值的放到左边
(不管排序), 那么这样只是区分了左小右大, 没有排序, 没关系, 左右两边再重复这个步骤.直到不能分了为止
插入:将待插元素,依次与已排序好的子数列元素从后到前进行比较,如果当前元素值比待插元素值大,则将移位到与其相邻的后一个位置,否则直接将待插元素插入当前元素相邻的后一位置,因为说明已经找到插入点的最终位置
快排:简单的说, 就是设置一个标准值
, 将大
于这个值的放到右边
(不管排序), 将小
于这个值的放到左边
(不管排序), 那么这样只是区分了左小右大, 没有排序, 没关系, 左右两边再重复这个步骤.直到不能分了为止
堆排:顾名思义, 就是将数据以堆的结构, 或者说类似于二叉树的结构, 每次都整理二叉树将最大值找到, 然后放到数组末尾. 个人感觉有点像选择排序
.都是每次遍历选择一个最大值或最小值
选择:简单的说, 就是设置一个标准值
, 将大
于这个值的放到右边
(不管排序), 将小
于这个值的放到左边
(不管排序), 那么这样只是区分了左小右大, 没有排序, 没关系, 左右两边再重复这个步骤.直到不能分了为止
平均 | 最好 | 最差 | 稳定性 | |
---|---|---|---|---|
冒泡 | n2 | n | n2 | 稳定 |
插入 | n2 | n | n2 | 稳定 |
快排 | nlog2N | nlog2N | n2 | 不稳定 |
堆排 | nlog2N | nlog2N | nlog2N | 不稳定 |
选择 | n2 | n2 | n2 | 不稳定 |
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。