#include<stdio.h> #include<stdlib.h> #include<malloc.h> typedef struct LNode{ int data; struct LNode* next; //next是一个指向结构体类型的指针, LNode* 是一个指针数据类型类似int ...
分类:
编程语言 时间:
2020-07-19 23:54:49
阅读次数:
96
前言:我们都知道HashMap是线程不安全的,在多线程环境中不建议使用,但是其线程不安全主要体现在什么地方呢,本文将对该问题进行解密。1.jdk1.7中的HashMap在jdk1.8中对HashMap做了很多优化,这里先分析在jdk1.7中的问题,相信大家都知道在jdk1.7多线程环境下HashMap容易出现死循环,这里我们先用代码来模拟出现死循环的情况:1publicclassHashMapTe
分类:
编程语言 时间:
2020-06-06 23:19:27
阅读次数:
81
先来看一看老版本HashMap扩容代码: void resize(int newCapacity) { Entry[] oldTable = table; int oldCapacity = oldTable.length; ...... //创建一个新的Hash Table Entry[] new ...
分类:
其他好文 时间:
2020-06-06 13:05:28
阅读次数:
87
JDK1.7和1.8 HashMap区别: 1. ******* 数组+链表 改成了 ****数组+链表或红黑树; 高位使用红黑算法可以提高操作效率 可以说对java大数据操作提高了很多 所以很多面试喜欢问 2.表的插入方式从头插法改成了尾插法,简单说就是插入时,如果数组位置上已经有元素,1.7将新 ...
分类:
其他好文 时间:
2020-05-24 13:38:47
阅读次数:
74
集合 思路 存入集合 在集合中进行翻转 遍历操作后的集合 ,构建新的链表 很明显 过程耗时间空间 代码 头插法 参考原文 "王小二:图解k个一组翻转链表" 图解如下: 代码 问题 ? 链表操作(交换)与数组操作 有很大区别 ,数组交换主要是值的交换,而链表是整体。同时需妥善处理next指针,稍不注意 ...
分类:
其他好文 时间:
2020-05-16 18:35:40
阅读次数:
55
周数 学习时间 代码行 学习内容 第八周 6h 200 数据结构线性表的删除,查找,删除和操作系统内容 第九周 6h 200 用头插法建立一个单链表,它的查找插入删除和双链表和循环单链表,双向循环链表 第十周 8h 300 完成了循环双向链结表以及打印出反转循环双向链结表 第十二周 第十三周 第十四 ...
分类:
其他好文 时间:
2020-05-10 19:35:17
阅读次数:
69
1.复制额外的空间,然后头插法 2.原地逆置,本质上是将指针反转达到逆置的效果。 假设pre、p和r指向3个相邻的结点,如上图。*pre之前的结点的指针都已经调整完毕,它们的next指针都指向其原前驱结点。 现在令*p结点的next域指向*pre结点,注意到一旦调整指针的指向后,*p的后继结点的链就 ...
分类:
其他好文 时间:
2020-05-09 16:58:43
阅读次数:
47
HashMap的线程不安全主要体现在下面两个方面: 在JDK1.7中,当并发执行扩容操作时会造成环形链和数据丢失的情况。 扩容逆序和环形:见上一篇文章中的头插法以及bilibili视频,https://www.bilibili.com/video/BV1vE411v7cR?p=4 数据丢失: 在JD ...
分类:
编程语言 时间:
2020-05-03 14:28:54
阅读次数:
158
单链表 创建单链表的过程是一个动态生成表的过程,从“空表”的初始转态起,依次建立各元素结点,并逐个插入链表 单链表的创建分为“头插法”和“尾插法” 头插法:把新加进的元素放在表头(头结点)后的第一个位置 尾插法:新加进的元素放在表中最后一个位置 单链表的正表删除 声明结点 p,q 将第一个结点(不算 ...
分类:
其他好文 时间:
2020-05-03 00:58:10
阅读次数:
63
单向循环链表: 单链表的一个变形是单向循环链表,链表中最后一个节点的next域不再为None,而是指向链表的头节点。 操作: is_empty() 判断链表是否为空 length() 返回链表的长度 travel() 遍历 add(item) 在头部添加一个节点 append(item) 在尾部添加 ...
分类:
其他好文 时间:
2020-04-09 12:45:25
阅读次数:
92