
java基础
我爱学习!嗯!
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
java多态
1、多态是什么(也称动态绑定、后期绑定、运行时绑定) 绑定:将方法调用与方法主体关联起来称作绑定 前期绑定:在程序执行之前进行绑定 后期绑定(动态绑定、运行时绑定):在运行时根据对象的类型进行绑定,编译器一直不知道对象的类型,但是方法调用机制能找到正确的方法体,并加以调用。 注意:java中除了static方法和final方法(private方法属于final...原创 2018-10-12 09:18:08 · 122 阅读 · 0 评论 -
使用泛型的一些问题
1、任何基本类型不能作为类型参数2、 一个类不能实现同一个泛型接口的两种变体,因为擦除会使这两个接口相同3、使用带有泛型类型参数的转型或instanceof不会有效果,原因也是擦除。class FixedSizeStack<T>{ private int index = 0; private Object[] storage; public FixedSizeSta...原创 2018-11-29 16:26:04 · 234 阅读 · 0 评论 -
FutureTask源码简单解析
首先说一下任务与线程。并发编程使我们将程序划分成多个分离的、独立运行的任务,而线程可以驱动任务。一般情况下任务通常就是实现了Runnable或Callable接口的类。FutureTask在jdk11中的定义是一个可取消的异步计算。也就是说FutureTask对象是一个任务。不过FutureTask实现的是RunnableFuture接口,该接口继承自Runnable和Future。Futur...原创 2018-12-09 16:30:57 · 299 阅读 · 0 评论 -
哈夫曼树及哈夫曼编码
一、基本概念1、路径:从树的一个结点到另一个结点之间的分支构成这两个结点之间的路径2、路径长度:路径上的分支的数目3、树的路径长度:从树根到每一个结点的路径长度之和4、结点的带权路径长度:从该结点到树根之间的路径长度与结点上权值的乘积5、树的带权路径长度:树中所有叶子结点的带权路径长度之和,通常记作WPL哈夫曼树:假如一颗二叉树有n个叶子结点,且n个叶子结点都有对应的权...原创 2019-04-05 10:08:34 · 631 阅读 · 0 评论 -
二叉线索树
package trees;//线索二叉树public class BiThrTree { static final class ThrNode{ Integer data; ThrNode left; //左孩子 ThrNode right; //右孩子 int LTag; //标记 1表示左孩子为前驱 int RTag; //标记 1表示右孩子为后继 ThrNo...原创 2019-04-05 10:10:04 · 235 阅读 · 0 评论 -
二分查找
package search;import java.util.*;public class BinarySearch { //这种是在[l,h]闭合区间查找 public int bSearch1(int l,int h,List<Integer> t,int v){ while(l <= h){ int m = (l+h)/2; if(t.get...原创 2019-03-27 20:51:49 · 129 阅读 · 0 评论 -
二叉排序树(二叉查找树)
一、定义二叉排序树或者是一颗空树,或者是具有以下性质的二叉树:(1)若它的左子树不为空,则其左子树上所有结点的值均小于它的根结点的值(2)若它的右子树不为空,则其右子树上所有结点的值均大于它的根结点的值(3)它的左、右子树均为二叉排序树由定义可以得出,中序遍历二叉树可以得到一个结点值递增的有序序列。一个简单的二叉排序树:这里使用二叉链表来作为存储结点,结点类的...原创 2019-04-07 10:35:28 · 2896 阅读 · 0 评论 -
二叉平衡树
目录一、定义二、二叉平衡树调整三、二叉平衡树的插入四、二叉平衡树的删除一、定义平衡二叉树或则是空树,或者是具有如下特征的二叉排序树(1)左子树和右子树的深度之差的绝对值不超过1;(2)左子树和右子树也是平衡二叉树平衡二叉树的查找的时间复杂度是O(log n)。某结点的平衡因子:该结点左右子树深度之差。示例:二、二叉平衡树调整 ...原创 2019-04-13 16:58:51 · 564 阅读 · 0 评论 -
希尔排序&冒泡排序
1、希尔排序将数组中每间隔为d的元素划分为同一组,然后对每一组使用插入排序。d有多个值,但要求最后一个值为1,即最后一次要进行插入排序。例如数组:2 9 1 3 6 3,如果d为2,那么2、1、6为一组;9、3、3为一组;1、6为一组,3、3位一组,对每组都进行插入排序。//t为要排序的数组,l为存储d的数组,最后一个d必须为1public void shellSort(List<In...原创 2019-05-02 18:53:15 · 1153 阅读 · 0 评论 -
快速排序&归并排序
1、快速排序快速排序利用分治的思想,首先选取一个哨兵,将数组中大于哨兵的元素放到一边,小于数组的元素放到另一边,然后对两边也进行相同的操作。public void quickSort(List<Integer> t){ quickSort(t,0,t.size()-1);}private void quickSort(List<Integer> t,int l,i...原创 2019-05-02 20:12:54 · 303 阅读 · 0 评论 -
红黑树
一、定义 树中每个结点包括五个属性:key,color,left,right和p。如果一个结点没有子结点或父结点,则其left,right 或 p 指向NIL结点。可以把NIL视为指向红黑树的叶结点。 红黑树是满足一下性质的二叉搜索树(二叉排序树): 1.每个结点是红色或黑色的。 2.根节点是黑色的。 3.每个叶结点(NIL)是黑色的。 4.红色结点的两个子结点都是黑色的。...原创 2019-04-29 22:25:34 · 209 阅读 · 1 评论 -
java泛型——边界与通配符
边界在泛型的参数类型上设置的限制条件。例如:使用extends关键字<T extends AClass>2、边界可以有多个边界可以是类也可以是接口,接口可以有多个而类只可以有一个。类放在前,接口在后例如:class A{}Interface I1{}Interface I2{}public class B<T extends A & I1 &a...原创 2018-11-29 12:23:24 · 458 阅读 · 0 评论 -
java泛型—擦除的补偿
1、为什么需要补偿由于擦除,我们无法直接得到泛型参数的类型信息。所以任何运行时需要类型信息的操作都不能工作。例如:(1)无法使用instanceof关键字(2)无法通过new操作创建一个泛型参数类型的对象(3)无法创建泛型数组public class Erase<T>{ public static void f(Object arg){ ...原创 2018-11-19 21:24:23 · 798 阅读 · 0 评论 -
java接口
1、接口 接口没有任何具体的实现,它允许创建者确定方法名、参数列表和返回类型,但是没有任何方法体,只提供了形式,而未提供任何具体实现。 接口中的方法即使不声明为public,它们也是public。所以接口中的方法无法被声明为private。一个小问题:如果基类中的某个方法与接口中的方法相同,那么该基类的子类在实现这个接口时可以不实现基类中已经实现的方法class...原创 2018-10-12 13:56:02 · 99 阅读 · 0 评论 -
java内部类
1、定义 将一个类的定义放在另一个类的内部,这就是内部类。2、内部类与外部类的链接 内部类可以访问其外部类的素有成员。 当某个外部类创建内部类时,内部类就会捕获一个指向外部类对象的相关引用,就是用该引用来访问外部类的成员。 注意:当内部类是static时无法访问外部类的非static域,内部类只用得到外部类的引用时才能访问外部类成员,然而...原创 2018-10-12 15:28:43 · 99 阅读 · 0 评论 -
java类型信息——instanceof和isInstance
1、instanceof用法:a instanceof A,左边的a为对象,右边A为接口名或类名。A为类名时,如果a不是A或A的导出类则编译错误2、isInstance用法:A.isInstace(b),A为某个Class对象,右边b为某个对象(b可以为一个Class对象,依然表示b这个对象是不是为A类型的对象)isInstance和instanceof都考虑继承机构,即子类对象时...原创 2018-10-18 11:22:57 · 329 阅读 · 0 评论 -
java动态代理(传送门)
大佬的博客传送门,CSDN上好像有人转了,但是我没找到,所以这是博客园的https://www.cnblogs.com/xiaoluo501395377/p/3383130.html这篇文章讲得很好了,只是有些地方有点不同的意见1、InvocationHandler: 这个应该是动态代理类的Invocation handler(调用处理器)需要实现的接口,而不是动态代理类要实...转载 2018-10-18 14:12:29 · 251 阅读 · 0 评论 -
java空对象
1、定义 空对象就是一个正常的对象,只不过你用这个对象来替代null。2、作用 当使用null表示缺少对象时,在每次引用前都要测试其是否为null,因此需要在代码中加入判断语句,当判断语句变多时,代码就变得杂乱,使用空对象可以减少判断的语句。例子: 假如有一个Person类,Person类有姓名地址等属性。还有一个Position(职位)类,职位类包含了职...原创 2018-10-18 14:33:47 · 6449 阅读 · 0 评论 -
LinkedList部分源码分析(双链表)
LinkedList就是双链表的数据结构,所以主要复习下双链表的插入、删除和查找1、结点类结点类是LinkedList类的静态内部类,包括指向上一个结点的prev引用、指向下一个结点的next引用和数据域item。构造函数也是初始化这三个参数。 private static class Node<E>{ E item; Node<E> prev; ...原创 2018-10-16 11:42:44 · 164 阅读 · 0 评论 -
java类型信息——RTTI概念与Class类
1、RTTI(运行时类型识别) 是什么? RTTI即运行时类型识别,意思跟名字一样,在运行时识别某个引用所指向对象的确切类型。 为什么需要? 《编程思想》中的例子:有一个Shape类,它有几个子类Circle、Square和Triangle。假如创建一个Shape类型的ArrayList数组,那么这个数组是可以用Shape的子类来填充的,但是当你取出数组中的元素...原创 2018-10-17 23:32:46 · 214 阅读 · 0 评论 -
复用类
复用类意思就是可以通过创建新类来复用代码,而不需要从头开始编写,可以使用别人已经开发好的代码。复用类主要有两种方式:组合和继承1、组合语法 组合的方式是在新的类中产生现有的类,即在新类中声明对象的引用。2、继承语法 继承初始化顺序: 基类的静态域与静态代码块初始化(按照代码顺序) 子类的静态域与静态代码块初始化(按照代码顺序) ...原创 2018-10-10 19:37:34 · 157 阅读 · 0 评论 -
final关键字
1、final数据 表示永不改变的编译期常量。这类常量必须是基本数据类型,在定义时就进行赋值。一个既是static又是final 的域只占据一段不能改变的存储空间。 在运行时初始化的值,而你不希望他被改变。 注意:如果使用final的数据不是基本类型而是其他的对象引用,那么是指引用不再改变,即一旦引用指向某个对象后不能再指向其他的对象,但是对象自身是可以被修改的;对于基本类型则是保...原创 2018-10-10 20:54:34 · 97 阅读 · 0 评论 -
java泛型--擦除
1、理解java的泛型是一种伪泛型,对于泛型参数T,如果没有边界则擦除到Object,如果有边界则擦除到第一个边界。对于泛型类型则擦除为原生类型。一个体现类型擦除的例子/* * 一个利用反射产生数组的类。 */class ArrayMaker&amp;amp;amp;amp;amp;lt;T&amp;amp;amp;amp;amp;gt;{ priavte Class&amp;amp;amp;amp;amp;lt;T&amp;am原创 2018-11-04 16:24:01 · 297 阅读 · 0 评论 -
堆排序&优先队列
1、堆(二叉)堆是一个数组,它可以被近似看成是一颗完全二叉树。树上的每一个结点都对应数组的一个元素。除了最底层,该树是完全充满的,该树在数组中是从左向右填充的。表示堆的数组A通常包括两个属性:数组长度A.length和堆的元素个数A.heapSize。给定一个结点的下标i,可以知道它的父结点、左孩子和右孩子的下标分别为i/2、2i和2i+1。...原创 2019-05-08 20:04:02 · 268 阅读 · 0 评论