自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

阿劼

才疏学浅,请多多指教

  • 博客(27)
  • 资源 (1)
  • 收藏
  • 关注

原创 泛型与通配符

1.基本定义泛型:在定义类的时候并不会设置类中的属性或方法中参数的具体类型,而是在使用类时候在进行定义。泛型的意义:·会在编译期间对类型进行自动检查·会自动进行类型转换使用泛型需要注意的问题:·不能new泛型类型的数组new T[]·泛型的编译过程是对类型的擦除,将T擦除成Object类,而不是替换·擦除机制:向上擦除,即向基类的方向擦除·不能new泛型类型的对象,即...

2018-05-31 22:20:50 2672 1

原创 抽象类与接口

1.抽象类抽象类:用关键字abstract修饰,只声明方法的存在而不去具体实现它的类。抽象类不能被实例化。 ·包含一个或多个抽象方法的类必须被声明为抽象类,抽象方法不能使用private或static修饰。 ·抽象方法必须是public或protected的,缺省情况下默认为public。 ·抽象方法拥有构造方法,用于类对象的初始化。 ·抽象类可以不定义抽象方...

2018-05-31 12:03:11 146

原创 继承与组合

1、继承继承是Is a 的关系,比如说Student继承Person,则说明Student is a Person。继承的优点是子类可以重写父类的方法来方便地实现对父类的扩展。继承的特点:·父类的内部细节对子类是可见的。·子类从父类继承的方法在编译时就确定下来了,所以无法在运行期间改变从父类继承的方法的行为。·子类与父类是一种高耦合,违背了面向对象思想。·继承关系最大的弱点是打破了封装,子类能够访...

2018-05-31 11:26:24 247

原创 多态

基本概念: 1.多态性是指一个对象对应多种不同的类型,比如猫具备猫的属性,又具备动物的属性。 2.多态在代码中的体现:父类或接口的引用指向其子类的对象。 3.多态的优点:提高了代码的扩展性,前期定义的代码可以使用后期的内容。 4.多态的弊端:前期定义的内容不能使用后期内容的特有属性。 5.多态实现的前提:必须要有关系(继承或实现),要有覆盖。1.转型看以下例子:cla...

2018-05-31 11:16:04 2849 3

原创 继承

1.继承的概念: 继承:如果一个类别B“继承自”另一个类别A,就把这个B称为“A的子类”,而把A称为“B的父类别”也可以称“A是B的超类”。子类继承了父类的除了构造函数的其他数据成员。继承可以使得子类具有父类别的各种属性和方法,而不需要再次编写相同的代码。在令子类别继承父类同的功能。另外,为子类追加新的属性和方法也是常见的做法。 2.继承的优点:·提高了代码的复用性...

2018-05-31 10:05:56 359

原创 栈与队列的互相实现

1、问题描述:栈是先入后出的数据结构,而队列是先入先出的数据结构,要求用两个数据栈实现数据的先入先出,即队列。在数据栈的包内实现:public class StackToQueue{ public static void entryQueue(Stack s1, int val){ // s1保存数据 s1.push(val); } ...

2018-05-22 15:49:03 113

原创 归并排序

归并排序(mergesort),是创建在归并操作上的一种有效的排序算法,效率为 O(n\log n)} O(n\log n)。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用,且各层分治递归可以同时进行,是将两个已经排序的序列合并成一个序列的操作。其时间复杂度是O(log₂n),空间复杂度是O(n)。 本文用迭代法实现归并排序操作。看程序:impo...

2018-05-21 18:20:58 193

原创 堆排序

堆排序(Heapsort)是指利用堆这种数据结构所设计的一种排序算法。堆积是一个近似完全二叉树的结构,并同时满足堆积的性质: 即子结点的键值或索引总是小于(或者大于)它的父节点。堆节点的访问:通常堆是通过一维数组来实现的。在数组起始位置为0的情形中: ·父节点i的左子节点在位置 (2i+1)}; ·父节点i的右子节点在位置 (2i+2)} ; ·...

2018-05-21 18:08:56 134

原创 快排的几种优化方案

聚集相同元素排序是快速排序的一种优化方案,它的思路是在经过一次找基准之后把数据中与基准相同的数据聚集到基准左右,这样就可以少进行几次递归找基准的过程,从而提高了运行效率。 看以下程序:import java.util.Arrays;public class FocusAlikeQuickSort { /** 找基准的方法,与前文相同 */ public static ...

2018-05-21 16:11:19 2031

原创 快速排序的非递归实现

前一篇文章我们看了怎样用递归实现快速排序,那么如果不用递归方法,又该怎么实现快速排序呢? 思路是这样的:第一次找完基准后,若基准左右两边都还未有序,则按照从左往右的次序把新的索引全部压入一个栈中。当栈中存在数据时,每次出栈两个元素作为新的结束索引和开始索引重新找一次基准,这样就类似于递归地实现了多次找基准的目的。同样的,找基准的代码是一样的:public static int pa...

2018-05-16 01:38:58 830

原创 快速排序的递归实现

快速排序(Quicksort),又称划分交换排序(partition-exchange sort),简称快排,是一种效率很高的排序算法。排序思路:·从数列中挑出一个元素,称为"基准"(pivot),·重新排序数列,所有比基准值小的元素摆放在基准前面,所有比基准值大的元素摆在基准后面(相同的数可以到任何一边)。 在这个分区结束之后,该基准就处于数列的中间位置。这个称为分区(part...

2018-05-15 23:49:29 1528

原创 希尔排序

希尔排序: 希尔排序,也称递减增量排序算法,是插入排序的一种更高效的改进版本。希尔排序通过将比较的全部元素分为几个区域来提升插入排序的性能。这样可以让一个元素可以一次性地朝最终位置前进一大步。然后算法再取越来越小的步长进行排序,算法的最后一步就是普通的插入排序,但是到了这步,需排序的数据几乎是已排好的了(此时插入排序较快)。先来复习一下插入排序的代码:public ...

2018-05-14 21:24:15 157

原创 KMP算法

KMP算法: KMP算法是一种改进的字符串匹配算法,关键是利用匹配失败后的信息,尽量减少模式串与主串的匹配次数以达到快速匹配的目的。具体实现就是实现一个next()函数,函数本身包含了模式串的局部匹配信息。时间复杂度为O(m+n)。算法思想: 当第一次匹配失败以后,我们不把主串的索引回到开始索引的后一位,而是保持不动,若子串中存在前后相同的情况,则索引就可以不用回到0...

2018-05-14 21:03:53 107

原创 BF算法

BF算法: BF(Brute Force)算法是普通的模式匹配算法,BF算法的思想就是将目标串S的第一个字符与模式串T的第一个字符进行匹配,若相等,则继续比较S的第二个字符和 T的第二个字符;若不相等,则比较S的第二个字符和T的第一个字符,依次比较下去,直到得出最后的匹配结果。BF算法是一种蛮力算法。 ----@百度百科算法思想: 首先S[1...

2018-05-14 20:21:07 498

原创 优先级队列

如果我们给每个元素都分配一个数字来标记其优先级,这样我们就可以在一个集合中访问优先级最高的元素并对其进行查找和删除操作了。这样,我们就引入了优先级队列 这种数据结构。 优先级队列(priority queue) 是0个或多个元素的集合,每个元素都有一个优先级,对优先级队列执行的操作有查找、插入一个新元素 、删除 ;一般情况下,查找操作用来搜索优先级最高的元素,删除操作用来删除该元素 。对于优先...

2018-05-11 12:40:24 168

原创 队列的链表实现

前面我们看了队列的数组实现,本文来看看用链表实现队列的方法。链式队列的出现:存储队列元素的数组大小是固定的,另外,队列的数组实现需要用特殊的方式处理数组(保留一个数组元素用于判断数组 是否已满),以及索引front和rear(计算front/rear时用(front/rear + 1 )% maxSize 操作)。而队列的链表实现简化了 数组实现的许多特殊情况,并且动态分配...

2018-05-11 00:12:29 1069

原创 用堆栈实现“中缀表达式”转“后缀表达式”

逆波兰表示法是一种是由波兰数学家扬·武卡谢维奇1920年引入的数学表达式方式,在逆波兰记法中,所有操作符置于操作数的后面,因此也被称为后缀表示法。逆波兰记法不需要括号来标识操作符的优先级。逆波兰表达式的解释器一般是基于堆栈的。 逆波兰记法中,操作符置于操作数的后面。例如表达“三加四”时,写作“3 4 +”,而不是“3 + 4”。如果有多个操作符,操作符置于第二个操作数的后面,所以常规中缀记法的“3

2018-05-07 00:39:09 773

原创 队列的数组实现

队列,又称为伫列(queue),是一种先进先出的线性表。在具体应用中通常用链表或者数组来实现。队列只允许在后端(称为rear)进行插入操作,在前端(称为front)进行删除操作。 队列的操作方式和堆栈类似,唯一的区别在于队列只允许新数据在后端进行添加。看一下队列的基本操作:class QueueLink{ int[] arr; int front; int rear;

2018-05-06 23:42:39 318

原创 堆栈的链表实现

链式栈的出现:因为数组的大小固定,所以在堆栈的数组(线性)表示中,只有固定数目的元素才能压入堆栈。如果 在程序中压入堆栈的元素数目超过数组大小 ,程序就会出错,链式栈就是为了解决这个问题。使用引用变量可以动态的分配内存空间,使用链表可以动态的组织数据。对于链式栈的各种操作类似于单链表的操作,看以下程序:class LinkStack{ /** 结点类,用于结点初始化*/ c

2018-05-06 23:04:18 654

原创 顺序表

顺序表是在计算机内存中以数组的形式保存的线性表,是指用一组地址连续的存储单元依次存储数据元素的线性结构。也就是说像这样的: 像这样的: 还有像这样的: 嗯,介绍完了概念来看看顺序表的一些操作。看以下程序:import java.util.Arrays;class testSqlist { static int usedSize; int[] elem; // 初始化数组长度

2018-05-06 17:14:46 257

原创 堆栈的数组实现

堆栈是由同类元素组成的表,其元素的删除与增加都只发生在一端,这一端称为堆栈的顶。 堆栈是一种先入后出的数据结构。看以下对于堆栈的操作:class Stack { int top; int [] arr; public Stack() { // 设置栈的大小是10 this(10); } public S...

2018-05-05 02:28:39 1170

原创 双向链表

双向链表的概念:双向链表:也叫双链表,是链表的一种,它的每个数据结点中都有两个指针,分别指向直接后继和直接前驱。所以,从双向 链表中的任意一个结点开始,都可以很方便地访问它的前驱结点和后继结点。来看看双向链表的一些操作。看以下程序:/** 链表类 */class DoubleLinkedList{ /** 节点类,用于节点初始化 */ ...

2018-05-05 02:06:34 108

原创 循环单链表

前面几篇文章介绍了单链表的一些操作,本文接着来看循环单链表的一些操作。循环单链表:链表中最后一个结点的指针不再是结束标志,而是指向整个链表的第一个结点,可以看做是以头结点为起点 的单链表环。看以下程序: /** 链表类 */ class Link{ Entry head; /** 初始化一个循环单链表 */ publ...

2018-05-05 01:36:46 345

原创 两个有序单链表的合并

前面几篇文章介绍了单链表的一些基本操作、环的操作和链表的相交操作,本文来看看两个有序链表的合并问题。 问题描述:有两个链表,各自的数据大小有序,将他们合并为一个链表,并使数据大小有序。看以下代码:/** 链表类 */class Link{ public Entry head; public Link() { head = new En...

2018-05-05 00:49:34 404

原创 两个单链表的相交判断

前面一篇文章介绍了链表存在环及环的各种操作,本文主要来看两个链表的相交操作。看以下代码:/** 链表类 */class Link{ Entry head = new Entry(); /** 节点类,用于节点初始化 */ class Entry{ int data; Entry next; publ...

2018-05-05 00:15:02 168

原创 带环的单链表

前面一篇文章介绍了单链表的一些基础操作,本文接着来看一些单链表的其他操作。判断单链表是否存在环,求环的入口节点,环的长度 看以下程序:/** 链表类 */class Link{ Entry head = new Entry(); /** 节点类,用于节点初始化 */ class Entry{ int data; E...

2018-05-03 23:57:53 326

原创 单链表的基础操作

单链表:又名单向链表、线性链表,是链表的一种,其特点是链表的链接方向是单向的,对链表的访问要通过从头部开始,依序往下读取。单向链表的数据结构可以分为两部分:数据域和指针域,数据域存储数据,指针域指向下一个储存节点的地址。下面以具体程序看看单链表的各种操作:基本操作:头插法、尾插法、指定位置插入元素、求长度、求倒数第k个元素、链表逆置。class Link{ E...

2018-05-02 23:19:24 220

WordTest.java

博客中涉及的代码,欢迎大家下载指正,,,借鉴的文章在博文末尾已经给出,大家可以自行参阅,代码中新增了poiReadDocTest()方法,有对图片的处理

2019-12-17

空空如也

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

TA关注的人

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