![](https://img-blog.csdnimg.cn/20210717181714897.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
JavaSE基础
文章平均质量分 89
知识巩固
zsxfa
这个作者很懒,什么都没留下…
展开
-
ArrayList面试题
ArrayList1. ArrayList频繁扩容导致添加性能急剧下降,如何处理?2. ArrayList插入或删除元素一定慢么?3. ArrayList是线程安全的么?4. 如何复制某个ArrayList到另一个ArrayList中去?5. 已知成员变量集合存储N多用户名称,在多线程的环境下,使用迭代器在读取集合数据的同时如何保证还可以正常的写入数据到集合?6. ArrayList 和 LinkList区别?1. ArrayList频繁扩容导致添加性能急剧下降,如何处理?构造具有指定初始容量的空列表。原创 2021-04-26 17:54:59 · 533 阅读 · 2 评论 -
ArrayList底层详解
ArrayList底层详解一、ArrayList集合底层数据结构二、ArrayList继承关系1、Serializable标记性接口2、Cloneable 标记性接口浅拷贝深拷贝3、RandomAccess标记接口4、AbstractList抽象类三、ArrayList源码一、ArrayList集合底层数据结构ArrayList集合介绍List 接口的可调整大小的数组实现。数组:一旦初始化长度就不可以发生改变数组结构介绍增删慢:每次删除元素,都需要更改数组长度、拷贝以及移动元素位置。查询快:原创 2021-04-26 12:15:07 · 4689 阅读 · 0 评论 -
LinkedList底层详解
LinkedList详解List引发的思考List接口LinkedList继承体系AbstractList抽象类AbstractSequentialListLinkedList的底层实现Node的理解双向链表并发修改异常List引发的思考思考:LinkedList中实现的方法为什么和ArrayList中相似呢?因为它们都是属于单列集合下的,所以它们实现的方法都是一致的,为了让它们的体系完整,进而设计出了List接口,让LinkedList和ArrayList实现List接口。List接口包含的原创 2021-04-24 20:07:54 · 3789 阅读 · 0 评论 -
IDEA中的代码折叠
这里使用的是2020 1.2版本选中需要折叠的代码(Ctrl + Shift + z)点击过后是这样Description可以自己自定义,这里我设置成了—折叠代码折叠过后是这样结果不会受影响原创 2020-12-19 17:54:58 · 336 阅读 · 1 评论 -
JUC
Java JUC1.Java JUC 简介2.volatile 关键字-内存可见性3.原子变量-CAS算法原子变量4.ConcurrentHashMap 锁分段机制5.CountDownLatch 闭锁6.实现Callable 接口多线程详解7.Lock 同步锁多线程详解8.Condition 控制线程通信 线程按序交替9.ReadWriteLock 读写锁10.线程八锁11.线程池12.线程调度13.ForkJoinPool 分支/合并框架工作窃取1.Java JUC 简介在Java 5.0 提供了原创 2020-12-18 22:40:26 · 70 阅读 · 0 评论 -
使线程按序交替执行
Condition 接口描述了可能会与锁有关联的条件变量。这些变量在用 法上与使用 Object.wait 访问的隐式监视器类似,但提供了更强大的 功能。需要特别指出的是,单个 Lock 可能与多个 Condition 对象关 联。为了避免兼容性问题,Condition 方法的名称与对应的 Object 版 本中的不同。在 Condition 对象中,与wait、notify 和 notifyAll 方法对应的分别是await、signal 和 signalAll。Condition 实例实质上被绑.原创 2020-12-17 19:03:52 · 96 阅读 · 0 评论 -
AtomicInteger类下的incrementAndGet
首先要了解一下Java中的原子性的含义Java中的原子性就是指操作不可再分,在多线程操作中,具有原子性的量,同一时刻只能有一个线程来对它进行操作。例如a=1是原子性操作,a++和a+=1不是原子性操作类似"a += b"这样的操作不具有原子性,在某些JVM中"a += b"可能要经过这样三个步骤: (1)取出a和b (2)计算a+b (3)将计算结果写入内存Java中的Atomic包Java从JDK1.5开始提供了java.util.concurrent.atomi.原创 2020-08-19 16:47:08 · 1914 阅读 · 0 评论 -
volatile关键字的作用
保持内存可见性(Memory Visibility):所有线程都能看到共享内存的最新状态。Java通过几种原子操作完成工作内存和主内存的交互: lock:作用于主内存,把变量标识为线程独占状态。 unlock:作用于主内存,解除独占状态。 read:作用主内存,把一个变量的值从主内存传输到线程的工作内存。 load:作用于工作内存,把read操作传过来的变量值放入工作内存的变量副本中。 use:作用工作内存,把工作内存当中的一个变量值传给执行引擎。 assign:作用工作内存,原创 2020-08-10 18:21:22 · 119 阅读 · 0 评论 -
使用反射完成对象拷贝
步骤:创建一个User类生成一个User类的对象获取User类对象的Class对象通过Class对象创建一个目标对象通过Class对象获取User类的get,set方法用源对象的get方法获取到的属性值赋给目标对象的set方法public class CopyTest { public static void main(String[] args) { User user = new User("张三", 22, "男");原创 2020-08-09 20:55:38 · 145 阅读 · 0 评论 -
多线程
程序、进程、线程的理解程序(programm)概念:是为完成特定任务、用某种语言编写的一组指令的集合。即指一段静态的代码。进程(process)概念:程序的一次执行过程,或是正在运行的一个程序。说明:进程作为资源分配的单位,系统在运行时会为每个进程分配不同的内存区域线程(thread)概念:进程可进一步细化为线程,是一个程序内部的一条执行路径。说明:线程作为调度和执行的单位,每个线程拥独立的运行栈和程序计数器(pc),线程切换的开销小。协程(Coroutines原创 2020-08-05 09:01:47 · 87 阅读 · 0 评论 -
IO流
File类的使用:java.io.File类:文件和文件目录路径的抽象表示形式,与平台无关。File能新建、删除、重命名文件和目录,但File不能访问文件内容本身。当想访问文件内容本身的时候,就需要使用输入/输出流。想要表示一个真实存在的文件或目录,就必须有一个File对象,但是Java程序中的一个File对象,可能没有一个真实存在的文件或目录。File对象可以作为参数传递给流的构造器。常用构造器:public File (String pathname)如果pathaname是相对路径原创 2020-08-01 22:13:20 · 63 阅读 · 0 评论 -
HashMap、Hashtable、ConcurrentHashMap三者间的异同
HashMap和Hashtable的区别答:1.HashMap与Hashtable都实现了Map接口。由于HashMap的非线程安全性,效率上可能高于Hashtable。Hashtable的方法是Synchronize的,而HashMap不是,在多个线程访问Hashtable时,不需要自己为它的方法实现同步,而HashMap 就必须为之提供外同步。2.HashMap允许将null作为一个entry的key或者value,而Hashtable不允许。3.HashMap把Hashtable的转载 2020-07-28 22:30:52 · 180 阅读 · 0 评论 -
浅拷贝与深拷贝的区别
什么是浅拷贝与深拷贝?在java中,如果想要完成拷贝,首选需要重写Object中clone方法克隆的类必须实现一个Cloneable的接口java.lang.Cloneable,注意该接口是一个标记接口,里面没有任何方法java.io.Serializable,该接口也是标记接口,用来申明是否对象序列化浅拷贝浅拷贝是按位拷贝对象,它会创建一个新对象,这个对象有着原始对象属性值的一份精确拷贝。如果属性是基本类型,拷贝的就是基本类型的值;如果属性是内存地址(引用类型),拷贝的就是内存地址 ,因原创 2020-07-28 19:00:21 · 176 阅读 · 0 评论 -
集合
Java集合可分为Collection和Map两种体系(JDK提供的集合API位于java.util包内)Collection接口:单列数据,定义了存取一组对象的方法的集合List:元素有序、不可重复的集合Set:元素无序、不可重复的集合Map接口:双列数据,保存具有映射关系“key-value对” 的集合Collection接口:单列集合,用来存储一个一个的对象Collection集合与数组间的转换**集合 —>数组:toArray()Object[] arr原创 2020-07-26 09:09:18 · 83 阅读 · 0 评论 -
Java常用类
String 类String:字符串,使用一对""引起来表示。 1.String声明为final,表示不可被继承 2.String实现了Serializable接口:表示字符串是支持序列化的。 实现了Comparable接口:表示String可以比较大小 3.String内部定义了final char[] value用于存储字符串数据 4.通过字面量的方式(区别于new给一个字符串赋值,此时的字符串值声明在 字符串常量池中)。 5.字符串常量池中是不会存储相同内原创 2020-07-24 22:42:12 · 89 阅读 · 0 评论 -
执行throw后 后面代码还会执行吗?
1.当我们对throw的对象进行try catch之后public void re(int i) { if (i > 5){ this.i = i; }else { try { throw new Exception("数据非法!"); } catch (Exception e) { e.printStackTrace();原创 2020-07-23 21:10:58 · 14986 阅读 · 0 评论 -
重载与重写
方法的重写Override和重载Overload是Java多态性的不同表现。重写Overrideoverride 或 overwrite是父类与子类之间多态性的一种表现重载Overload是一个类中多态性的一种表现。1.如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写 (Overriding)。2.子类的对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义如同被"屏蔽"了。如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型,则称为..原创 2020-07-22 13:12:04 · 86 阅读 · 0 评论 -
有关反射的理解
反射的定义Reflection(反射)是被视为动态语言的关键,反射机制允许程序在执行期借助于Reflection API取得任何类的内部信息,并能直接操作任意对象的内部属性及方法。 java.lang.Class:反射的源头 java.lang.reflect.Method java.lang.reflect.Field java.lang.reflect.Constructor ....Class类的理解1.类的加载过程:程序经过javac.exe命令以后,会生成一原创 2020-07-19 20:06:32 · 165 阅读 · 0 评论 -
关于多态的理解
什么是多态多态性,是面向对象中最重要的概念,在Java中的体现: 对象的多态性:父类的引用指向子类的对象 可以直接应用在抽象类和接口上Java引用变量有两个类型: 编译时类型和运行时类型。编译时类型由声明 该变量时使用的类型决定。运行时类型由实际赋给该变量的对象决定。 简 称:编译时,看左边;运行时,看右边。若编译时类型和运行时类型不一致,就出现了对象的多态性(Polymorphism)多态情况下,“看左边”:看的是父类的引用(父类中不具备子类特有的方法)“看右边”:看原创 2020-07-17 20:33:32 · 310 阅读 · 0 评论 -
子类对象实例化过程的理解
提到子类对象的实例化,就得先对this 与super做一个回顾1.this关键字1.可以调用的结构:属性、方法;构造器2.this调用属性、方法: this理解为:当前对象 或 当前正在创建的对象 1> 在类的方法中,我们可以使用"this.属性"或"this.方法"的方式,调用 当前对象属性或方法。但是,通常情况下,我们都择省略"this."。 特殊情况下,如果方法的形参和类的属性同名时,我们必须显式 的使用"this.变量"的方式,表明此变量是属性,而非形参。原创 2020-07-16 22:46:43 · 328 阅读 · 0 评论 -
数组
特点:一维数组的声明与初始化: int num;//声明 num = 10;//初始化 int id = 1001;//声明 + 初始化 int[] ids;//声明 //1.1 静态初始化:数组的初始化和数组元素的赋值操作同时进行 ids = new int[]{1001,1002,1003,1004}; //1.2动态初始化:数组的初始化和数组元素的赋值操作分开进行 String[] names = new String[5]; int[] arr4原创 2020-07-15 13:27:44 · 75 阅读 · 0 评论 -
Java-基本语法
Java关键字定义:被Java语言赋予了特殊含义,用做专门用途的字符串(单词)特点:关键字中所字母都为小写Java标识符的使用- 涉及到的结构:包名、类名、接口名、变量名、方法名、常量名- 命名规则:* 由26个英文字母大小写,0-9,_或$组成* 数字不可以开头* 不可以使用关键字和保留字,但能包含关键字和保留字* Java中严格区分大小写,长度无限制* 标识符不能包含空格- 规范* 包名:多单词组成时所有字母都小写:xxxyyyzzz* 类名、接口名:多单词组成时,所原创 2020-07-14 23:44:09 · 100 阅读 · 0 评论 -
Java语言基础常识
>是 SUN( S tanford U niversity N etwork ,斯坦福大学网络公司 ) 1995 年推出的一门高级 编程语言。>是 一种面向 Internet 的 编程语言 。 Java 一开始富有吸引力是因为 Java 程序可以在 Web 浏览器中运行。 这些 Java 程序被 称为 Java 小程序( applet )。 applet 使用现代的图形用户界面与 Web 用户进行交互。 applet 内嵌在 HTML 代码中。>随着 Java 技术在 web 方面的不原创 2020-07-14 22:38:31 · 133 阅读 · 0 评论