- 博客(43)
- 收藏
- 关注
原创 工厂模式及抽象工厂模式
工厂模式工厂模式属于创建型模式,它提供了一种创建对象的最佳方式。在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。工厂模式主要解决接口选择的问题,定义一个创建对象的接口,让其子类自己决定实例化哪一个工厂类,工厂模式使其创建过程延迟到子类进行。优点:1、一个调用者想创建一个对象,只要知道其名称就可以了。2、扩展性高,如果想增加一个产品...
2019-08-01 17:10:21 233
原创 单例模式
单例模式单例模式确保一个类只有一个实例,并提供一个访问它的全局访问点。那么单例模式有什么用途呢?当我们想控制实例数从而节省系统资源或是存在一个类频繁的创建与销毁,就可以使用单例模式。例模式的特点:1.单例类只能有一个实例。2.单例类必须自己创建自己唯一的实例。3.单例类必须给所有其他对象提供这一实例。单例模式的线程安全问题:1.获取单例时,要保证不能产生多个实例对象。2.在使用单...
2019-08-01 00:15:39 177
原创 线程池
线程池线程池:线程池是一种多线程处理形式,处理过程中将任务添加到队列,然后在创建线程后自动启动这些任务。线程池线程都是后台线程。每个线程都使用默认的堆栈大小,以默认的优先级运行,并处于多线程单元中。如果某个线程在托管代码中空闲(如正在等待某个事件),则线程池将插入另一个辅助线程来使所有处理器保持繁忙。如果所有线程池线程都始终保持繁忙,但队列中包含挂起的工作,则线程池将在一段时间后创建另一个辅助...
2019-05-07 00:19:23 259
原创 ConcurrentHashMap
ConcurrentHashMap引入了分段锁的概念。将数据分成一段一段的存储,然后给每一段数据配一把锁,当一个线程占用锁访问其中一个段数据的时候,其他段的数据也能被其他线程访问,能够实现真正的并发访问。首先先来看一些基本的属性://初始容量,这个值指的是整个 ConcurrentHashMap 的初始容量static final int DEFAULT_INITIAL_CAPACITY =...
2019-04-26 00:21:21 137
原创 从尾到头打印链表
问题描述: 输入一个链表,按链表值从尾到头的顺序返回一个ArrayList。/*** public class ListNode {* int val;* ListNode next = null;** ListNode(int val) {* this.val = val;* }* }*...
2019-04-23 19:59:30 128
原创 替换空格
问题描述:请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。1、最简单的办法:直接使用java里的replaceAll()方法。public class Solution { public String replaceSpace(StringBuffer str) { ...
2019-04-22 22:45:29 130
原创 二维数组中的查找
题目描述在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。public class Solution { public boolean Find(int target, int [][] array) {//从左下角角查(从右上角查也可以) ...
2019-04-22 21:54:32 146
原创 Java IO流
Java IO即Java输入输出系统。在Java IO中,流是一个核心的概念。流的本质是一组有序的数据集合。既可以从流中读取数据,也可以往流中写数据。在Java IO中流既可以是字节流(以字节为单位进行读写),也可以是字符流(以字符为单位进行读写)。流的分类:1.按照流的方向:输入流:InputStream和Reader(读取外部数据(文件、磁盘,网络等)到程序中)输出流:OutputS...
2019-04-12 20:23:52 312
原创 Java运算符
Java运算符分类运算符指明对操作数的运算方式。组成表达式的Java操作符有很多种。按照操作数数目来分,可以分为以下三类:单目运算符,有一个操作数。双目运算符,有两个操作数。三目运算符,有三个操作数。按功能来分,可以分为以下六类:算术运算符赋值运算符关系运算符逻辑运算符位运算符其他运算符Java运算符优先级当一个表达式中存在多个操作符时,操作符的优先级决定了各部...
2019-03-31 19:54:53 180
原创 Java简介、主要特性,基本语法
Java简介Java是由Sun Microsystems公司于1995年5月推出的Java面向对象程序设计语言和Java平台的总称。由James Gosling和同事们共同研发,并在1995年正式推出。Java的主要特性简单性:Java语言的语法与C++语法很接近,使得大多数程序员很容易学习和使用。另一方面,Java丢弃了C++中很少使用的、很难理解的、令人迷惑的那些特性,如头文件,操作...
2019-03-29 20:24:42 393
原创 Java多线程实现复制文件
package problem;import java.io.File;import java.io.FileNotFoundException;import java.io.RandomAccessFile;/** * 多线程复制文件 */public class CopyFile { public static void main(String[] args) thro...
2018-09-26 15:49:59 628
原创 Linux网络
网络:网络是把不同的计算机连接起来就构成了网络 目的:资源共享,信息交互 构成网络:传输介质:双绞线 同轴电联 光纤 网络设备:交换机 路由器 互联网:把网络和网络连接起来就构成了互联网ip地址:网络号+主机号计算机网络 端口 标识一个应用程序 端口不能重复 1024以内 1024~4096 以上 临时端口分层:ISO的osi模型 7层...
2018-07-31 18:10:18 415
原创 脚本与脚本的调用
脚本(一般.sh结尾) 程序中加双引号与不加差距不大(是弱引用),依然可以给变量取值,但是如果有空格必须加上。 单引号强引用,直接输出字符 赋值等号两边不可以有空格,有空格则变成判断是否相等 #注释 ...
2018-07-31 17:19:50 1016
原创 linux文件查找,过滤,打包,系统运行级别,进程线程
su:切换为管理员 exit:退回到用户useradd name:增加用户 userdel name:删除用户(默认不移出家目录) userdel -r:删除用户连同家目录一起删除 find:查找一个文件 按文件名查找:find+路径+-name+文件名 grep:过滤(对字符串进行过滤的不是对文件) grep +“过滤条件”+文件名 用管道链接过滤 ...
2018-07-31 15:33:26 322
原创 InputStreamReader,OutputStreamWriter
InputStreamReaderInputStreamReader作用就是将“字节输入流”转换成“字符输入流”输入流译码器 private final StreamDecoder sd;构造函数//一个参数,根据in创建InputStreamReader,使用默认的编码 public InputStreamReader(InputStream in) { ...
2018-07-25 09:24:14 335
原创 PriorityQueue
PriorityQueue优先队列的作用是保证每次取出的元素都是队列中权值最小的。通过二叉小顶堆实现,可以用一棵完全二叉树表示。底层是通过数组实现的。(元素不能为空)。基本成员变量//默认容量 private static final int DEFAULT_INITIAL_CAPACITY = 11;//数组,用来存储数据 private transient Objec...
2018-07-23 16:10:33 317
原创 HashMap
HashMap哈希表(线程不安全,没有锁,会导致并发问题—扩容问题) 数组的时间复杂度O(n) 哈希冲突 哈希函数 构造函数(可以使元素均匀的分布在卡槽里): 1.直接寻址法(f(key)= key) 2.除留余数法(f(p) = p%n) 哈希冲突的解决方法 1.链地址法 构造函数:f(p) = p%16 数组+单项链表 2.探测法:pos(n...
2018-07-23 00:24:59 167
原创 ArrayList,LinkedList
ArrayListArrayList就是动态数组,用MSDN中的说法,就是Array的复杂版本,它提供了动态的增加和减少元素,实现了Collection和List接口,灵活的设置数组的大小等好处。 ——《百度》优点: 1.可以自动改变大小 2.可以灵活地插入删除元素,设置...
2018-07-22 22:14:48 171
原创 Linux进程及一些计算机基础知识
计算机体系 操作系统(管理计算机上的软硬件资源,为用户提供一个交互的接口) 计算机网络 :传输层 网络层 应用层 http速度由慢到快: 1.硬盘(机械硬盘(较慢),固态硬盘(较快)) 2.内存(掉电数据丢失) 3. catch缓存(正常情况下catch命中率可达到百分之九十) 4.寄存器 5.cpu程序(可执行)由指令构成 计算...
2018-07-07 15:02:40 248
原创 Linux常用命令
cd:切换当前目录 ls:查看文件与目录 ls -l:显示文件的详细信息 ls -a:显示指定目录下所有子目录,包括隐藏文件(隐藏文件以.开头) pwd:显示当前工作目录 who:显示当前登录的所有用户名 clear:清屏mkdir:创建目录 touch:创建文件 rm:删除文件 rm -rf:删除目录rm -f:强制删除rm -r:向下递归删除rmd...
2018-06-28 18:52:35 206
原创 linux操作系统,目录,文件类型
操作系统是管理和控制计算机硬件与软件资源的计算机程序,是直接运行在“裸机”上的最基本的系统软件,任何其他软件都必须在操作系统的支持下才能运行。操作系统提供一个虚拟的硬件平台。 Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的多用户、多任务、支持多线程和多CPU的操作系统。 目前国内Linux更多的是应用于服务器上,而桌面操作系统更多使用的是 Window...
2018-06-21 22:16:25 368
原创 Java泛型
泛型的定义: a:会对类型进行自动检查 b.会进行类型自动转化(编译时) 泛型的一些性质: 1.泛型< T > :T,是一个类型占位符,如果没有指定泛型类型,编译器会自动推演 2.java泛型是如何编译的======>类型的擦除机制=====>Object 向上擦除—>往基类方向进行擦除(与替换不同) 3.泛型的上界 &a
2018-06-01 18:55:06 172
原创 java抽象类、密封类,接口
抽象类抽象类:主要是对类本身进行抽象 * 对于一个父类来说,如果其某个方法在父类之中实现出来没有任何意义, * 必须根据子类情况来进行不同的实现。那么就可以将当前方法声明为抽象方法,包含 * 抽象方法的类 称为抽象类。 定义一个抽象类:abstract class Animal{//抽象类 可以有抽象方法 也可以有非抽象方法 abstract void cry...
2018-05-25 14:42:11 363
原创 Java继承
继承的概念 继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。继承需要符合的关系:is-a,父类更通用,子类更具体。 生活中的继承 食草动物和食肉动物属于动物类,兔子和羊属于食草动物类,狮子和豹属于食肉动物类。他们都有动物的一般性,但也有属于自己的行为等特性。所以子类会具有父类的一般特性也会具有自身的特性。 类的...
2018-05-23 17:56:06 208
原创 堆排序
堆排序:是指利用堆积树(堆)这种数据结构所设计的一种排序算法,它是选择排序的一种。可以利用数组的特点快速定位指定索引的元素。堆分为大根堆和小根堆。大根堆的要求是每个节点的值都不大于其父节点的值。在数组的非降序排序中,需要使用的就是大根堆,因为根据大根堆的要求可知,最大的值一定在堆顶。 代码实现:package problem;import java.util.Arrays;publi...
2018-05-18 13:49:02 124
原创 快速排序的优化
快速排序的优化: 1.当待排序数组中,数据比较少的时候,用直接插入法public static void insert_sort(int[] array,int start,int end){//直接插入排序 for(int i=start;i<end+1;i++){ int tmp=array[i]; int j; ...
2018-05-18 13:27:31 127
原创 快速排序
快速排序是对冒泡排序的一种改进。 找到基准,通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。 代码实现:package problem;/* * 快速排序(找基准) * 递归实现/非递归实现 * 时间复杂度:好,无序,O(nlog2...
2018-05-16 12:15:35 147
原创 希尔排序
希尔排序是插入排序的一种,是直接插入排序算法的一种更高效的改进版本。先取一个小于n的整数d1作为第一个增量,把文件的全部记录分组。所有距离为d1的倍数的记录放在同一个组中。先在各组内进行直接插入排序;然后,取第二个增量d2package problem;import java.util.Arrays;/* * 希尔排序:采用分组的策略,组内进行排序 * 时间复杂度O(n^1.3~1...
2018-05-16 11:29:20 140
原创 链式队列与优先级队列
链式队列package practice;//链式队列class TestLinkQueue { class Entry{ int data; Entry next; public Entry (){ data = -1; next = null; } p...
2018-05-11 11:49:26 362
原创 中缀表达式到后缀表达式的转换
规则: 相同等级迅运算符,栈内高于栈外 栈外的左括号优先级最高,入栈 栈内的左括号优先级最低 栈外右括号优先级最低,与栈内左括号优先级相同 优先级的定义:public class Constent {//数字越小优先级越高 public static final int OPERATORS_PRIO_PLUS_IN = 4; //栈内加法 public stati...
2018-05-09 18:15:09 198
原创 链式栈与循环队列
链式栈是一种数据存储结构,可以通过单链表的方式来实现,使用链式栈的优点在于它能够克服用数组实现的顺序栈空间利用率不高的特点,但是需要为每个栈元素分配额外的指针空间用来存放指针域。 链式栈的定义及其基本操作:package practice;/*入栈使用头结点 * 出栈只用删除head.next * * */class LinkStack1{ class Entry{ ...
2018-05-09 16:27:22 392
原创 循环单链表,双向链表,顺序栈
循环单链表循环单链表是单链表的另一种形式,其结构特点链表中最后一个结点的指针域不再是结束标记,而是指向整个链表的第一个结点,从而使链表形成一个环。和单链表相同,循环链表也有带头结点结构和不带头结点结构两种,带头结点的循环单链表实现插入和删除操作较为方便。package practice;class TestClink{ class Entry{//内部类 ...
2018-05-06 01:39:02 869
原创 顺序表
顺序表顺序表是在计算机内存中以数组的形式保存的线性表,线性表的顺序存储是指用一组地址连续的存储单元依次存储线性表中的各个元素、使得线性表中在逻辑结构上相邻的数据元素存储在相邻的物理存储单元中,即通过数据元素物理存储的相邻关系来反映数据元素之间逻辑上的相邻关系,采用顺序存储结构的线性表通常称为顺序表。顺序表是将表中的结点依次存放在计算机内存中一组地址连续的存储单元中。package prac...
2018-05-04 09:13:55 152
原创 单链表的一些问题
1.单链表的逆置 public Entry reverse(){ Entry newHead = null; Entry prev = null; Entry cur = head; while(cur != null){ Entry curNext = cur.next; i...
2018-04-27 14:14:41 259
原创 链表
实现链表的思路: 1)链表类,结点类(链表类的内部类),在main()方法创建一条链表类对象,通过方法逐步创建结点类,通过引用链接起来成为链表。 2)结点类包含数据和对下个结点的引用,以及可以对数据赋值的构造函数。 3)链表类的构造方法,只构造出不含数据的头结点。(外部类可以直接对内部类的私有成员进行访问,这样就可以直接修改引用) 链表类:class TestLink{ ...
2018-04-25 13:18:11 192
原创 Java类和对象
类 类的实质是一种数据类型,类似于int、char等基本类型,不同的是它是一种复杂的数据类型。因为它的本质是类型,而不是数据,所以不存在于内存中,不能被直接操作,只有被实例化为对象时,才会变得可操作。类的内部封装了方法,用于操作自身的成员。类是对某种对象的定义,具有行为,它描述一个对象能够做什么以及做的方法,它们是可以对这个对象进行操作的程序和过程。它包含有关对象行为方式的信息,包括它的名称、方...
2018-04-24 23:52:37 208
原创 Java学习--递归
递归的定义 程序调用自身的编程技巧称为递归。它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。递归的能力在于用有限的语句来定义对象的无限集合。一般来说,递归需要有边界条件、递归前进段和递归返回段。当边界条件不满足时,递归前进;当边界条件满足时,递归返回。 构成递归需具备的条件: ...
2018-04-17 18:51:52 196
原创 数组排序,查找元素,插入元素,删除元素,反转数组,填充数组
1.如何排序数组并搜素某个元素,找到返回下标public class problem { public static int bubblesort(int[] a,int m){ int tmp=0; for(int i=0;i<a.length-1;i++){ for(int j=0;j<a.length-1-...
2018-04-17 00:25:51 296
原创 Java学习--二分查找,数组倒序,合并,二维数组及其拷贝方式,函数重载,可变参数编程
二分法查找 public static int search(int[] array,int val){ int low = 0;//左下标 int high = array.length-1;//右下标 while(low <= high){ int mid = (low+high)>>>1...
2018-04-15 02:27:28 1177
原创 Java数组的拷贝方式,浅拷贝深拷贝
一,关于交换两个数字1.简单交换public static void swap(int a,int b) { int tmp=a; a = b; b = tmp; }运行结果如下: 可知,此方法并不可行,因为形参变量只有在被调用时才分配内存单元,在调用结束时,即刻释放所分配的内存单元。形参只在函数内部有效。函数调用结束...
2018-04-13 17:51:32 2816
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人