![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
javaSE
文章平均质量分 70
java语法
多多睡觉11
这个作者很懒,什么都没留下…
展开
-
[java]反射四大类的基本用法
我们都知道,我们编写好的java代码文件时.java文件,要想运行这个.java文件,就要通过编译器编译,编译器会讲.java文件编译成.class文件,并且每一个类对应一个.class文件,就算一个.java文件中,定义了两个类,编译器就会将一个java文件,编译成两个.class文件.反射的核心就是四个类,Class,Method,Constructor,Filed,这四个类分别对应类,类的方法,类的构造方法,类的成员变量,需要先获得Class对象才能获得剩下的三个类对象。原创 2023-04-12 23:26:26 · 684 阅读 · 0 评论 -
java基本数据类型的显示转换和隐式转换
这是因为,short类型的是有符号的,范围从-32767——32767,但是char类型是无符号的Unicode整数,范围是0——65535,这两个范围大小虽然一样,但是起始确不一样,互相转换会有丢失数据的风险,所以必须要显示类型转换。常常遇到需要将一个类型的值赋值给另一个变量,这里面就涉及到数据类型转换,有些数据类型转换在java中是能隐式转换的,还有一些涉及到数据安全的类型转换则必须要使用显示类型转换,是否需要显示类型转换的基本原则是,上述隐式转换都是范围小的转换成大的类型。,此时编译器才算知道。原创 2023-04-13 12:55:08 · 499 阅读 · 0 评论 -
[java]Map和Set
开散列的解决方案虽然冲突时会让链表越来越长,但是链表长度超过8时链表会转变为红黑树,查找链表的效率会提高,并且存在着负载因子,随着表中给的数据增多,负载因子变大,当负载因子到达临界条件时,hash表会扩容,扩容过后数据的存储位置都会重新计算,链表的长度也会变短,所以可以认为链表的长度是常数,hash表的查询时间复杂度是O(1);Entry是TreeMap的内部类。向map中插入一个key-value键值对,并返回value的值,如果map之前存在相同的key值,则将之前的kay值对应的value值覆盖。原创 2023-05-19 22:54:13 · 163 阅读 · 0 评论 -
[java] String 类内方法split 在“120/1/0/0”中选定/为切割点,为啥要用“////”来表示
120/1/0/0”是这个字符串被打印出来的样子,可以看到 / 并没有被当做转义斜杠,在代码层面直接写“120/1/0/0”,/1,/0,/0会被当做是转义字符,所以“//”才能代表一个/,两个/就需要“////”来表达,所以在现实层面,看到一个“120/1/0/0”,如果要以/为切割点,则在代码层面需要“////”来表达。所以在代码层面这个字符串肯定是“120//1//0//0”,如果要用String函数的类函数split来切割,就要以代码层面的“//”来当做截断依据,原创 2022-10-13 17:41:38 · 138 阅读 · 0 评论 -
Java父类与子类 构造函数,实例函数,类函数的调用顺序
java中子类的构造函数必须首先调用父类的构造函数,如果子类的构造函数没有显示的调用父类的构造函数,编译器回自动的在子类的构造函数的第一排调用父类的无参构造函数,如果父类没有无参构造函数,子类必须显示调用父类的其他构造函数,否则将报错。(2)如果父类方法在子类中被重写了,那么此时要调用被重写之前的父类方法,需要使用super关键字,使用名字直接调用只能调用到子类重写后的方法。由于父类的构造函数被放在第一排,所以父类构造函数执行完之后子类的构造函数才会被执行,所以构造函数的执行顺序是,先父类后子类;原创 2023-04-11 17:56:17 · 1845 阅读 · 0 评论 -
[Java]文件操作
这个问题也是使用int作为返回值的妙用,因为一个字节的-1是八位的11111110,但在int是四个字节,所以int读取出来的就是00 00 00 1E(16进制),是一个正数,将这个int正数转换成byte的时候,才会由正数变成负数。File类是Java用来描述特定路径下的某个文件的对象,File类对象能否创建和系统中是否有这个文件并没有关心,对象是只是用来描述这个文件的特征的,特征就包括这个文件是否存在,创建出来File对象也不会再文件系统中创建出来这个文件。下面是获得这些信息的方法。原创 2023-05-08 23:34:33 · 112 阅读 · 0 评论 -
[java]PriorityQueue基本结构和注意事项
priorityQueue的逻辑结构是堆,实际在java中的物理结构是顺序表,也就是数组,这是因为堆是一颗完全二叉树,每个节点下标是递增且相邻的,这种二叉树结构使用数组表示不会再数组中间形成空节点,提高了空间利用效率,并且比使用二叉树节点表示更节省空间;堆根据根节点的数据和左右子树根节点的数据的大小,分为大根堆和小根堆,大根堆就是根节点比左右子树根节点大,小根堆就是根节点比左右子树根节点小,左右子树的根节点和他们的子树也要满足这个关系。2 堆是一颗完全二叉树,所以他的父节点和子节点的关系为。原创 2023-04-20 22:49:13 · 109 阅读 · 0 评论 -
【数据结构】树和二叉树的遍历
循环判断栈是否为空,不为空进入循环,循环内首先出栈一个节点,然后对这个节点的数据进行处理(遍历),然后判断这个节点的右孩子是否为空,不为null,则让右孩子入栈,将有右孩子的左边节点全部入栈。使用队列数据结构,先将根节点如队列,然后进入循环条件为队列非空的循环,循环代码为:将根节点数据输出,然后判断根节点是否有左孩子,有就入队列,在判断是否有右孩子,有就入队列;节点的层次:树是具有层次结构的节点集合,以根节点为第一层,往下子节点为第二层,子节点的子节点为第三层。原创 2023-05-17 20:48:04 · 701 阅读 · 0 评论 -
[java]泛型和通配符
但是我们得好好说说三号错误,三号错误在很多时候被认为是正确的代码,他创建了一个T类型的数组,我们可以往这个数组里面传入T类型的变量,也能正确的从这个数组中正确的拿到这个T类型变量,但是这个数组本质上是一个Object数组,他并没有被切换成T类型的数组,这样写也被java设计人员认为是不安全的,因为将一个Object类型数组强行转换成一个T[]类型是不安全的,除非这个T是Object,否则会报类型转换异常;首先,我们需要了解什么是泛型,泛型你可以理解为是一个容器,这个容器可以装入且只能装入你指定的类型变量。原创 2023-04-20 19:32:57 · 286 阅读 · 0 评论 -
[Java]Stack类的使用
值得一提的是,List和Collection接口中都定义的isEmpty()方法来判断栈是否为空,栈使用的是empty()方法;Stack的底层存储结构是数组,Stack的进出方式是后进先出,Stack实现了List接口。Stack的常用方法都具有Stack的特色。(4)获取栈内元素个数和判断栈是否为空。Stack只有无参构造一种构造方法。二、Stack的常用方法。一、Stack的创建。(3) 获取栈顶元素。三、Stack的应用。(1)将递归变为循环。原创 2023-05-03 22:21:35 · 857 阅读 · 0 评论 -
[Java]Collection和List接口
List和Collection是集合的两个接口,List继承了Conllection接口,List和Collection都是通用的集合操作接口,内部定义增删改查一系列操作,List是Collection接口的子类,相比于Collection,List能提供更多的方法,满足更多的业务需求。截取从fromIndex到toIndex下标元素,截取的元素并不是新的元素,返回的还是调用submit方法的对象的元素。原创 2023-05-03 00:58:49 · 120 阅读 · 0 评论 -
[Java]LinkedList的使用
相比于ArrayList,LinkedList的对中间下标数据的删除和插入的效率更高,头插和尾插的效率提升到了O(1),解决了ArrayList插入开销大的弊端,但是LinkedList访问数据的效率相比较来说更低。LinkedList内部维护两个节点,一个首结点一个尾节点,尾结点是的LinkedList的尾插效率提升到了O(1),中间节点的插入和删除还是需要遍历到这个节点然后再进行插入和删除,效率为O(n)(1)头插尾插(特殊下标的插入)addFirst(E e);(2)头删尾删(特殊下标的删除)原创 2023-05-03 17:14:33 · 351 阅读 · 0 评论 -
[Java]Queue和Deque
入队列一次之后,rear就+1,直到rear指向了数组的最后一个位置,此时再入队列一个元素,循环队列将rear指向的位置赋值为这个元素,然后再+1,此时rear指向的位置就越界了,所以为了使rear不越界,每次rear+1之后,都要取数组长度的模,这样就能使rear能循环的首尾移动了。这就是循环队列实现的方式,我们可以发现,循环队列的效率其实是要比链普通式队列高的,循环队列出入队列不用创建节点,只需要改变一下front和rare就可以,但是循环队列是有容量的,链式队列不存在容量的概念。原创 2023-05-05 17:34:55 · 192 阅读 · 0 评论 -
[Java]ArrayList的常用方法
ArrayList是实现了List接口的集合类,ArrayList的底层存储结构是数组,但是这个ArrayList生让这个数组自动扩容,不必担心空间不够的问题。如果使用的是有参构造,则直接使用1.5倍扩容,值得注意的是,当有参构造的参数,传入容量是0时,ArrayList会被赋值为下面这个静态的数组,和无参构造使用的静态数组不是一个数组。这个数组在扩容时,由于初始容量是0,所以他的一点五倍也是0,所以首次扩容的容量为传入的扩容要求size+1,也就是1。ArrayList的扩容机制。原创 2023-05-03 14:58:06 · 1535 阅读 · 0 评论