
javase
文章平均质量分 66
这个名字先用着
这个作者很懒,什么都没留下…
展开
-
java8的stream流的使用
stream流原创 2022-11-15 10:49:25 · 158 阅读 · 0 评论 -
Stream流-详细
Java8新特性-Lambda表达式-Stream API等原创 2022-09-08 20:40:22 · 348 阅读 · 0 评论 -
java线程池详解
目录一、线程池的优势:二、线程池的架构图:三、Executors工具类中几个重点的创建线程池的方法:一、线程池的优势:为何要用线程池,总的来说有以下几个原因:总体来说,线程池有如下的优势:(1)降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。(2)提高响应速度。当任务到达时,任务可以不需要等到线程创建就能立即执行。(3)提高线程的可管理性。线程是稀缺资源,如果无限制的创建,不仅会消耗系统资源,还会降低系统的稳定性,使用线程池可以进行统一的分配,调优和监控。二、线程池原创 2022-03-28 22:56:03 · 1300 阅读 · 0 评论 -
JUC之线程通信
Java多线程的wait()方法和notify()方法这两个方法是成对出现和使用的,要执行这两个方法,有一个前提就是,当前线程必须获其对象的monitor(俗称“锁”),否则会抛出IllegalMonitorStateException异常,所以这两个方法必须在同步块代码里面调用。wait():阻塞当前线程notify():唤起被wait()阻塞的线程...原创 2022-03-04 11:19:07 · 517 阅读 · 0 评论 -
JUC之Lock接口
说明:sync的上锁和解锁是自动完成的,当然我们也可以手动上锁和解锁Lock和synchronized的选择总结来说,Lock和synchronized有以下几点不同:1)Lock是一个接口,而synchronized是Java中的关键字,synchronized是内置的语言实现;2)synchronized在发生异常时,会自动释放线程占有的锁,因此不会导致死锁现象发生;而Lock在发生异常时,如果没有主动通过unLock()去释放锁,则很可能造成死锁现象,因此使用Lock时需要在fi...原创 2022-03-04 10:19:58 · 3195 阅读 · 0 评论 -
String的intern方法
intern方法作用:简单总结就是:有,直接引用,没有,新建加入。在我们使用System.out.中的System类的时候,就默认加载了Version类考点:是否读过这些经典书原创 2022-03-03 19:11:02 · 1045 阅读 · 0 评论 -
HashMap 与 HashTable 的区别
HashMap 与 HashTable 有什么区别?线程安全: HashMap 是非线程安全的,HashTable 是线程安全的;HashTable 内部的方法基本都经过 synchronized 修饰。(如果你要保证线程安全的话就使用 ConcurrentHashMap 吧!);效率: 因为线程安全的问题,HashMap 要比 HashTable 效率高一点。另外,HashTable 基本被淘汰,不要在代码中使用它;对Null key 和Null value的支持: HashMap 中,null原创 2022-03-03 13:31:00 · 392 阅读 · 1 评论 -
哈夫曼树(Huffman Tree,霍夫曼树,赫夫曼树)哈夫曼编码
霍夫曼编码,赫夫曼编码:原创 2022-02-27 18:23:21 · 2361 阅读 · 1 评论 -
二叉树数据结构
二叉树代码演示遍历:原创 2022-02-24 19:25:43 · 274 阅读 · 0 评论 -
HashMap是怎么解决哈希冲突的
简单总结一下HashMap是使用了哪些方法来有效解决哈希冲突的:使用拉链法(使用链表)来链接拥有相同hash值的数据;使用2次扰动函数(hash函数)来降低哈希冲突的概率,使得数据分布更平均;引入红黑树进一步降低遍历的时间复杂度,使得遍历更快;什么是哈希函数?Hash,一般翻译为“散列”,也有直接音译为“哈希”的,这就是把任意长度的输入通过散列算法,变换成固定长度的输出,该输出就是散列值(哈希值);这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输原创 2022-02-24 15:16:22 · 1267 阅读 · 0 评论 -
HashMap底层实现原理
HashMap中的put()和get()的实现原理:1、map.put(k,v)实现原理:(1)首先将k,v封装到Node对象当中(节点)。(2)然后它的底层会调用K的hashCode()方法得出hashcode值。(3)通过哈希表函数/哈希算法,将hashcode值转换成数组的下标,下标位置上如果没有任何元素,就把Node添加到这个位置上。如果说下标对应的位置上有链表。此时,就会拿着k和链表上每个节点的k进行equal。如果所有的equals方法返回都是false,那么这个新的节点将被添加到链原创 2022-02-24 13:12:41 · 505 阅读 · 0 评论 -
hashcode方法和hash方法的区别
目录hashcode概念:hashcode作用:hashcode应用场景(重点,一般面试可能会问到):Hash函数:Hash函数的应用场景:hashmap源码解析(jdk1.8):hashcode概念:根据一定的规则将与对象相关的信息(比如对象的存储地址,对象的字段等)映射成一个数值,这个数值称作为(hashcode)。hashcode方法是Object中的一个方法,我们的String,Integer,等都重写了此方法。且重写规则不同。如Integer的重写hashcode方法:public原创 2022-02-24 12:10:48 · 1335 阅读 · 0 评论 -
哈希表/散列表数据结构
散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。哈希冲突也叫哈希碰撞;开放地址法中(数组一个位置存一个元素),如果元素位置顺移后,原有数组位置不够了,就需要扩充数组大小,为了减少hash冲突而扩充数组容量,可能造成内存的浪费。...原创 2022-02-23 10:47:28 · 606 阅读 · 0 评论 -
ArrayList 和 Vector 的区别是
ArrayList 和 Vector 的区别是:相同点:这两个类都实现了 List 接口(List 接口继承了 Collection 接口),他们都是有序集合,list接口下有三个实现类:ArrayList,LinkedList,Vector.不同点:线程安全:Vector 使用了 Synchronized 来实现线程同步,是线程安全的,而 ArrayList 是非线程安全的。性能:ArrayList 在性能方面要优于 Vector。扩容:ArrayList 和 Vector 都会根据实际的需原创 2022-02-22 18:09:40 · 203 阅读 · 0 评论 -
java中list,set,map集合的区别
java中list,set,map集合的区别:List:可以允许重复的对象。可以插入多个null元素。是一个有序容器,保持了每个元素的插入顺序,输出的顺序就是插入的顺序。常用的实现类有 ArrayList、LinkedList 和 Vector。ArrayList 最为流行,它提供了使用索引的随意访问,而 LinkedList 则对于经常需要从 List 中添加或删除元素的场合更为合适。Set:不允许重复对象无序容器,你无法保证每个元素的存储顺序,TreeSet通过 Comparato原创 2022-02-22 17:58:17 · 208 阅读 · 0 评论 -
ArrayList 和 LinkedList 的区别-详细版
ArrayList 和 LinkedList 的区别是什么?数据结构实现:ArrayList 是动态数组的数据结构实现,而 LinkedList 是双向链表的数据结构实现。随机访问效率:ArrayList 比 LinkedList 在随机访问的时候效率要高,因为 LinkedList 是线性的数据 存储方式,所以需要移动指针从前往后依次查找。增加和删除效率:在非首尾的增加和删除操作,LinkedList 要比 ArrayList 效率要高,因为 ArrayList 增删操作要影响数组内的其原创 2022-02-21 18:43:35 · 1215 阅读 · 0 评论 -
集合框架底层数据结构总结
集合框架底层数据结构总结:Collection:List:ArrayList:Object数组Vector:Object数组LinkedList:双向链表(JDK1.6之前为循环链表,JDK1.7取消了循环)Set:HashSet(无序,唯一):基于HashMap实现的,底层采用HashMap来保存元素LinkedHashSet:LinkedHashSet继承于HashSet,并且其内部是通过LinkedHashMap来实现的。TreeSet(有序,唯一):红黑树(自平衡的排序二叉树)。原创 2022-02-21 18:13:57 · 156 阅读 · 0 评论 -
List,Set,Map区别
Java 容器分为 Collection 和 Map 两大类,Collection集合的子接口有Set、List、Queue三种子接口。我们比较常用的是Set、List,Map接口不是collection的子接口。Collection集合主要有List和Set两大子接口:List:一个有序(元素存入集合的顺序和取出的顺序一致)容器,元素可以重复,可以插入多个null元素,元素都有索引。常用的实现类有 ArrayList、LinkedList 和 Vector。Set:一个无序(存入和取出顺序有可能不一原创 2022-02-21 15:43:59 · 253 阅读 · 0 评论 -
数组和集合的区别
集合和数组的区别:数组是固定长度的;集合可变长度的。数组可以存储基本数据类型,也可以存储引用数据类型;集合只能存储引用数据类型。数组存储的元素必须是同一个数据类型;集合存储的对象可以是不同数据类型。使用集合框架的好处:容量自增长;提供了高性能的数据结构和算法,使编码更轻松,提高了程序速度和质量;允许不同 API 之间的互操作,API之间可以来回传递集合;可以方便地扩展或改写集合,提高代码复用性和可操作性。通过使用JDK自带的集合类,可以降低代码维护和学习新API成本。原创 2022-02-21 15:30:22 · 591 阅读 · 0 评论 -
String、StringBuffer与StringBuilder之间区别和使用场景
区别:String是final修饰的,不可变,底层使用final char[]数组存储数据。每次操作都会产生新的String对象,这样会导致内存浪费的比较多。StringBuffer和StringBuilder是可变字符串,都是在原对象上进行操作,不会生成新的对象。StringBuffer是线程安全的(StringBuffer方法都是synchronized修饰的),StringBuilder是线程不安全的。StringBuilder速度更快,StringBuffer慢一点。原创 2022-02-21 14:28:57 · 384 阅读 · 0 评论 -
java反射
反射:什么是反射机制?JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。静态编译和动态编译:静态编译:在编译时确定类型,绑定对象动态编译:运行时确定类型,绑定对象反射机制优缺点:优点: 运行期类型的判断,动态加载类,提高代码灵活度。缺点: 性能瓶颈:反射相当于一系列解释操作,通知 JVM 要做的事情,性能比直接的java代码要慢很多。原创 2022-02-20 16:23:37 · 112 阅读 · 0 评论 -
单例设计模式的饿汉式和懒汉式
单例模式原创 2022-02-20 15:37:10 · 213 阅读 · 0 评论 -
BIO,NIO,AIO 的区别
BIO,NIO,AIO 有什么区别?简答:BIO:Block IO 同步阻塞式 IO,就是我们平常使用的传统 IO,它的特点是模式简单、使用方便,并发处理能力低,数据的读取写入必须阻塞在一个线程内等待其完成。NIO:Non IO 同步非阻塞 IO,是传统 IO 的升级,客户端和服务器端通过 Channel(通道)通讯,实现了多路复用。对于高负载、高并发的(网络)应用,应使用 NIO 的非阻塞模式。AIO:Asynchronous IO 是 NIO 的升级,也叫 NIO2,实现了异步非堵塞 IO ,原创 2022-02-20 13:54:07 · 596 阅读 · 0 评论 -
java的内部类
目录内部类什么是内部类?内部类的分类有哪些?静态内部类:成员内部类:局部内部类:匿名内部类:内部类的优点:内部类有哪些应用场景:局部内部类和匿名内部类访问局部变量的时候,为什么变量必须要加上final?内部类相关,看程序说出运行结果内部类什么是内部类?在Java中,可以将一个类的定义放在另外一个类的定义内部,这就是内部类。内部类本身就是类的一个属性,与其他属性定义方式一致。内部类的分类有哪些?内部类可以分为四种:成员内部类(其实包含静态内部类和非静态内部类)、局部内部类、匿名内部类和静态内部原创 2022-02-20 11:13:23 · 635 阅读 · 1 评论 -
静态变量与普通变量区别
静态变量与普通变量区别:static变量也称作静态变量,静态变量和非静态变量的区别是:静态变量被所有的对象所共享,在内存中只有一个副本,它当且仅当在类初次加载时会被初始化。而非静态变量是对象所拥有的,在创建对象的时候被初始化,存在多个副本,各个对象拥有的副本互不影响。还有一点就是static成员变量的初始化顺序按照定义的顺序进行初始化。静态变量和实例变量区别:静态变量: 静态变量由于不属于任何实例对象,属于类的,所以在内存中只会有一份,在类的加载过程中,JVM只为静态变量分配一次内存空间。实例变量原创 2022-02-20 09:55:08 · 2055 阅读 · 0 评论 -
成员变量和局部变量的区别
成员变量与局部变量的区别有哪些变量定义:变量:在程序执行的过程中,在某个范围内其值可以发生改变的量。从本质上讲,变量其实是内存中的一小块区域成员变量和局部变量的区别:定义位置:成员变量:类内方法外定义的变量局部变量:类的方法中定义的变量。作用域:成员变量:针对整个类有效。局部变量:只在方法内,语句体内有效。存储位置:成员变量:随着对象的创建而存在,随着对象的消失而消失,存储在堆内存中。局部变量:在方法被调用,或者语句被执行的时候存在,存储在栈内存中。当方法调用完,或者语句结束后,就自原创 2022-02-20 09:40:33 · 190 阅读 · 0 评论 -
java的值传递和引用传递
值传递和引用传递有什么区别:值传递:指的是在方法调用时,传递的参数是按值的拷贝传递,传递的是值的拷贝,也就是说传递后就互不相关了。引用传递:指的是在方法调用时,传递的参数是按引用进行传递,其实传递的引用的地址,也就是变量所对应的内存空间的地址。传递的是值的引用,也就是说传递前和传递后都指向同一个引用(也就是同一个内存空间)。...原创 2022-02-17 17:31:27 · 122 阅读 · 0 评论 -
java重写和重载
重写与重载1.构造器(constructor)是否可被重写(override)?构造器不能被继承,因此不能被重写,但可以被重载。2.重载(Overload)和重写(Override)的区别,重载的方法能否根据返回类型进行区分?方法的重载和重写都是实现多态的方式,区别在于前者实现的是编译时的多态性,而后者实现的是运行时的多态性。重载:发生在同一个类中,方法名相同参数列表不同(参数类型不同、个数不同、顺序不同),与方法返回值和访问修饰符无关,即重载的方法不能根据返回类型进行区分重写:发生在父子类中,原创 2022-02-17 15:01:37 · 308 阅读 · 0 评论 -
如何理解java的面向对象思想
面试——你是如何理解java的面向对象思想当面试官问这个问题时:(1)首先,要引申出类:类是面向对象中的一个很重要的概念,因为类是很多个具有相同属性和行为特征的对象所抽象来的,对象是类的一个实例。(2)然后,围绕类的三个特征来说:封装、继承和多态。可以结合实际生活或者项目开发中的实际场景进行阐述。(3)如下为个人总结答案,不喜勿喷:(3.1)在我理解,面向对象是一种“万物皆对象”的编程思想。很多个具有相同属性和行为的对象就可以抽象为类,对象是类的一个实例。面向对象在java中正是通过类来实现的。原创 2022-02-17 09:43:30 · 203 阅读 · 0 评论 -
java中跳出多层循环
在 Java 中,如何跳出当前的多重嵌套循环:在Java中,要想跳出多重循环,可以在外层的循环前定义一个标号,然后在内层循环体中使用带有标号的break 语句,即可跳出外层循环。例如:public static void main(String[] args) { ok: for (int i = 0; i < 10; i++) { for (int j = 0; j < 10; j++) { System.out.println("i原创 2022-02-16 20:51:52 · 5427 阅读 · 1 评论 -
java中static关键字的使用说明
static存在的主要意义static的主要意义是在于创建独立于具体对象的域变量或者方法。以致于即使没有创建对象,也能使用属性和调用方法!static关键字还有一个比较关键的作用就是 用来形成静态代码块以优化程序性能。static块可以置于类中的任何地方,类中可以有多个static块。在类初次被加载的时候,会按照static块的顺序来执行每个static块,并且只会执行一次。为什么说static块可以用来优化程序性能,是因为它的特性:只会在类加载的时候执行一次。因此,很多时候会将一些只需要进行一次的初原创 2022-02-16 17:31:34 · 199 阅读 · 0 评论 -
this和super的作用和区别
目录this和super概述:相同点:不同点:1、调用成员变量不同:2、调用构造方法不同:3、调用成员方法不同:this和super的区别:(分三点来说明)调用成员变量不同;调用构造方法不同;调用成员方法不同;this和super概述:this:代表当前对象的引用,谁来调用我我就代表谁。super:代表当前对象对父类的引用。相同点:1. 都是java关键字,起到指代作用;在构造方法中必须出现在第一行。2. 且this() 和super() 不能存在于同一个构造函数中。3. th原创 2022-02-16 15:58:54 · 1721 阅读 · 0 评论 -
&和&&的区别
相同点:&和&&都可以用作逻辑与的运算符,表示逻辑与(and)。不同点:(1)&&具有短路的功能,而&不具备短路功能。(2)二者都要求运算符左右两端的布尔值都是true 整个表达式的值才是 true。&&之所以称为短路与运算,是因为如果&&左边的表达式的值是 false,右边的表达式会被直接短路掉,不会进行运算。而&就算左边的表达式为false,也会计算右边的表达式。int i = 1;System.out.p原创 2022-02-15 21:22:18 · 307 阅读 · 0 评论 -
java四种访问修饰符
访问修饰符 public,private,protected,以及不写(默认)时的区别定义:Java中,可以使用访问修饰符来保护对类、变量、方法和构造方法的访问。Java 支持 4 种不同的访问权限。分类private : 在同一类内可见。使用对象:变量、方法。 注意:不能修饰类(外部类)default (即缺省,什么也不写,不使用任何关键字): 在同一包内可见,不使用任何修饰符。使用对象:类、接口、变量、方法。protected : 对同一包内的类和所有子类可见。使用对象:变量、方法。 注意:不原创 2022-02-15 19:07:32 · 4073 阅读 · 0 评论 -
Math.round()方法总结
Math.round方法举例:Case1:小数点后第一位 = 5正数:Math.round(11.5) = 12负数:Math.round(-11.5) = -11Case2:小数点后第一位 < 5正数:Math.round(11.49) = 11负数:Math.round(-11.49) = -11Case3:小数点后第一位 > 5正数:Math.round(11.69) = 12负数:Math.round(-11.69) = -12总结:Math类中提供了三个与取整有关原创 2022-02-15 16:52:08 · 5602 阅读 · 0 评论 -
idea使用教程
一、创建Java工程第一步:Create New Project:创建一个新的工程。Import Project:导入一个现有的工程。Open:打开一个已有工程。比如:可以打开 Eclipse 项目。Check out from Version Control:可以通过服务器上的项目地址 check out Github 上面项目或其他 Git 托管服务器上的项目。方式一:或者使用这种方式二:模块和项目的概念:IntelliJ IDEA 没有类似 Eclipse 的工作空间的概念(Wo原创 2021-03-06 18:20:03 · 64880 阅读 · 11 评论 -
java集合面试题目
目录1、常用集合框架图:2、集合与数组:3、List,Set,Map介绍:4、集合的遍历:5、List集合:6、Map集合:7、主要实现类区别小结:8、Enumeration和Iterator接口的区别?9、Iterater和ListIterator之间有什么区别?1、常用集合框架图:说明:Collection接口是集合类的根接口,Java中没有提供这个接口的直接的实现类。但是却让其被继承产生了两个接口,就是Set和List。Set中不能包含重复的元素。List是一个有序的集合,可以包含重复的原创 2021-03-03 13:20:16 · 449 阅读 · 0 评论 -
面试之Collection 和 Collections 有什么区别?
Collection 和 Collections 有什么区别?java.util.Collection 是一个单列集合接口(集合类的一个顶级接口)。它提供了对集合对象进行基本操作的通用接口方法。Collection接口在Java 类库中有很多具体的实现。Collection接口的意义是为各种具体的集合提供了最大化的统一操作方式,其直接继承接口有List与Set。Collections则是集合类的一个工具类/帮助类,其中提供了一系列静态方法,用于对集合中元素进行排序、搜索以及线程安全等各种操作。此类不能实原创 2021-03-03 00:18:43 · 177 阅读 · 0 评论 -
面试之抽象类和接口的区别
抽象类和接口是两个并列的结构,抽象类也属于类的结构。一、相同点 :① 抽象类和接口都不能被实例化。② 抽象类和接口都可以定义抽象方法,子类/实现类必须覆写这些抽象方法。二、不同点 :关键字方面:1.抽象类使用abstract关键字修饰,而接口是用interface关键字修饰。抽象类是用来被继承的,用的是extends关键字,而接口是用来被实现的,用的是implement关键字。2.一个类只能继承一个抽象类,而一个类可以实现多个接口。组成方面:1.抽象类可以有构造方法,而接口不能有构造方法。原创 2021-03-02 23:52:04 · 1519 阅读 · 0 评论 -
面试之String与其他类型之间的转换
目录一级目录二级目录三级目录一、String和基本类型数据的转换:二、String 与char[]之间的转换:三、String 与byte[]之间的转换:四、String与StringBuffer/StringBuilder之间转换:一级目录二级目录三级目录一、String和基本类型数据的转换:基本数据类型,包装类—>String类型基本数据类型,包装类—>String类型:调用String.valueOf(基本类型);int num1=10;方法1:String str1=原创 2021-03-02 22:27:14 · 162 阅读 · 0 评论