
数据结构
王也`
这个作者很懒,什么都没留下…
展开
-
仿写HashMap
最近阅读了HashMap的源码,为了加深对HashMap的理解自己动手仿写了一个HashMap, 主要实现了get(),put(),resize()方法。具体的说明在代码的注释里。 public class MyHashMap<K,V> { private Node<K,V>[] table; private int size=0; private int capacity; private float loadFactor; /**原创 2022-04-11 20:00:29 · 225 阅读 · 0 评论 -
多角度彻底理解HashMap
文章目录一、从数据结构的角度看二、从主体数组的角度看计算索引的方式:三、线程安全的角度看 一、从数据结构的角度看 在jdk1.7的时候hashmap是由数组加+链表实现的。jdk1.8的时候底层是由数组+链表+红黑树实现的 因为,数组+链表的话如果链表过长的话,这个hashmap的查找时间复杂度就是O(n)级别。时间复杂度太高,hashmap的效率就很低。所以在jdk1.8的是时候就引入的红黑树的数据结构。 但是jdk1.8 哪怕引入的红黑树也没有说一开始解决hash冲突的时候就使用红黑树。因为红黑树是一个原创 2022-04-04 19:36:10 · 823 阅读 · 0 评论 -
java--插入排序
基本思想:从待排数列第一个数据开始当做有序数列,后面的当做无序数列,将无序数列中的元素在有序数列从后向前扫描找到他的位置插入,将该位置后面的数据向后移动。 时间复杂度:O(n²), 最高好情况O(n) ,最坏的情况O(n²) 步骤: 代码: public class InsertSort { public static void main(String[] args) { int[] arr={12,34,6,4,89,75,134,44,86,90}; ...原创 2022-01-08 20:08:10 · 289 阅读 · 0 评论 -
java--快速排序
基本思想,通过一趟排序将待排数组分成两个部分,其中一部分的所有元素都比另一部分的要小,然后对这两个部分继续分别进行排序,直到整个待排数组都变成有序数列。 算法描述 快速排序使用分治法将一个串分成两个串(子列表),具体步骤: 1、每次排序都会选取数组中的一个元素当做基准数。 2、基准数一般会选取数组最左边的数。 然后从两边开始进行检索, 首先从右边开始检索比基准数小的元素,然后停下。 其次从左边开始检索比基准数大的元素,检索到就停止。 然后交换两个数,继续检索 ...原创 2022-01-08 11:11:19 · 572 阅读 · 0 评论 -
java--堆排序
堆排序用到的数据结构是完全二叉树, 完全二叉树要求,从上到下从左到右每一层节点多是满的,并且如果有未满层,则这个层所有元素都集中在最左边。 堆排序思想,将完全二叉树构造成大顶堆,然后将第一个元素与最后一个元素交换位置,再将剩下的元素构造大顶堆,继续交换位置,重复操作。 chushishi ...原创 2022-01-07 00:09:59 · 704 阅读 · 0 评论 -
HashMap
HashMap是java中的数据集合,在jdk1.8的实现结构是数组加红黑树,jdk1.7的结构是数组加链表。但是这种数据结构当链表的长度很长时他的查询时间复杂度就降低到O(n),而红黑树就是一种平衡二叉树,他的查询时间复杂度是O(logn) HashMap的基本使用 1、put方法构造键值对,插入hashmap Map<String,String> map =new HashMap<String ,String>(); map.put("1","..原创 2021-12-30 11:13:49 · 304 阅读 · 0 评论 -
深拷贝浅拷贝
简单理解一下: 浅拷贝:将a(原始数据)赋值给b(后来的数据),改变b的值,a的值也随之改变。也就是说浅拷贝是让原始数据和后来的数据共用一个内存地址,即a将自己的地址赋给了b。b指向的地址发生了变化。 深拷贝:将a(原始数据)赋值给b(后来的数据),改变b的值,a的值也不会发生改变。也就是说深拷贝是让后来的数据在自己的地址上改变数值,即a将自己地址上的值赋给了b,b指向的地址没发生变化。 ...原创 2021-09-03 22:33:16 · 178 阅读 · 0 评论