next

HashMap JDK1.8实现原理

你离开我真会死。 提交于 2020-08-15 13:15:15
HashMap概述 HashMap存储的是key-value的键值对,允许key为null,也允许value为null。HashMap内部为数组+链表的结构,会根据key的hashCode值来确定数组的索引(确认放在哪个桶里),如果遇到索引相同的key,桶的大小是2,如果一个key的hashCode是7,一个key的hashCode是3,那么他们就会被分到一个桶中(hash冲突),如果发生hash冲突,HashMap会将同一个桶中的数据以链表的形式存储,但是如果发生hash冲突的概率比较高,就会导致同一个桶中的链表长度过长,遍历效率降低,所以在JDK1.8中如果链表长度到达阀值(默认是8),就会将链表转换成红黑二叉树。 HashMap数据结构 1 2 // Node本质上是一个Map.存储着key-value 3 static class Node<K,V> implements Map.Entry<K,V> { 4 final int hash; // 保存该桶的hash值 5 final K key; // 不可变的key 6 V value; 7 Node<K,V> next; // 指向一个数据的指针 8 9 Node( int hash, K key, V value, Node<K,V> next) { 10 this .hash = hash; 11 this

Java ConcurrentModificationException异常原因和解决方法

风格不统一 提交于 2020-08-15 12:52:02
ava ConcurrentModificationException异常原因和解决方法   在前面一篇文章中提到,对Vector、ArrayList在迭代的时候如果同时对其进行修改就会抛出java.util.ConcurrentModificationException异常。下面我们就来讨论以下这个异常出现的原因以及解决办法。   以下是本文目录大纲:   一.ConcurrentModificationException异常出现的原因   二.在单线程环境下的解决办法   三.在多线程环境下的解决方法   若有不正之处请多多谅解,并欢迎批评指正   请尊重作者劳动成果,转载请标明原文链接:   http://www.cnblogs.com/dolphin0520/p/3933551.html 一.ConcurrentModificationException异常出现的原因   先看下面这段代码: 1 2 3 4 5 6 7 8 9 10 11 12 public class Test { public static void main(String[] args) { ArrayList<Integer> list = new ArrayList<Integer>(); list.add( 2 ); Iterator<Integer> iterator = list

内核交互 netlink,检测部分进程死亡和启动。

萝らか妹 提交于 2020-08-15 11:49:54
和内核交互 netlink netlink 内核和用户进程交互 用户空间用的是 socket ,内核空间用的是内部 API 和一个模块。 向下兼容。 面向数据包的应用。即 SOCK_RAW and SOCK_DGRAM 函数原型 #include <asm/types.h> #include <sys/socket.h> #include <linux/netlink.h> netlink_socket = socket(AF_NETLINK, socket_type, netlink_family); socket_type SOCK_RAW and SOCK_DGRAM 对于 netlink 都是一样的。 netlink_family 选择内核模块或者说 netlink 组 NETLINK_ROUTE 接收路由信息,更新链接信息,更新路由表,网络邻居,排队规则,拥塞等等。 NETLINK_SELINUX linux 事件通知 NETLINK_AUDIT 审计模块,用于检测统计内核的操作,比如杀死进程,退出等。 aditctl NETLINK_CONNECTOR 内核链接器 5.2 版本及以前 略 netlink 包协议栈 一个或多个头部 struct nlmsghdr struct nlmsghdr { __u32 nlmsg_len; /* Length of message

java-上转型对象&抽象类-学习记录

六月ゝ 毕业季﹏ 提交于 2020-08-15 09:53:27
上转型对象: 如果B类是A类的子类(或间接子类),当用子类创建对象b并将这个对象的引用放到父类对象a中时,如: A a; a = new b() 或 A a; B b = new B(); a = b; 则称 a是b的上转型对象。 对象b的上转型a的实体是有子类B创建的,但是上转型对象会失去子类B的一些属性和功能。 上转型对象具有以下 特点 上转型对象不能操作子类新增加的成员变量,不能使用子类新增的方法。即为较子类B失去一些属性和功能,这些属性和功能是新增的。 上转型对象可以操作子类继承或隐藏的成员变量,也可以使用子类继承的或重写的方法。即为上转型对象可以操纵父类原有的属性和功能,无论这些方法是否被重写。 上转型对象调用方法时,就是调用子类继承和重写过的方法。而不会是新增的方法,也不是父类原有的方法。 可以将对象的上转型对象再强制转换到一个子类对象,强制转换过的对象具有子类所有属性和功能。 注意: 1.不可以将父类对象引用赋给子类。 2.如果子类重写了父类的静态方法(static),那么子类对象的上转型对象不能调用子类重写的静态方法,只能调用父类的静态方法。 抽象类: 用关键字abstract修饰的类称为抽象类, 如: abstract class A{ ... } 用关键字abstract修饰的方法称为抽象方法, 如: abstract int way (int x , int

LinkedList源码分析

非 Y 不嫁゛ 提交于 2020-08-15 09:20:48
/** * 1、是否允许空:允许 * <p> * 2、是否允许重复数据:允许 * <p> * 3、是否有序,有序的意思是读取数据的顺序和存放数据的顺序是否一致:无序 * <p> * 4、是否线程安全:非线程安全 * <p> * 5、底层数据结构:双向链表。实现了Deque这个接口,所以也可以当栈和队列使用 */ package java.util ; import java.util.function.Consumer ; public class LinkedList<E> extends AbstractSequentialList<E> implements List<E> , Deque<E> , Cloneable , java.io.Serializable { /** * 元素个数 */ transient int size = 0 ; /** * 指向首节点 * Pointer to first node. * Invariant: (first == null && last == null) || * (first.prev == null && first.item != null) */ transient Node<E> first ; /** * 指向尾结点 * Pointer to last node. * Invariant: (first ==

常用排序算法

一个人想着一个人 提交于 2020-08-15 08:56:37
语雀入口    https://www.yuque.com/along-n3gko/ezt5z9 冒泡排序 比较相邻的两个元素,如果前一个比后一个大,则交换位置。 比较完第一轮的时候,最后一个元素是最大的元素。 这时候最后一个元素是最大的,所以最后一个元素就不需要参与比较大小。 1 let arr = [1, 5, 8, 22, 66, 55, 0, 1, 22, 4, 88, 999 ]; 2 let sortArr = (arr) => { 3 let temp = null ; 4 for (let i = 0; i < arr.length; i++ ) { 5 for (let j = i + 1; j < arr.length; j++ ) { 6 if (arr[i] > arr[j]) { 7 temp = arr[i]; 8 arr[i] = arr[j]; 9 arr[j] = temp; 10 } 11 } 12 } 13 return arr; 14 } sort排序 arrayObject(sortby) 默认是按照字符串UniCode编码排序 字符串排序 1 let next = ['a', 'c', 'g', 'h', 'b', 'e' ]; 2 3 next.sort(); 4 5 // ['a', 'b', 'c', 'e', 'g', 'h' ]

【LeetCode】 66 排序链表

倾然丶 夕夏残阳落幕 提交于 2020-08-15 08:12:22
题目: 对于链表相关的代码初始化、遍历、添加还不熟练 解题思路: 归并排序(递归法) https://leetcode-cn.com/problems/sort-list/solution/sort-list-gui-bing-pai-xu-lian-biao-by-jyd/ 代码: class Solution { public ListNode sortList(ListNode head) { if (head == null || head.next == null) return head; ListNode fast = head.next, slow = head; while (fast != null && fast.next != null) { slow = slow.next; fast = fast.next.next; } ListNode tmp = slow.next; slow.next = null; ListNode left = sortList(head); ListNode right = sortList(tmp); ListNode h = new ListNode(0); ListNode res = h; while (left != null && right != null) { if (left.val < right

腾讯云数据库被黑客攻击,这点数据能价值零点几个比特币?

 ̄綄美尐妖づ 提交于 2020-08-15 08:12:04
到底是云不安全,还是数据库不安全? 这段时间想做个小网站,用来自用,于是在阿里云与腾讯云之间,选择从腾讯云购入一款云服务器来运行自己的小网站(主要是便宜)。 在项目已经安全运行了一段时间后,周一数据库报错,于是上服务器上面检查,就看到数据库成了这个样子。 内容粘出来, To recover your lost databases and avoid leaking it: visit http://hn4wg4o6s5nc7763.onion and enter your unique token *** and pay the required amount of Bitcoin to get it back. Databases that we have: stock. Your databases are downloaded and backed up on our servers. If we dont receive your payment in the next 9 Days, we will sell your database to the highest bidder or use them otherwise. To access this site you have use the tor browser https://www.torproject

MySQL安装指导文档

半城伤御伤魂 提交于 2020-08-15 07:59:52
MySQL 是最流行的关系型数据库管理系统,可以在本地搭建一个mysql的环境,便于学习。 windows7/windows10 5.7.26 安装 mysql 前环境准备工作   1) 要有 Net framework 和 Microsoft V C 2015 的环境 (在控制面板 -> 程序和功能中 可以查看)   2) 没有此环境,则可以先将这两个环境装好 M ysql 服务端安装 M ysql 下载,地址: https://dev.mysql.com/downloads/mysql/ Mysql可视窗口工具:navicat免破解版,百度网盘链接:https://pan.baidu.com/s/1CftmvCC5-q55GVRhDyDWgw 提取码:x057 建议 : 最好不要下载最新版本 , 我们这里下载的是 5.7.26 的版本 双击打开下载文件,双击图标开始安装 进入安装许可协议界面,勾选接受,点击 n ext 选取类型界面, 选择 custom ,点击 next 选择产品,添加 MySQL Server 5.7 x64, ySQL Workbench 8.0-x64, Connector J 8.0 . 16-x86, 点击 next 点击 execute , 安装 v c++ 环境,环境安装好之后点击 n ext 开始安装 my sql 注意 : 如果 status

数据结构3-关于链表的删除算法自己的思考

醉酒当歌 提交于 2020-08-15 07:40:39
初始条件:1.带有头结点的链表 2。删除位置i 基本操作:p指向某一个结点,可以删除它后面的那个结点 执行的操作是p->next=p->next->next 要删除第i个结点 就要找到第i-1个结点 初始化:1.p=L 指向头结点 2.j=1 寻找第i-1个结点   while( j<i ){     p=p->next;     j++;   } i的不同情况:1.i<1 此时p指向头结点 2. 1<=i<=length 正常执行 3.i=length+1 正常执行 p指向最后一个结点 3.i>length+1 会出现空指针异常 避免4出现的空指针异常 以及 3在后续操作会出现的空指针异常 加入条件 p->next 不为空   while( j<i && p->next){     p=p->next;     j++;   } 排除1,3,4:   if(j>i || p->next){     return ERROR;   } 删除结点:   p->next=p->next->next 来源: oschina 链接: https://my.oschina.net/u/4355040/blog/4333716