java
siyue521
这个作者很懒,什么都没留下…
展开
-
HashMap是线程安全的吗?有什么线程安全的方法
总结HashMap在并发场景中不是线程安全的。比如A希望插入一个key-value对到HashMap中,当获取到对应的链表结点位置时,此时线程A的时间片用完了,而此时线程B被调度得以执行,可能线程B占用了A计算得到的位置,插入了数值。而线程A被切换回来的时候,不知道B已经插入了元素,仍然将元素插入此前计算好的位置,这样就会将B线程的插入记录覆盖掉了,这对应了多线程的put可能导致元素的丢失;JDK1.7 当扩容的时候,存在 Entry 链死循环和数据丢失问题(线程1的put和线程2的get并发,可能导致原创 2021-07-06 21:52:58 · 9498 阅读 · 0 评论 -
浅析Java集合框架
Set:无序,不可重复的集合List:有序,重复的集合Map:具有映射关系的集合Queue: 队列集合Java集合和数组的区别:(1)数组长度在初始化时指定,意味着只能保存定长的数据。而集合可以保存数量不确定的数据。(2)数组元素即可以是基本类型的值,也可以是对象。集合里只能保存对象(实际上只是保存对象的引用变量),基本数据类型的变量要转换成对应的包装类才能放入集合类中.Collection接口Collection的常用方法:使用Iterator遍历集合元素Iterator接口中..转载 2021-06-30 16:42:27 · 80 阅读 · 0 评论 -
Java中的对象和引用
概述对象:一般是指某个类(class)的一个实例(instance);对象引用:在Java中,指向某个对象存储地址,也就是指向一个对象的“引用”比如:Person person = new Person("张三");new Person(“张三”);是new了Person类的一个对象(在堆上创建),而Person person是声明一个可以指向Person类对象的引用person,与下面两行代码完全相同Person person;person = new Person("张三");由此可原创 2021-06-30 15:26:59 · 352 阅读 · 0 评论 -
问什么hsahmap的容量总是2的n次幂
概述我们知道hsahmap的底层是由链表和数组构成的,为了最有效的提高数据的存取效率,hashMap每次保存数据都是分散保存在不同的index位置上。如何实现数组的散列性呢?一般的想法可以是利用key值的哈希值(hash)对数组的长度(length)取余,即hash%length。但是hashMap的源码作者是利用一种更高效的计算手段,也就是利用哈希值和数组长度的二进制表示进行位运算,具体来说就是hash&(length-1),但是必须保证length等于2的n次幂。原理因为我们知道leng原创 2021-06-28 15:36:35 · 73 阅读 · 0 评论 -
String类的.isEmpty()方法 空指针问题
最近,在实现网站国际化,从前端接受参数(字符串类型 language),在判断是否前端有参数传过来的时候,想用.isEmpty()进行判断,String language = request.getParameter("l");if(!language.isEmpty(language)){ //使用 _ 分割语言和国家 String[] s = language.split("_"); locale = new Locale(原创 2021-06-27 16:18:43 · 3461 阅读 · 0 评论 -
ArrayList和LinkedList的比较
ArrayList和LinkedList的比较回顾:List在Collection中的的框架图可以看出ArrayList、LinkedList、Vector和Stack是List的四个实现类。LinkedList是个双向链表,它同样可以被当作栈、队列或双端队列来使用。特别是作为双向链表的使用实现的原理ArrayList基于动态数组实现,LinkedList基于链表实现由二者的实现原理不难看出,ArrayList访问和更新方便(直接通过下表),但是增删比较麻烦(需要逐个移动),开销原创 2021-06-19 10:02:11 · 73 阅读 · 0 评论 -
String 为什么是不可变的?String为啥要设计为不可变的?
String为啥要设计为不可变的?1、便于实现字符串池(String pool在Java中,由于会大量的使用String常量,如果每一次声明一个String都创建一个String对象,那将会造成极大的空间资源的浪费。Java提出了String pool的概念,在堆中开辟一块存储空间String pool,当初始化一个String变量时,如果该字符串已经存在了,就不会去创建一个新的字符串变量,而是会返回已经存在了的字符串的引用。假若字符串对象允许改变,那么将会导致各种逻辑错误,比如改变一个对象会影响到另一原创 2021-06-19 09:33:42 · 397 阅读 · 0 评论 -
SSM整合-mybatis层
1. maven 的配置1.1 导入所需的依赖<dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test&l原创 2021-06-15 15:06:28 · 178 阅读 · 0 评论 -
String类型的存储方式
String类型的声明方式//方式一String str1 = "test";String str3= "test";//方式二String str2 = new String("test");System.out.println(str1 == str2);//falseSystem.out.println(str1 == str3);//true方式一 创建的对象将存在String constant pool中,JVM会首先在String constant pool 中寻找是否已经存原创 2021-06-15 14:36:50 · 1197 阅读 · 0 评论 -
力扣刷题记录
不同的二叉搜索树问题描述:给你一个整数 n ,求恰由 n 个节点组成且节点值从 1 到 n 互不相同的 二叉搜索树 有多少种?返回满足题意的二叉搜索树的种数。如:输入:n = 3输出:5解答核心:对于给定序列 1 ,2,⋯n,我们选择数字 i 作为根,则根为 i 的所有二叉搜索树的集合是左子树集合和右子树集合的笛卡尔积,对于笛卡尔积中的每个元素,加上根节点之后形成完整的二叉搜索树利用卡塔兰数 解决解题思路:动态规划设:G(n): 长度为 n 的序列能构成的不同二叉搜索树的个数。F(转载 2021-05-30 21:08:10 · 70 阅读 · 0 评论