自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(15)
  • 收藏
  • 关注

原创 JAVA:HashMap保证线程安全的方法

特点(1)适用于高并发场景。(2)key是有序的。(3)基于跳表结构(Skip List)实现,查询、插入、删除的时间复杂度都是O(logn)。(3)key和value都不能为null。ConcurrentSkipListMap是在JDK1.6中新增的,为了对高并发场景下的有序Map提供更好的支持。

2024-10-07 21:12:26 50

原创 hash冲突的解决办法

当关键字key的哈希地址p=H(key)发生冲突,以p为基础,产生另一个哈希地址p1,若p1仍然冲突,再以p1基础,计算出p2,以此类推,则到pi不冲突。提供多个哈希函数,如果第一个哈希函数计算出来key的哈希值冲突了,则使用第二个哈希函数计算key的哈希值。即 Hi = (H(key) + di) % m (i = 1, 2, 3 ... n)将哈希表分为基本表和溢出表,凡是和基本表发生冲突的元素,一律填入溢出表。1)适用总数经常变化的情况(因为链表中各结点是动态申请的)。优点:不易产生聚集。

2024-10-07 20:44:42 149

原创 JAVA:HashMap的原理

扩容机制:初始数组长度为16,若链表长度大于8且数组长度小于64则进行扩容;若链表长度大于8且数组长度大于等于64时链表则会转化为红黑树;若红黑树节点个数小于等于6,则退化成链表。HashMap本质就是数组,将key的hash值对数组长度取模作为数组下标,将value作为数组值,如果key重复,则将其对应值放入链表中。

2024-10-05 22:12:20 150

原创 JAVA:HashMap、TreeMap、LinkedHashMap的异同

4)HashMap和LinkedHashMap均允许key和value为null值(只允许存在一个null值的key,若多个则覆盖),TreeMap不允许key为null。3)底层结构:HashMap(数组+链表+红黑树),TreeMap(红黑树),LinkedHashMap(HashMap+双向链表)。2)HashMap和LinkedHashMap不支持key排序,但TreeMap支持key排序,也可自定义排序。1)都属于Map,都是key-value结构存储,因此key不允许重复。

2024-10-04 20:53:51 331

原创 JAVA:集合扩容机制

1、ArrayList和Vector2、HashSet、HashMap和HashTable3、LinkedList、LinkedHashSet、LinkedHashMap不存在扩容。

2024-10-04 20:16:24 396

原创 JAVA:ArrayList保证线程安全的方法

原理:写入的时候是重开一个数组将原数组复制到新数组,写入后将引用指向新数组。示例:List list = Collections.synchronizedList(new ArrayList());示例:CopyOnWriteArrayList list = new CopyOnWriteArrayList();示例:ArrayList list = new vector();原理:方法都加上了synchronized修饰。原理:使用了synchronized关键字。

2024-10-04 19:55:22 181

原创 JAVA引用类型:强引用、软引用、弱引用、虚引用

虚引用:无法通过虚引用获取一个对象的真实引用,必须配合ReferenceQueue一起使用。当GC回收一个对象时,如果发现它有虚引用,就会在回收之前将虚引用加入队列中。软引用:只有在内存空间不足时才会回收被引用的对象,当内存空间不足时,触发GC,如果GC后内存还是不足,JVM会把软引用包裹的对象干掉。从jdk1.2开始,对象引用就被划分为4中类型:强引用、软引用、弱引用、虚引用。只要某对象被强引用,即使内存空间不足JVM也不会回收改对象。弱引用:不管内存是否充足,只要发生GC,弱引用就被回收。

2024-10-02 12:51:03 154

原创 JAVA集合基础:ArrayList和LinkedList的异同,List和Set的区别

JAVA集合

2024-10-02 10:47:38 91

原创 JAVA基础--每日一题:Class.forName()和Class的区别

JAVA反射

2024-10-02 10:23:53 112

原创 JAVA基础--每日一题:JDK8新特性

接口允许Default和static;lambda表达式;strean流操作;时间API(LocalDateTime)CompletableFuture。

2024-09-27 20:39:21 115

原创 JAVA基础--每日一题:JAVA-IO-字节流和字符流的区别

字节流 字符流 操作基本单元 字节 字符 是否使用缓冲 否 是,频繁IO操作一个资源,则会将该资源暂时存于内存中。 存在位置 可存于文件和内存中 内存 使用场景 适合操作文本文件之外的文件。如:图片、音频等 适合操作文本文件 相关类 InputStream、OutputStream Reader、Writer

2024-09-27 20:36:45 113

原创 JAVA基础--每日一题:Error、Exception与RuntimeException的区别

RuntimeException处与不处理都可,而对其他Exception而言,JVM要求程序员必须捕获(try..catch..)或声明抛出(throws)。Exception又分为:RuntimeException(受检查Exception)和其他Exception(非受检查Exception)。1)Error:JVM内部严重问题,比如:资源不足等,无法恢复。2)Exception:JVM通过处理还可以回到正常执行流程。处理方法:程序员不用处理。

2024-09-27 20:30:19 102

原创 JAVA基础--每日一题:static的用法

static不能修饰普通类,但可以修饰内部类,避免我们使用内部类而不使用外部类导致内存浪费,甚至内存溢出。可直接通过对象名.方法名调用改方法,减少了频繁new对象产生的时间和空间上的浪费。对象就不再拥有改属性,属性归类管理,即多个对象只拥有一个属性。改代码块在类的加载时候就会被执行。

2024-09-26 20:26:09 70

原创 JAVA基础--每日一题:创建String对象的个数

(3)因为常量池已经有"abc"了,所以不再在常量池创建,所以只需再通过new对象在堆区创建一个String对象存储"abc"。(2)"abc"已经在常量池中,故只需再创建"def"和"abcabcdef"存放常量池中,s2指向"abcabcde。(2)通过new对象在堆区中创建一个String对象存储"abc"。(1)创建了"abc"存放于常量池中,s1指向"abc";例:String s = "abc" + "def";(1)在常量池中创建"abc"和"def"。下列语句一共创建多少个对象?

2024-09-26 20:15:14 208

原创 JAVA基础----每日一题:==和equals有什么区别?

1、如果equals未被重写,其实调用的是父类Object的equals方法,其内部依然用==比较。==:若为基本数据类型,==比较的是值是否相同;若为引用类型,==比较的是引用地址是否相同。2、若重写equals方法,则按重写的equals方法进行比较。equals:比较的是对象的内容是否相同。

2024-09-26 19:50:51 84

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除