java
鲍春海
我们所知的仅是沧海一粟,我们不知的犹如汪洋大海
展开
-
判断相等重写equals和重写hashCode的原因
从开始学习编程,老师或者各种书上都说重写equals就要重新hashCode。但是为什么一定要重写hashCode呢?似乎直接重新equals方法,也是可以判断2个对象的相等。其中equals与hashCode在Object中如下:其中,对于hashCode:返回对象的hash值,是为了像hashMap这类集合提供更好的支持equals方法中相等,hashCode一定相等;hashCode相等,equals方法不一定相等;hashCode不相等,equals方法一定不相等;从这里其实就可以看到,原创 2022-07-07 14:19:40 · 290 阅读 · 0 评论 -
位运算的一些应用(二)
在java里int的范围是 [−~],共个数,占32个字节,其中第一位是符号位 ,1表示负数,0表示整数。符号 名称 作用 例 & 与 同1为1,其他为0 1&2 结果为0 | 或 不同为1,同1为1,同0为0 1|2 结果为3 ! 非 逻辑取反 !true结果为false ~ 取反 原1为0,原0为1 ~1结果为-2 ^ 异或 相同为0,不同为1...原创 2022-05-18 17:27:38 · 283 阅读 · 0 评论 -
java new对象的时候发生了什么
User user=new User();当虚拟机遇到一个new指令的时候,首先回去常量池中寻找这个类的符号引用,找不到就会执行类加载过程;能找到就会对类进行内存分配。原创 2022-05-12 20:41:22 · 175 阅读 · 0 评论 -
volatile为什么不能保证原子性
volatile变量不能保证原子性原创 2022-04-22 16:49:59 · 3253 阅读 · 0 评论 -
HashMap在jdk1.8中的实现原理(一)
jdk1.8相对于1.7,数据结构从数组+链表变为,数据+链表|红黑树一。主要属性// 初始容量,默认16static final int DEFAULT_INITIAL_CAPACITY = 1 << 4; // aka 16// 最大容量,2的30次幂1073741824static final int MAXIMUM_CAPACITY = 1 << 30;// 负载因子0.75 static final float DEFAULT_LOAD_FACTO原创 2021-11-22 23:28:27 · 350 阅读 · 0 评论 -
一个长字符串中含多个连续和不连续的空格,求不含空格的最长字符串长度,要求算法尽可能最优。例如输入:“a1 123# abc“,结果:4;
题目:一个长字符串中含多个连续和不连续的空格,求不含空格的最长字符串长度,要求算法尽可能最优。例如输入:"a1 123# abc",结果:4;package com;import java.util.Random;public class StringAlgorithm { public static void main(String[] args) { for (int i = 0; i < 1; i++) { String s =原创 2021-11-02 22:51:37 · 101 阅读 · 0 评论 -
JVM调优必备理论知识-GCCollector
目录准备知识:一、常用的垃圾回收算法一)Mark-Sweep(标记清楚算法)二)Copying(拷贝算法)三)Mark-Compact(标记压缩)二、常用的垃圾回收器准备知识:存活性分析(怎么找到垃圾):1.Reference Count引用计数对象被引用,计数器加一,如果数值减到0,就判断这个对象是垃圾,可以被回收。Objective-C使用这种方式 图1-12.Root Searching根可达算法像(图1-2...原创 2020-10-26 23:50:50 · 209 阅读 · 0 评论 -
验证Intel CPU的指令重排序(乱序执行),及volatile的禁止指令重排序功能
在接触多线程的过程中,都会接触到volitile关键字,作用是禁止cpu指令重排序,和保证线程间的可见性。如何验证cpu存在指令重排序的呢?国外有个哥们用C做过实验,这里用java做一次https://preshing.com/20120515/memory-reordering-caught-in-the-act//** * 测试cpu的指令重排序功能(乱序执行) * @author Administrator */public class ThreadVolitile {原创 2020-09-19 12:25:44 · 1012 阅读 · 2 评论 -
jdk1.8中stream的常用Api使用记录
Stream(流)是一个来自数据源的元素队列并支持聚合操作元素是特定类型的对象,形成一个队列。 Java中的Stream并不会存储元素,而是按需计算。 数据源流的来源。 可以是集合,数组,I/O channel, 产生器generator 等。 聚合操作类似SQL语句一样的操作, 比如filter, map, reduce, find, match, sorted等。和以前的Collection操作不同, Stream操作还有两个基础的特征:Pipelining: 中间操作都会返回流对象本..原创 2020-08-22 22:23:30 · 353 阅读 · 1 评论