
Java基础
文章平均质量分 66
&波吉&
赵家顺
展开
-
String、StringBuffer与StringBuilder的区别String、StringBuffer与StringBuilder的区别
StringBuffer和StringBuilder都继承自抽象类AbstractStringBuilder。String 声明的是不可变的对象,每次操作都会生成新的 String 对象,然后将指针指向新的 String 对象。原创 2022-10-16 11:07:46 · 132 阅读 · 0 评论 -
jdk1.7 hashmap死循环
HashMap死循环只发生在JDK1.7版本中,主要原因是JDK1.7中的HashMap,在头插法 加 链表 加 多线程并发 加 扩容这几个情形累加到一起就会形成死循环。多线程环境下建议采用ConcurrentHashMap替代。原创 2022-09-11 12:21:17 · 1291 阅读 · 0 评论 -
Java Comparator比较器
在java中,如果要对集合对象或数组对象进行排序,需要实现Comparator接口。匿名内部类的方式,在list需要排序的时候,才具体定义排序的规则。一个实现了该接口的类,可以通过如下方法排序。该接口只有一个compareTo方法。原创 2022-09-04 23:10:24 · 851 阅读 · 0 评论 -
Java异常体系
首先异常体系分为:错误、异常两大类。:(这种错误无法处理)描述了Java运行时系统的。一般是指虚拟机(JVM)相关的问题,如等,。因为如果出现这样的内部错误,除了通告用户,并尽力使程序安全地终止之外,再也无能为力了。。Java的异常分为两种,checked Exception(编译时异常也叫非运行时异常)和 RuntimeException(运行时异常)。原创 2022-09-02 22:59:11 · 342 阅读 · 0 评论 -
Java抽象类和接口的联系和区别
概念:在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。抽象类除了不能实例化对象之外,类的其它功能依然存在,成员变量、成员方法和构造方法的访问方式和普通类一样。由于抽象类不能实例化对象,所以抽象类必须被继承,才能被使用。也是因为这个原因,通常在设计阶段决定要不要设计抽象类。父类包含了子类集合的常见的方法,但是由于父类本身是抽象的,所以不能使用这些方法。原创 2022-09-02 22:10:54 · 454 阅读 · 0 评论 -
Java反射
结论:同一个字节码文件(*.class)在一次程序运行过程中,只会被加载一次,不论通过哪一种方式获取的class对象都是同一个。:将字节码文件加载进内存,返回class对象(多用于配置文件,将类名定义在配置文件中,读取文件,加载类):getClass()方法在Object(多用于获取字节码文件):通过类名的属性class获取(多用于参数的传递)将类的各个组成部分封装为其他对象,这就是反射机制。1、可以在程序运行过程中,操作这些对象。2、可以解耦,提高程序的扩展性。我们接下来看看代码编译顺序。...原创 2022-08-31 20:24:27 · 138 阅读 · 0 评论 -
在重写equals方法的时候,为什么还要重写hashcode方法
Java中的hashCode方法就是根据一定的规则与对象相关信息(例如对象的存储地址,对象的字段等)映射成一个数组,这个数值就被称为散列值。这里可以看到,重写HashCode方法之后,两个实例对象的hashcode的值也就是相同的,HashSet也就能起到了去重的效果。很多情况下,我们比较对象并不需要比较对象的地址,而是只要是同一个类的不同对象,成员属性值相同,我们就认为是同一个对象。(1)如果两个对象通过equals方法比较是相等的,那么它们的hashCode方法结果值也是相等的。set.size为2。.原创 2022-08-30 21:09:15 · 316 阅读 · 0 评论 -
java 128陷阱
说到128陷阱之前,我们补充一个小的Java知识。==和equals的区别:简单的理解就是:==比较的是连个数据的地址是否相等,而equals比较的是两个数值是否相等。而equals是来源于Object类的,对其进行了重写才会判断数值是否相等对比一下代码接下来我们回归正题当我们有这样的一段代码意想不到的输出出现了truefalse这就是我们通常见到的128陷阱问题。...原创 2022-08-30 18:24:37 · 317 阅读 · 0 评论 -
list map set 在项目中的应用,阐述底层实现原理
List , Set, Map都是接口,前两个继承至Collection接口,Map为独立接口Set下有HashSet,LinkedHashSet,TreeSetList下有ArrayList,Vector,LinkedListMap下有Hashtable,LinkedHashMap,HashMap,TreeMapCollection接口下还有个Queue接口,有PriorityQueue类Queue接口与List、Set同一级别,都是继承了接口。原创 2022-08-22 20:03:59 · 310 阅读 · 0 评论 -
使用java实现一棵二叉树,并使用他完成二叉树的层次遍历,两种中序遍历 递归 &非递归
首先实现一颗二叉树二叉树的定义树(tree)是一种抽象数据类型(ADT),用来模拟具有树状结构性质的数据集合。它是由n(n>0)个有限节点通过连接它们的边组成一个具有层次关系的集合。把它叫做“树”是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的树。二叉树是一种特殊的树,每个节点最多只能有两个子节点。二叉搜索树要求:若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值;若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值;它的左、右子树也分别为二叉排序树。原创 2022-08-22 19:46:32 · 185 阅读 · 0 评论 -
java8中 lambda表达式,stream操作
用::提取的函数,最主要的区别在于静态与非静态方法,非静态方法比静态方法多一个参数,就是被调用的实例。方法引用分为三种,方法引用通过一对双冒号:: 来表示,方法引用是一种函数式接口的另一种书写方式。类名::方法名,相当于对这个方法闭包的引用,类似js中的一个function。静态方法引用,通过类名::静态方法名, 如 Integer::parseInt。实例方法引用,通过实例对象::实例方法,如 str::substring。构造方法引用,通过类名::new, 如 User::new。原创 2022-08-22 18:58:19 · 389 阅读 · 0 评论