自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 单例模式最佳实践及破环单例的几种可能方式及解决方案

这种方式,虽然返回的是我们创建过的单例对象,但是实际上会在内存中生成了一个对象,只是没有返回使用到而已,这种方式有导致内存分配开销增大的风险(实际上无所谓),就算不是单例,也会生成一个对象,而且还存在引用,这种都不会存在引用,更容易被垃圾回收机制释放内存。不同的类加载器,会重复加载一个类,目前没有办法阻止不同类加载器,重复创建一个类。但是不同的类加载器,有不同的命名空间,生成不同的class对象,表面上看,是生成了两个对象,但是这两个对象属于不同的class对象,且无法相互强转,不算是两个相同的实例。

2024-06-02 00:25:26 628

原创 new ArrayList()和Arrays.asList()的底层源码区别

new ArrayList()和Arrays.asList()的底层源码区别1. 首先 Arrays.asList()创造的对象不可添加数据(注意)提示:Arrays.asList()会返回一个 ArrayList<>()对象,但这个对象的路径是在java.util.Arrays.ArrayList,而不是我们熟悉的java.util.ArrayList下的ArrayList;为什么Arrays.asList()创造出来的List不可添加数据?我们知道,List的底层是一个数组,而Arr

2021-09-27 22:24:39 779

原创 Java集合-Vector源码分析

Java集合-Vector源码分析1. 除了它是线程安全的,它和ArrayList还有什么区别?Vector在第一次扩容和ArrayList有区别VectornewCapacity =oldCapacity + ((capacityIncrement > 0)?//如果自增容量小于等于0,则新容量为原来的2倍capacityIncrement : oldCapacity);ensureCapacity(int minCapacity)方法://传入最小需要使用的容量 // 如果第一

2021-06-27 16:37:10 83

原创 第一个错误的版本

这是个很简单的题目,但是太久没做这种题了,犯了一个非常致命的错误。题目如下时间超时的代码如下黄色区域这样写的话,当数值非常大时,r+l会超出整形范围,造成溢出,当溢出时,m会从int的最小值重新开始取值,所以会导致循环没有结束,导致超时。...

2021-06-13 19:43:32 94

原创 设计模式-工厂模式

一、简单工厂模式简单工厂模式:定义一个工厂类,它可以根据参数的不同返回不同类的实例,被创建的实例通常都具有共同的父类。因为在简单工厂模式中用于创建实例的方法是静态(static)方法,因此简单工厂模式又被称为静态工厂方法模式。二、工厂方法模式工厂方法模式不再提供一个统一的工厂类来创建所有的产品对象,而是针对不同的产品提供不同的工厂,比如课程对象由课程工厂创建,学生对象由学生创建。其原理是定义一个用于创建对象的接口,让子类决定将哪一个类实例化。但一旦需要创建的对象过多,那么工厂类容易过多,增加复杂度。

2021-06-01 17:40:36 88

原创 Java核心基础知识汇总(二)

1、hashCode 与 equals 和“==”讲解hashCode():该方法通常用来将对象的内存地址转换为整数之后返回。hashCode()是Objetc对象里的方法,所以他能快速判断两个对象是否相等,大部分的对象的hashCode对象是不相等的,因为hashCode的值跟内存地址有关,如果我们重写了hashCode方法,导致对象hashCode值相等,再用equals()方法判断是否相等。这样我们就大大减少了 equals 的次数,相应就大大提高了执行速度。2、hashCode()与 equa

2021-05-24 19:03:49 58

原创 Java核心基础知识汇总(一)

一.JDK,JRE,JVM三者的联系JDK开发工具箱,包含JREJREJava程序运行的环境依赖都在jre中JVM负责把Java程序(.class文件)编译成机器语言,并且进行垃圾回收等操作,是java程序可以跨平台运行的原因。二.Java面向对象编程的三大特性封装性把一个对象的属性私有化,把想提供给外界的属性以方法的形式暴露出来。继承(1)子类只能由一个父类(但是所有类都默认继承Object类)(2)子类拥有父类非私有方法(3)子类可以用super关键字调用父类成员或

2021-05-17 22:35:09 107

空空如也

空空如也

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

TA关注的人

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