自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 TreeSet的去重原理

TreeSet去重分两种,第一种是我们重写了Comparator匿名类,第二种则是没有重写。一,我们先分析一下没有重写的情况,当我们没有重写Comparator匿名类时首先可以看看TreeSet的主要去重源代码public V merge(K key, V value, BiFunction<? super V, ? super V, ? extends V> remappingFunction) { Objects.requireNonNull(remappingFun

2022-02-09 16:06:11 1853

原创 HashSet经典练习题

首先这道题目创建了两个Person对象p1,p2,然后set.add添加这两个对象到table数组中,这里是没有问题的,接着通过p1.name改变了p1在table数组中的名字,由AA改为了CC,这里要注意的是,hash值一开始是由1001,"AA"两个属性确定好了的,因此此时在table上的索引位置是1001,“AA”的hash确定好了的,如果将AA改为CC,这里不会涉及到table位置的改变,只是在原来的索引上将AA改为CC就完事了,在table上的索引位置还是名字为AA时的索引位置,但是下一步使用..

2022-02-09 09:20:03 548

原创 TreeSet,TreeMap,Collections工具类排序方法

一,TreeSet排序方式使用TreeSet类方式进行排序要用到Comparator构造器,当我们创建一个TreeSet对象时,在括号内需要完成一个匿名内部类的代码编写,而这个匿名内部类就会当作一个Comparator对象传递给给TreeSet的有参构造器public TreeSet(Comparator<? super E> comparator) { this(new TreeMap<>(comparator));}之后再把comparator对象赋

2022-02-01 17:29:06 849

原创 Map集合的六大遍历方式

一,keySet:查找键是否存在使用方式:public class HashMapReview { public static void main(String[] args) { Map map=new HashMap(); map.put("Jack",1); map.put("Tom",2); map.put("Lucy",3); Set keys=map.keySet(); for(Ob

2022-02-01 12:15:24 1464

原创 JAVA:Collection分支之List下三个子类的底层源码分析(3),LinkedList

LinkedList主要使用到了数据结构中链表的概念,通过下面这段源代码来感受一下链表的作用。public class LinkedList { public static void main(String[] args) { Node Tom=new Node("Tom"); Node Jack=new Node("Jack"); Node Mary=new Node("Mary"); Node first=Tom; Node l

2022-01-18 17:07:49 176

原创 JAVA:Collection分支之List下三个子类的底层源码分析(2),Vector

一,如果创建的是Vector的无参对象的话,底层的源码就会给这个Vector集合赋一个集合大小为10的Object数组,之后填充集合,如果集合满了,就会按照前面的2倍扩大集合。底层代码如下:让我们分析分析如List list=new Vector();执行这个代码,底层会调用的方法如下:先到Vector的无参构造器:这个无参构造器会调用this方法,传递一个initialCapacity为10的方法到有参构造器中调用有参构造器,调用this()方法,这个initiaCapacit

2022-01-18 16:26:04 394

原创 JAVA:Collection分支之List下三个子类的底层源码分析(1),ArrayList

一,创建一个ArrayList对象时,如果没有给它附上参数,那么ArrayList底层源码会将这个集合的大小默认为0,当我们给这个集合添加元素时,初次添加元素时,底层的源码会给集合大小从0扩大到10的容量,再次添加元素时,底层的源码会比较集合元素的长度和集合的大小,如果发现集合大小不够添加新的元素,则会按原来的集合大小的1.5倍扩容,也就是变到15.无参ArrayList底层源码分析:如上图,我们创建一个ArrayList对象并遍历填充,一开始的时候是调用无参构造器的,此时的集合大小为0。

2022-01-18 15:55:01 255

原创 JAVA:List接口的方法

1,add();添加元素到集合list中,如:List list=new ArrayList();list.add("小黄");System.out.println(list);2,addAll(int index,Collection eles);从index位置将eles集合中的所有元素添加到调用的集合中。如:List list=new ArrayList();list.add("小黄");list.add("小白");list.add("小兰");System.ou

2022-01-16 17:11:43 323

原创 JAVA:集合

一,集合的体系结构图二,集合的相关方法的使用(以ArrayList为例)1,add();如:List list1=new ArrayList();List list2=new ArrayList();list2.add("你好,李焕英");list2.add(123);list2.add('a');list1.add('a');list1.add('b');list1.add("你好,李焕英");list1.add(123);list1.add('男');.

2022-01-16 16:54:22 439

原创 Java:第三代日期LocalDataTime的笔记

1,格式化LocalDateTime输出的时间可以使用DateTimeFormatter dft=DateTimeFormatter.ofPattern("格式");,格式可以输入自己想要的类型,如yyyy-MM-dd HH:mm:ss E,这样输出的格式就是2022-1-14 14:11:02.2,LocalDate l1=LocalDate.now();方法输出l1可以得到当时的年月日,LocalTime l2=LocalTime.now();方法输出l2可以得到当时的小时分钟秒,而LocalDat

2022-01-14 15:01:31 318

原创 Java:关于Calendar类的理解与使用

Calendar它的构造器是被保护的,即protected,所以想直接new Calendar的话是不行的,但是IDEA提供了一个Calendar.getInstance()方法以此方便用户来调用Calendar中的方法。Calendar的作用其实也是获取时间的一种方式,它相对于Date来看更为自由,格式可以自己定,时间年月日,小时,分钟,秒钟可以通过get方法获得。如:Calendar c1=Calendar.getInstance();System.out.println(c1.get(

2022-01-14 13:34:23 368

原创 JAVA:Date的相关方法与使用

1,Format方法SimpleDateFormat s1=new SimpleDateFormat();直接创建一个Date对象会返回一个国外版本的现在时间如Date d1=new Date();输出结果格式是:Fri Jan 14 12:04:09 CST 2022如果想让这个时间的格式中国化,可以使用SimpleDateFormat方法转换一下如,SimpleDateFormat s1=new SimpleDateFormat("yyyy年MM月dd日 hh:mm:ss E")

2022-01-14 12:20:45 188

原创 Java:Math的相关方法

1,Math.sqrt();求平方根,如Math.sqrt(4);结果是22,Math.ceil();向上取整,如Math.ceil(3.45);结果是43.Math.floor();向下取整,如Math.floor(3.45);结果是34.Math.random()求0~1之间的随即小数,[0,1);拓展:如果需要求任意区间的整数,只需要和Math.random()相乘并加上一个数即可如求1~100之间的随机整数,(int)(1+Math.random()*

2022-01-13 19:53:17 145

原创 Java:关于Arrays的相关方法与使用

1,Arrays.toString()方法返回字符串的全部有效内容,使用中括号括起内容返回如:Integer n1={1,3,4,2,6,-1,-2};System.out.println(Arrays.toString(n1));输出结果:[1,3,4,2,6,-1,-2]2,Arrays.sort()方法当需要将数组升序排序时,直接将数组放进小括号中即可如Arrays.sort(n1);当需要将数组降序排序是,有三种方式可以实现①,使用Collections.reve

2022-01-13 19:43:55 106

原创 String和StringBuffer之间的相互转换

一,String-->StringBufferString n1="你好呀"①,StringBuffer s1=new StringBuffer(n1);②,StringBuffer s2=new StringBuffer();s2.append(n1);二,StringBuffer-->StringStringBuffer n2=new StringBuffer("我还好");String s1=n2.toString();String s2=new Strin

2022-01-12 10:33:34 1987

原创 包装类和String互相转换的方式

一,包装类转换成String类型(以Integer为例)1,直接手动装箱,传一个String类型的参数如String num="12345";Integer d=new Integer(num);2,采用自动装箱,Integer.valueOf(),括号中传入String类型的参数如String num="12345";Integer oq=Integer.valueOf(num);3,使用Integer.parseInt()方式,括号中传入String类型的参数如

2022-01-10 11:34:53 1323

原创 包装类的面试习题(Integer)

示例一,只要是new一个新的对象,而且比较的两个类型都是包装类时,它们肯定都不相等。示例一是手动装箱的方式,需要调用Integer的构造器来创建对象,因为是new了一个新的对象,所以它们是不相等的。示例二与示例一同理。示例三是自动装箱的方式,至于这个返回的是一个new的对象还是一个数组值,需要查看Integer.valueOf()源码来看。值在-128~127之间的都是返回一个数组的值,超过这个范围的都返回一个new的对象,所以这个127是返回一个数组值,而不是new一个新的对象,所以i5==i..

2022-01-10 11:21:26 432

原创 JAVA:垃圾回收器finalize

1,当对象被回收时,系统自动调用该对象的finalize方法,子类可以重写该方法,做一些释放资源的操作。2,什么时候被回收,当某个对象没有任何引用时,则jvm就让为这个对象是一个垃圾对象,就会使用垃圾回收机制销毁该对象,在销毁该对象前,会先调用finalize方法。3,垃圾回收机制的调用,是由系统来决定,也可以通过System.gc()主动触发垃圾回收机制,测试:Car [name]...

2021-11-30 20:34:39 258

原创 JAVA:toString的认识与理解

1,基本介绍默认返回:全类名+@+哈希值的十六进制(这是子类没有重写toString方法的前提下返回的结果),【查看Object的toString方法】子类往往重写toString方法,用于返回对象的属性信息。package com.whpu.toString;public class toString1 { public static void main(String[] args) { Person p1=new Person("小明","程序员",25);

2021-11-28 00:19:58 742

原创 JAVA:hashcode的初步理解与认识

1,提高具有哈希结构的容器的效率2,两个引用,如果指向的是同一个对象,则哈希值肯定是一样的。3,两个引用,如果指向的是不同的对象,则哈希值是不一样的。4,哈希值主要根据地址号来的,不能完全将哈希值等价于地址。实际上,由Object类定义的hashcode方法确实会针对不同的对象返回不同的整数,(这一般是通过将该对象的内部地址转换成一个整数来实现的,但是Java编程语言不需要这种实现技巧)5,后面在集合中的hashCode如果需要的话,也会重写。...

2021-11-28 00:05:17 112

原创 JAVA:equals与==的习题

一,==的习题package com.whpu.equals_;public class exercise2 { public static void main(String[] args) { int it=12; float ia=12.0f; System.out.println(it==ia); char ch1='A'; char ch2=12; System.out.println(c

2021-11-27 11:20:12 520

原创 JAVA:==与equals的区别

1,==的理解①,既可以判断基本类型,又可以判断引用类型②,如果判断基本类型,判断的是值是否相等,例如:int i=10,double d=10.0③,如果判断的是引用类型,判断的是地址是否相等,即判定是不是同一个对象。例如源代码:package com.whpu.equals_;public class equals_1 { public static void main(String[] args){ int i=10; double d=

2021-11-26 16:10:21 712

原创 JAVA:动态绑定机制

一,介绍先看源代码:上图代码有父类A,子类B,还有一个main方法,初看很简单,考察的就是一个向上转型的基本知识,先确定编译类型和运行类型,由A a= new B();可以看出,运行类型是B,编译类型是A,再看调用的是方法还是属性,看代码得第一个输出语句调用的是方法,所以要先到运行类型B类中去查找sum方法,i就是B类的属性i值,所以返回20+20=40,第一个输出40,第二个调用的是方法,所以还是到B类中去找sum1方法,故返回20+10=30.以上是考察向上转型的代码运行方法,引...

2021-11-24 20:43:50 597

原创 JAVA:多态的认识与理解

一,对象的多态①,一个对象的编译类型和运行类型可以不一致。②,编译类型在定义对象时,就确定了,不能改变。③,运行类型是可以变化的。④,编译类型看定义时=号的左边,运行类型看=号的右边。...

2021-11-24 20:23:36 647

原创 JAVA:方法重写

一,介绍方法重写(覆盖)就是子类有一个方法,和父类的某一个方法的名字,返回类型,参数都一样,那么我们就说这个子类的方法覆盖了其在父类中和它相同的方法。二,细节①,子类的方法的形参列表,方法名称,要和父类方法的形参列表,方法名称完全一样。②,子类方法的返回类型和父类方法的返回类型一样,或者是父类返回类型的子类。比如父类返回类型是Object,子类的方法返回类型是String,那么就成立,反过来则不行。再比如在父类中创建两个具有继承关系的类,如AAA,BBB,BBB继承AAA,则在父类中可将

2021-11-24 12:39:18 211

原创 JAVA:super的使用以及细节

一,基本介绍super代表父类的引用,用于访问父类的属性,方法,构造器。二,基本语法1,访问父类的属性,但不能访问父类的private属性2,访问父类的方法时,不能访问父类的private方法。3,访问父类的构造器,super(参数列表);只能放在构造器的第一句,只能出现一句。...

2021-11-22 20:26:30 1895

原创 JAVA:继承的内存布局

一,源代码以及图片理解解释:首先创建一个类ExtendsTheory,里面包含有的main方法中创建一个Son对象,其后有三个类,分别是Grandpa类,Father类,Son类。其中Son类继承Father类,Father类继承Grandpa类,当创建对象Son时,在内存的方法区中会有五个部分,第一个部分是常量池,用来存放堆中对象地址指引过来的常量,然后是Object类,因为它是所有类的父类,然后是Grandpa类,之后是Father类,最后是Son类,按照继承的关系来排序。在堆中会有一个地址,.

2021-11-18 20:31:08 573

原创 JAVA:继承的认识与理解

一,继承可以用来解决代码的复用性比如说具有较多相同属性,相同方法的多个类,如果每一次创建一个类时都要重复写这么多代码就显得较为复杂且麻烦,这时,我们可以创建一个父类,在父类里面写好我们这多个类共有的属性和方法,当我们开始创建原先要写的多个类时,就可以通过继承父类的方式来避免我们要重复写的多个相同的属性或代码,而这些继承了父类的多个类也叫做子类。二,继承的方式通常在创建好一个类时,类名的后面加上extends+父类名即可,如访问修饰符+class+类名+extends+父类名{},此后,子类就会自

2021-11-18 18:52:43 422

原创 JAVA:封装的理解和认识

一,理解封装就是把抽象出的数据【属性】和对数据的操作【方法】封装在一起,数据被保护在内部,程序的其他部分只有通过被授权的操作【方法】,才能对数据进行操作。二,具体使用首先通过访问修饰符限制属性的访问权限,一般是设置为private,之后通过get方法和set方法实现对属性的取值和赋值,在此步骤,可以在set方法中编一些对属性的限制范围,比如说姓名的字数,密码的位数等等,然后在get方法中也可以设置一些权限来提取返回值的属性,像设置一个密码等。三,源代码首先这个Account是设置属性的类

2021-11-17 10:43:55 530

原创 Java:访问修饰符的理解与认识

一,访问修饰符的种类java提供四种访问控制修饰符号控制方法和属性的访问权限,分别是public,protected,默认,private四种,每种访问修饰符定义的方法或者属性都能够限制其适用范围,具体参考下表。二,使用的注意事项①,修饰符可以用来修饰类中的属性,方法以及类②,只有默认的和public才能修饰类!并且遵循上述访问权限的特点。③,因为没有学习继承,因此关于在子类中的访问权限,学到子类后,再来做补充。④,方法的访问规则和属性完全一样。三,代码示例访问修饰符在属性.

2021-11-15 20:19:10 521

原创 JAVA:包的认识与理解

包的三大作用:1,区分相同名字的类2,当类很多时,可以很好的管理类3,可以控制访问的范围包的本质实际上就是创建不同的文件夹/目录来保存文件。

2021-11-15 14:31:31 384

原创 JAVA:this的理解

this的使用细节1,this关键字可以用来访问本类的属性,方法,构造器public class This{ public static void main(String[] args){ A a=new A("jack",30); //步骤一 a.c(10); }}class A{ String name; int age; public A(String name,int age){ thi

2021-11-03 20:19:28 174

原创 JAVA:构造方法

源代码:public class Constructor { public static void main(String[] args) { Person p = new Person("smith", 45); //创建对象Person时初始化pname和page System.out.println("Person对象的信息,姓名:"+p.name+",年龄:"+p.age); }}class Person{ String name;

2021-11-03 09:29:04 80

原创 JAVA:作用域注意事项以及细节

一,基本使用①,在Java编程中,主要的变量就是属性(成员变量)和局部变量。②,我们说的局部变量一般是指在成员方法中定义的变量。③,Java中作用域的分类 全局变量:也就是属性,作用域为整个类体Cat类:cry eat等方法使用属性 局部变量:也就是除了属性之外的其他变量,作用域为定义它的代码块中④,全局变量可以不赋值,直接使用,因为有默认值,局部变量必须赋值后,才能使用,因为没有默认值。二,细节使用①,属性和局部变量可以重名,访问时遵循就近原则。②,在同...

2021-11-02 15:28:25 134

原创 JAVA:可变参数

JAVA:可变参数的使用以及细节## 标题一:可变参数的介绍与使用可变参数是方法重载的某一些方面上的方便写法,当存在有多个同种方法名,同种功能但是其每个方法的形参个数不同时,再使用方法的重载就太麻烦了,比如让我们编程一个即可以算2个int类型的方法,也可以计算3个int类型的方法,乃至4个,5个等等,这时候我们使用可变参数就更为方便。可变参数的形式:列表访问修饰符+返回值类型+方法名(数据类型… 参数名)如public class T{public static void main(Strin

2021-11-01 15:35:06 147

原创 cache在全相联映射,直接映射和级相联映射三种情况下从主存调入数据到cache中的方法

一,全相联映射需要考虑的因素:①,cache每个块的大小,即能存放多少个字节,根据这个容量的大小判断需要多少位来表示这个容量,比如如果cache的每个块的大小为16B,那么就需要使用四位字节内地址来表示这个数,全相联映射需要的数据格式为主存字块标记和字块内地址,然后再通过将主存的地址二进制化,分割不同的两部分,后面的高地址位为cache的字块内地址,至于需要多少位取决于cache每个块的块容量大小,需要用多少位来表示,然后剩余的位充当主存字块标记,而放在块内的地址便是主存字块标记+000(0个字块内地址

2021-10-26 21:18:32 1583

原创 JAVA:克隆对象

源代码:public class HI{ public static void main(String[] args){ Person p=new Person(); //在堆内存创建一个叫做p的对象 p.name="小明"; p.age=10; A a=new A(); Person p2=a.b(p); System.out.println("p指向的对象age="+p.

2021-10-14 16:19:29 49

原创 JAVA:方法传参机制

结论:基本数据类型传递的是值(值的拷贝),形参的任何改变不影响实参例如:源代码public class HI{ public static void main(String[] args) { int a=10; int b=20; AA c=new AA(); c.exchange(a,b); //实参基本数据类型a和b的值10和20分别拷贝给形参 System.out.pr

2021-10-14 15:27:35 128

原创 JAVA:一维数组和二维数组初始化的方法

一维数组和二维数组创建对象的方法以及对象初始化的使用方式如:import java.util.Scanner;public class HI{ public static void main(String[] args){ Scanner sc=new Scanner(System.in); String[][] arr=new String[100][2]; //创建一个二维数组对象 arr[1][1]="我爱你";

2021-10-12 00:24:19 283

原创 JAVA:类和对象的理解

在java中要描述一类物体,像人类,猫类,狗类等等物种类别时,可以创建一个类,而对象就是类的一个实例,比如说创建一个人类,张三就是人类的一个对象,是一个实例,再比如说猫类,一只猫就是猫类的一个对象,创建好一个对象之后,要赋予其属性,像年龄,体重,身高,颜色等等,创建一个对象并用一个变量去表示这个创建的变量的方法为:类名+变量名=new 类名();例如创建一个猫类Cat,我用一只猫cat1去表示猫类的一个对象,就是Cat cat1=new Cat();也可以用猫cat2去表示猫类的第二个对象,即Cat c

2021-10-12 00:13:38 77

空空如也

空空如也

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

TA关注的人

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