自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Java 之 反射实现工厂模式(简单工厂模式)

之前写过的传统工厂模式在实际中是根本用不到的,它的最大的缺陷在于:每增加一个子类就需要修改工厂类。而利用反射,每当新增接口子类,无需去修改工厂类代码就可以很方便的进行接口子类扩容。eg:简单工厂模式package fansheLX;import static java.lang.Class.forName;interface IFruit{ public void eat()...

2019-04-29 17:16:09 768

原创 自定义一个异常类NoThisSoundException和Player类,在Player的play()方法中使用自定义异常,要求如下:

自定义一个异常类NoThisSoundException和Player类,在Player的play()方法中使用自定义异常,要求如下:NoThisSongException继承Exception类,类中有一个无参和一个接收一个String类型参数的构造方法,构造方法中都使用super关键字调用父类的构造方法。Player类中定义一个play(int index)方法,方法接收一个int类型的...

2019-04-25 19:35:06 4134

原创 快排优化之 二路快排、三路快排(重点)

二路快排:不管当条件是大于等于还是小于等于v,当数组中重复元素非常多的时候,那么就将数组分成了极度不平衡的两个部分,因为等于v的部分总是集中在数组的某一边。此时快排的时间复杂度再次退化为O(n^2)级别。其中一种优化的方式便是进行双路快排。和单路快排不同的是此时将小于v和大于v的元素放在数组的两端,那么将引用新的索引j的记录大于v的边界位置。如图:i索引不断向后扫描,当i的元素小于v的...

2019-04-17 18:18:23 707

原创 数据结构之快速排序(算法思想、基础算法实现)及其优化:随机化快排(重点)

快排的思想是这样的:如果要排序数组中下标从 p 到 r 之间的一组数据,我们选择 p 到 r 之间的任意一个数据作为 pivot(分区点)。遍历 p 到 r 之间的数据,将小于 pivot 的放到左边,将大于 pivot 的放到右边,将 pivot 放到中间。经过这一步骤之后,数组 p 到 r 之间的数据就被分成了三个部分,前面 p 到 q-1 之间都是小于pivot 的,中间是 pivot...

2019-04-17 17:55:43 500

原创 数据结构之 归并排序(算法思想 、复杂度分析)

归并排序是一个时间复杂度为O(nlogn)的排序算法归并排序的核心思想如下:如果要排序一个数组,先把数组从中间分成前后两部分,然后对前后两部分分别排序,再将排好序的两部分合并在一起,这样整个数组就都有序了。归并排序使用的就是分治思想。分治,顾名思义,就是分而治之,将一个大问题分解成小的子问题来解决。小的子问题解决了,大问题也就解决了。首先使用递归实现归并排序:private sta...

2019-04-17 17:34:11 838

原创 数据结构之选择排序 (算法思想、复杂度分析)

选择排序算法的实现思路有点类似插入排序,也分已排序区间和未排序区间。但是选择排序每次会从未排序区间中找到最小的元素,将其放到已排序区间的末尾。eg:代码实现:public static void selectionSort(int[] array){ int n = array.length; if(n <= 1){ return; }else...

2019-04-15 17:21:04 1636

原创 数据结构之希尔排序(算法思想 、代码实现、算法总结)

1959年Shell发明,第一个突破O(n^2)的排序算法,是简单插入排序的改进版。它与插入排序的不同之处在于,它会优先比较距离较远的元素。希尔排序又叫缩小增量排序。希尔(Shell)排序又称缩小增量排序,是对直接插入排序的优化。先将整个待排序的记录序列列分割成为若干子序列分别进行直接插入排序,具体算法描述:选择一个增量序列t1,t2,…,tk,其中ti>tj,tk=1;按增量...

2019-04-15 17:10:41 924

原创 数据结构之 折半插入排序(算法思想、代码实现)

折半插入排序(Binary Insertion Sort)是对插入排序算法的改进。排序思想:有一组数据待排序,排序区间为Array[0]~Array[n-1]。将数据分为有序数据和无需数据,第一次排序是默认Array[0]为有序数据,Array[1]!Array[n -1]为无序数据;有序数据分区的第一个元素位置为low,最后一个元素位置为high;遍历无序区间的所有元素,每次去无序区间...

2019-04-14 22:00:09 2154

原创 数据结构之直接插入排序(算法思想,复杂度分析)以及冒泡排序和直接插入排序的比较

一般来说,插入排序都采用in-place在数组上实现。具体算法描述如下:从第一个元素开始,该元素可以认为已经被排序。取出下一个元素,在已经排序的元素序列中从后向前扫描;如果该元素(已排序)大于新元素,将该元素移到下一位置;重复步骤3,直到找到已经排序的元素小于或者等于新元素的位置;将新元素插入到该位置后;重复步骤2-5;eg:代码如下:直接插入排序:public stat...

2019-04-14 21:34:29 808

原创 数据结构之冒泡排序及其优化(算法思想,复杂度分析)

冒泡排序冒泡操作只会操作相邻的俩个数据。每次冒泡操作都会对相邻的俩个元素进行比较,看是否满足大小关系。如果不满足就让这俩个元素进行交换。一次冒泡会让至少一个元素移动到它应该在的位置,重复n次,就完成了n个数据的排序工作。eg:可以看出:经过一次冒泡操作后,6这个元素已经在最终位置上了。要想完成所有数据的排序,只需要进行6次这样的冒泡操作。eg:实现原始冒泡public static...

2019-04-13 19:46:12 746

原创 数据结构之排序(概念)

1.1 什么是排序排序是程序开发中的一种非常常见的操作,对一组任意数据元素(或记录)经过指定关键字排序排序操作后,就可以吧它们变为一组按照关键字排序的有序序列。通常排序的目的是快速查找。1.2衡量指标对于一个排序算法来说,一般从以下3个方面来衡量算法的优劣:排序算法的执行消耗排序算法的内存消耗排序算法的稳定性1.2.1 排序算法的执行效率对于排序算法的执行效率的分析,一般会从...

2019-04-13 19:16:59 224

原创 Java 基于线性表的双链表实现( 面试 ,笔试重点)

实现链表,先定义一个线性表的接口,其中包括如下方法:向线性表中添加元素线性表中删除元素在线性表中查找指定索引的元素判断线性表中是否有指定元素修改线性表中指定索引的内容返回当前线性表元素个数直接清空线性表内容将线性表返回为数组public interface Sequence { /** * 向线性表中添加元素 * @param t 要存储的元素 ...

2019-04-12 16:31:21 181

原创 Java 基于线性表的链表实现 (笔试、 面试常考题)

实现链表,先定义一个线性表的接口,其中包括如下方法:向线性表中添加元素线性表中删除元素在线性表中查找指定索引的元素判断线性表中是否有指定元素修改线性表中指定索引的内容返回当前线性表元素个数直接清空线性表内容将线性表返回为数组public interface Sequence { /** * 向线性表中添加元素 * @param t 要存储的元素 ...

2019-04-12 16:27:01 363

原创 Java之 枚举

1.1实际上枚举就是一种高级的多例设计模式。eg:基于枚举开发enum Color { RED,GREEN,BLUE } public class TestDemo { public static void main(String[] args) { System.out.println(Color.BLUE); ...

2019-04-11 19:22:58 214

原创 Java 之泛型

1.泛型的基本使用泛型指的就是在类定义的时候并不会设置类中的属性或方法中的参数的具体类型,而是在类使用时再进行定义。如果要想进行这种泛型的操作,就必须做一个类型标记的声明。eg:泛型类的基本语法class MyClass<T> { T value1; }尖括号 <> 中的 T 被称作是类型参数,用于指代任何类型。实际上这个T可以任意写,但...

2019-04-06 16:01:47 339

原创 Java新特性:可变参数、foreach循环、静态导入

1.新特性(JDK1.5)从JDK1.0开始,几乎每个版本都会提供新特性。例如在JDK中有以下代表性版本:JDK1.2: 推出了轻量级的界面包:Swing JDK1.5: 推出新程序结构的设计思想。JDK1.8: Lambda表达式、接口定义加强1.1 可变参数现在假设说有这样的要求:要求设计一个方法,用于计算任意参数的整数的相加结果。这个需求在早期只能通过数组的方式来实现。...

2019-04-02 17:21:26 290

空空如也

空空如也

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

TA关注的人

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