HashMap jdk1.7版本,底层是数组+链表,元素的插入使用头插法,可能形成数据丢失或环形链表。 jdk1.8版本,底层是数组+链表+红黑树,元素的插入使用尾插法,数据覆盖的情况。 扩容机制:LoadFactory默认0.75,创建空数组重新Hash。 resize线程不安全:多线程之间put ...
分类:
编程语言 时间:
2020-08-09 09:22:43
阅读次数:
88
##题目: 定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。 **示例 输入: 1->2->3->4->5->NULL 输出: 5->4->3->2->1->NULL ###方式一: 迭代法(头插法): 画图分析:设置一个前节点为null,再用临时变量保存当前节点的下一个节点 ...
分类:
其他好文 时间:
2020-07-29 14:40:11
阅读次数:
54
1,单链表分为带头结点和不带头结点,带头节点的好处,只有实际写代码后才能体会出来。可以类比顺序表中的哨兵 好处: 1,第1个位置的插入、删除更加方便,带来操作上的统一。 2,对于头插法: 不带头结点的链表,插入第一个结点时,需要特殊处理,删除操作类似. 3,优势2:统一空表和非空表的处理 举例:无头 ...
分类:
其他好文 时间:
2020-07-24 16:29:50
阅读次数:
59
代码: /*单链表(含头结点)*/ #include<stdio.h> #include<stdlib.h> typedef int ElemType; typedef struct LNode{ ElemType data; //数据域 struct LNode *next; // 指针域 }LN ...
分类:
其他好文 时间:
2020-07-22 11:28:44
阅读次数:
101
#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
list实现, 头插带头结点的单链表实现链栈,两个队列实现栈 MAX_SIZE = 100 class MyStack1(object): """模拟栈""" def __init__(self): self.items = [] self.size = 0 def is_empty(self): ...
分类:
编程语言 时间:
2020-06-29 20:07:08
阅读次数:
65
前言:我们都知道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