
咸鱼学Java
杂文
咸鱼塘塘主
我只是不想我的未来黯淡无光
展开
-
咸鱼学Java-Java中的枚举类
枚举类的定义枚举类的个数和属性是固定的不允许被修改的。如人只有男人和女人。自己实现的枚举类个数固定属性固定,根据这个需求我们可以知道 在自己实现枚举类的时候需要注意 1.private修饰构造器,让此对象不能在外部创建 2.属性前要用private final修饰防止被恶意修改 3.该类的所有实例应该用public static final修饰 我们可以自己写一个人类的枚举类...原创 2018-07-22 23:48:31 · 176 阅读 · 0 评论 -
咸鱼学Java-Java中的注解
注解定义:注解(Annotation),也叫元数据。一种代码级别的说明。它是JDK1.5及以后版本引入的一个特性,与类、接口、枚举是在同一个层次。它可以声明在包、类、字段、方法、局部变量、方法参数等的前面,用来对这些元素进行说明,注释。使用方法我们平时在进行Junit单元测试的时候,需要加上@Test这个就是一种注解。此注解用于Junit识别测试方法。自定义注解注解的定义和类接...原创 2018-07-23 13:15:53 · 219 阅读 · 0 评论 -
咸鱼学Java-多线程基础
实现多线程的方法1.继承Thread,并且重写run方法(线程体) 2.实现Runnable接口,实现run方法(线程体) 必须重写run1.继承Threadclass MyThread extends Thread{ public MyThread(String name) { //此处调用父类的构造方法,在父类中有个构造方法可以传入名称,作为线程的...原创 2018-07-28 12:15:09 · 193 阅读 · 0 评论 -
45-通过jmap来分析Java的内存泄露
初始代码/** * 泛型栈 * @author 焦焱 * * @param <T> */public class TStack<T> { /** * 泛型数组 */ private T[] data = null; /** * 栈顶 */ private int top; /...原创 2018-06-01 19:45:34 · 10669 阅读 · 0 评论 -
44-咸鱼学Java-通配符
通配符的定义通配符用?表示,其具有上界而且具有下界,定义方式分别为 上界&amp;amp;lt; ? extends Object&amp;amp;gt; 下界&amp;amp;lt; ? super Object&amp;amp;gt;原创 2018-06-01 19:15:48 · 266 阅读 · 0 评论 -
43-咸鱼学Java-泛型编程
简介泛型是程序设计语言的一种特性。允许程序员在强类型程序设计语言中编写代码时定义一些可变部分,那些部分在使用前必须作出指明。泛型的使用先将之前写过的栈转换为泛型栈/** * 泛型栈 * @author 14831 * * @param &lt;T&gt; */public class TStack&lt;T&gt; { /** * 泛型数组 ...原创 2018-06-01 01:45:58 · 222 阅读 · 0 评论 -
42-咸鱼学Java-详解反射中的Class对象
Class中的方法 MethodName 作用 getName() 获得类的完整路径 getDeclaredFields() 获得类的所有属性(包括私有成员变量) getDeclaredMethods() 获得类的所有方法 getConstructors() 得到构造函数 newInstance() 获得对象 g...原创 2018-05-27 16:31:06 · 221 阅读 · 1 评论 -
41-咸鱼学Java-Java中的反射和类加载机制
反射反射的核心Class类在Java中,每个class都有一个相应的Class对象。也就是说,当我们编写一个类,编译完成后,在生成的.class文件中,就会产生一个Class对象,用于表示这个类的类型信息。 对于Class类有几点要注意的: 1.这个class不能人为手动生成,只能由系统生成。 2.这个JVM(Java虚拟机)中每个类的Class类只能有一个。 3.任何一个类都有一...原创 2018-05-26 15:57:53 · 247 阅读 · 0 评论 -
40-咸鱼学Java-String,StringBuilder,StringBuffer的异同
String String str1 = "hello"; str1 = str1 + "world"; System.out.println(str1);对此代码进行反汇编 可以看出来在其中调用了invokespecial 构造了一个StringBuilder对象,说明String字符串相加其实是通过StringBuilder的append方法进行的。其顺...原创 2018-05-26 14:42:33 · 174 阅读 · 0 评论 -
39-咸鱼学Java-面向对象编程核心之抽象类,密封类和接口
抽象类abstract class Animal{ abstract public void cry(); //抽象方法不实现 //抽象类中可以有非抽象方法 public void fun1() { System.out.println("Animal fun1"); }}//当一个类实现某个抽象类的时候,必须实现其抽象方...原创 2018-05-24 20:37:38 · 330 阅读 · 0 评论 -
38-咸鱼学Java-面向对象编程核心之继承
继承继承主要是为了代码的复用,其关系如同Is-a,就如同狗是一个动物,狗就是子类,动物就是基类(父类),其就存在一定的继承关系,此篇文章主要讨论父类和子类直接的关系。 父类/** * 人类(基类) * @author * */public class Person { /** * 姓名 */ String name ; /**...原创 2018-05-21 14:21:34 · 200 阅读 · 0 评论 -
37-咸鱼学Java-归并排序
简介归并排序(MERGE-SORT)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。 —–百度百科 先红色的归并,再蓝色的,再紫色代码这里写代码片...原创 2018-05-20 13:03:09 · 191 阅读 · 0 评论 -
36-咸鱼学Java-堆排序
简介堆排序(Heapsort)是指利用堆积树(堆)这种数据结构所设计的一种排序算法,它是选择排序的一种。可以利用数组的特点快速定位指定索引的元素。堆分为大根堆和小根堆,是完全二叉树。大根堆的要求是每个节点的值都不大于其父节点的值,即A[PARENT[i]] &gt;= A[i]。在数组的非降序排序中,需要使用的就是大根堆,因为根据大根堆的要求可知,最大的值一定在堆顶。——百度百科 在说堆之前...原创 2018-05-18 14:24:42 · 206 阅读 · 0 评论 -
35-咸鱼学Java-快速排序的几种优化方式
快速排序介绍 在此文章之前请先阅读快速排序 快速排序的优化主要是再基准的选择上和尽量减少partition的运行。 其基准选择有几种方法1.随机选择法2.三分取中法,等等。 减少partition的方法主要输相同元素聚合。 其实现方法为1.随机选择法原来的选择基准为一直选择low下标的元素,所以在处理某些大量有序的序列的时候就会造成大量的元素在一侧,使得快排没有任何效果。 此时...原创 2018-05-18 00:33:51 · 261 阅读 · 0 评论 -
34-咸鱼学Java-快速排序递归与非递归
简介快速排序由C. A. R. Hoare在1962年提出。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。—–百度百科 其主要原理是每次都能确定一个元素的确定位置。 时间复杂度 好情况(无序) O(nlog2n) ...原创 2018-05-15 00:22:42 · 842 阅读 · 0 评论 -
33-咸鱼学Java-Shell排序
简介希尔排序是一种插入排序算法,它出自D.L.Shell,因此而得名。Shell排序又称作缩小增量排序。Shell排序的执行时间依赖于增量序列。 其主要操作是插入排序,不过其通过分组来进行插入。 其基本思想是 采用分组的策略 让组内有序 组内使用直接插入排序 1,尽量让每组数据变得有序 2,因为越有序越快 时间复杂度 时间复杂度O(n^1.3–1.5) 不稳定代码...原创 2018-05-14 18:02:32 · 215 阅读 · 0 评论 -
32-咸鱼学Java-KMP字符串匹配算法Java版
题目为 abcabdca 答案为 -1,0,0,0,1,2,0,0 i k 图解 执行操作 操作后i 操作后k 操作后next数组 2 0 k=next[k] 2 -1 -1,0 2 -1 判断为-1 next[i++]=++k 3 0 -1,0,0 3 0 k=ne...原创 2018-05-14 17:03:21 · 298 阅读 · 0 评论 -
31-咸鱼学Java-BF字符串匹配算法Java版本
简介BF算法,即暴风(Brute Force)算法,是普通的模式匹配算法,BF算法的思想就是将目标串S的第一个字符与模式串T的第一个字符进行匹配,若相等,则继续比较S的第二个字符和 T的第二个字符;若不相等,则比较S的第二个字符和T的第一个字符,依次比较下去,直到得出最后的匹配结果。BF算法是一种蛮力算法。———百度百科 BF算法就如同算法中的暴力破解法,虽然可以解决问题,但是效率不高,字符...原创 2018-05-14 17:03:13 · 267 阅读 · 0 评论 -
30-咸鱼学Java-两个队列实现栈
队列的代码详情双队列栈的代码/** * 双栈队列 * @author 14831 * */public class TwoQueueStack { /** * 1号队列 */ private LinkQueue q1 = new LinkQueue(); /** * 2号队列 */ private L...原创 2018-05-14 16:22:46 · 174 阅读 · 0 评论 -
29-咸鱼学Java-Java中的优先队列
简介优先队列,显而易见,主要的是优先性,其次是队列,其优先性可以通过插入位置的不同进行判断,其队列性,决定了其可用原来的队列进行改造,来实现优先队列。 其图解为 代码/** * 优先队列 * @author 焦焱 * */public class PrioLinkQueue { /** * 内部类 * @author 14831 ...原创 2018-05-13 18:25:23 · 229 阅读 · 0 评论 -
28-咸鱼学Java-Java中的链式队列
简介链式队列也符合队列的基本模式,及先进先出,后进后出的原则,只是实现方式发生了改变,其图解为 红色的为引用,黑色的为节点 其具体实现方式见代码。代码/** * 链式队列 * @author 焦焱 * */public class LinkQueue { /** * 队头 */ private Entry front = n...原创 2018-05-13 16:38:43 · 180 阅读 · 0 评论 -
27-咸鱼学Java-Java中的循环队列
队列介绍队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。—–百度而循环队列的结构如图所示 其本质类似于将一个数组弯折,首尾相连,这样的话。可是这样的话因为需要判断数组是否满,是否空,所以需要手动浪费掉一个空间,最标志位这样...原创 2018-05-08 19:19:00 · 197 阅读 · 0 评论 -
26-咸鱼学Java-两个栈实现队列
栈的代码详情双栈队列代码代码/** * 双栈队列 * @author 焦焱 * */public class TwoStackQueue {private LinkStack t1 = new LinkStack();private LinkStack t2 = new LinkStack();private int size=0;public int g...原创 2018-05-08 14:11:10 · 169 阅读 · 0 评论 -
25-咸鱼学Java-Java中的链式栈
数组栈及栈的结构 详情链式栈代码/** * 链式栈 * @author 焦焱 *入栈使用头插法 *出栈只需要删除头结点第一个元素 */public class LinkStack {class Entry{ int data; Entry next; public Entry(int data) { this.data ...原创 2018-05-08 13:29:02 · 186 阅读 · 0 评论 -
24-咸鱼学Java-栈的应用-波兰式转逆波兰式
波兰式介绍波兰式是在通常的表达式中,二元运算符总是置于与之相关的两个运算对象之前,所以,这种表示法也称为前缀表达式。逆波兰式介绍逆波兰式(Reverse Polish notation,RPN,或逆波兰记法),也叫后缀表达式(将运算符写在操作数之后)其不同的地方只是运算符的位置不同 举个例子2+3为波兰式,23+就为逆波兰式 其转换方法为 这种操作类似于...原创 2018-05-08 13:04:50 · 451 阅读 · 0 评论 -
23-咸鱼学Java-Java中的栈
栈的图示 代码/** * 栈 * @author 焦焱 * */public class Stack { /** * 栈顶标记 */ int top; /** * 栈内元素 */ int[] elem; /** * 无参构造 */ public Stack() ...原创 2018-05-05 22:53:11 · 181 阅读 · 0 评论 -
22-咸鱼学Java-Java中的双向链表
双向链表图示 代码/** * 双向链表 * @author 焦焱 * */public class DoubleLink {class Entry{ int data; /** * 后继 */ Entry next; /** * 前驱 */ Entry pre; /** ...原创 2018-05-05 22:05:28 · 186 阅读 · 0 评论 -
21-咸鱼学Java-Java中的循环单链表
循环单链表图示 代码/** * 循环单链表 * @author 焦焱 * */public class LoopLink { class Entry{ /** * 数据域 */ int data; /** * 指向下一个节点的地址域 */ ...原创 2018-05-05 21:32:57 · 162 阅读 · 0 评论 -
20-咸鱼学Java-Java中的顺序表
顺序表是在计算机内存中以数组的形式保存的线性表,线性表的顺序存储是指用一组地址连续的存储单元依次存储线性表中的各个元素、使得线性表中在逻辑结构上相邻的数据元素存储在相邻的物理存储单元中,即通过数据元素物理存储的相邻关系来反映数据元素之间逻辑上的相邻关系,采用顺序存储结构的线性表通常称为顺序表。顺序表是将表中的结点依次存放在计算机内存中一组地址连续的存储单元中。——–百度百科/** * 顺...原创 2018-05-03 11:06:53 · 216 阅读 · 0 评论 -
19-咸鱼学Java-两个有序链表的合并
如图 黑色的线为合并前的链表,蓝色的为合并后。 分析这个问题,可以发现此问题符合递归的四条基本法则。1.基准情形。必须总要有某些基准情形,他无需递归就能解出。 2.不断推进。对于那些需要递归求解的情形,每一次递归调用都必须要使状况朝向一种基准情形推进。 3.设计法则。假设所有的递归调用都能运行。 4.合成效益法则。在求解一个问题的同一实例时,切勿在不同递归调用中做重复性的工作。...原创 2018-05-01 09:34:06 · 253 阅读 · 0 评论 -
18-咸鱼学Java-特殊的链表(环和交)
链表是一长串的数据,可是当一长串的数据相交或者相互环绕的时候就变成了相交的链表和有环的链表,此文主要说明一下有环链表和相交链表的一些基本操作。 链表的代码有环链表创建实验条件 public void createLoop() { Entry cur = head; while(cur.next!=null) {...原创 2018-04-30 23:34:23 · 199 阅读 · 0 评论 -
17-咸鱼学Java-内部类实际应用-Java链表
内部类 ,未使用内部类的链表可以点击名字查看。 此篇文章主要介绍运用内部类的Java链表的写法。 链表正如其名,就像一个一个珠子被串起来,只有前一个珠子和后一个珠子和当前珠子有关系,是一种一对一的数据结构。 这样的数据结构,在插入和删除节点的时候,会显的特别方便,因为不像数组一样要移动大量的元素,而只需要改变一些引用就可以实现增删。链表的增加1)头插法 顾名思义头插法及每次...原创 2018-04-24 21:56:35 · 348 阅读 · 0 评论 -
16-咸鱼学Java-内部类补充
上一篇文章,说了实例内部类和静态内部类,这篇文章重点说明,本地内部类和方法内部类本地内部类也叫本地方法内部类,局部内部类。指在一个方法内定义的类,只有在当前方法中才能对局部内部类里面的方法以及变量进行访问,局部内部类只能访问其所在方法的final类型变量。class test1{ private static int data1 = 1000; private f...原创 2018-04-24 21:24:03 · 165 阅读 · 0 评论 -
15-咸鱼学Java-内部类
实例内部类实例内部类简而言之就是类里面嵌入着类,就像环套环一样 Demo:class OuterClass2 //外部类{ private int a = 1000; public OuterClass2() { System.out.println("OutClass Init"); } public void show(...原创 2018-04-19 21:09:02 · 284 阅读 · 0 评论 -
14-咸鱼学Java-面向对象基础:类
类类就相当于自定义类型,有自己的数据域,有自己的方法。属于一种用户自定义类型。类的目的就是模拟现实中存在的物体,如一个Person类,一个人他有自己的名字,年龄,性别等等,他有自己所具有的动作,吃饭,睡觉,工作等。类的定义class Person{ private String name;//为了保证数据完整性所以必须设定为私有变量 private int age;...原创 2018-04-19 20:40:58 · 328 阅读 · 0 评论 -
13-咸鱼学Java-递归与斐波拉契,汉诺塔
递归简介详细规则等,见递归简论 递归简而言之即为自己调用自己。最不适合递归之斐波拉契递归解法public static int fabonic(int n){ if(n==1||n==2) return 1; else return fabonic(n-1)+fabonic(n-2);}非递归解法publ...原创 2018-04-17 00:13:00 · 184 阅读 · 0 评论 -
12-咸鱼学Java-数组排序之选择,插入
选择排序public static void selectSort(int[] a){ int temp = 0; //交换使用的临时变量 int minIndex = 0; //最小数的下标 for (int i = 0; i &lt; a.lengt...原创 2018-04-16 23:37:44 · 196 阅读 · 0 评论 -
11-咸鱼学Java-简单二分查找
代码/** * 二分查找 * @author 焦焱 * */public class binarySearch { /** * 查找函数 * @param a int型的数组 * @param x 需要查找的数 * @return 如果找到返回下标,没找到返回-1 */ public static int fun(...原创 2018-04-15 15:53:42 · 197 阅读 · 0 评论 -
10-咸鱼学Java-Java中的二维数组
二维数组的定义和初始化 //规则数组 int[][] a = new int[2][3]; int[][] a2 = {{1,2,3},{4,5,6}}; int[][] a3 = new int[][]{{1,2,3},{4,5,6}}; //不规则数组 int[][] a4 = new int...原创 2018-04-15 14:57:47 · 225 阅读 · 0 评论 -
9-咸鱼学Java-一些例题
1.如何排序数组并搜索某个元素,返回下标?package homework;public class one { public static int maopaoSelect(int[] a,int x) { int temp; for (int i = 0; i &lt; a.length; i+...原创 2018-04-13 01:08:08 · 246 阅读 · 0 评论