自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Java_JDBC

JDBC:用于执行SQL语句的java API,为多种数据库提供统一的访问,不需要具体了解每种数据库的驱动的写法,只需要了解JDBC的接口规范,每种数据库的具体驱动都需要实现JDBC的规范

2021-03-15 19:29:18 156

原创 Java反射

java文件编译成class文件,ClassLoader加载class文件到JVM中,然后运行,不同的class会有不同的ClassLoader,这个过程叫运行,运行过程中ClassLoader可以通过class动态的获得A类中的属性和方法,动态生成A的对象实例,称为反射机制...

2021-03-08 20:34:35 145 2

原创 算法:双索引技术

使用两个索引,定义两个索引的意义,使用一定的规则移动它们,如对撞指针、滑动窗口注意:子数组可以是不连续的;如果是返回最短的连续子数组,则需要考虑有多个解(本题返回最短连续子数组的长度,不需要考虑)(1)暴力解法,遍历所有的连续子数组,计算其和(2)滑动窗口:保持一个长度不固定,但长度被i和j定义的窗口当前一个i到j的连续子数组,其和还不到s,j向后移动,将数据纳入要考察的连续子数组中,直到满足sum>s,找到一个满足的连续子数组,将长度记录下来从i这一端缩小子数组,到某一时刻sum&

2021-02-21 11:47:44 551

原创 算法:归并排序

归并:将两个有序数组合并成一个有序数组 public void merge(int left,int right,int mid,int[] num //标记左半区第一个未排序的元素 int l_pos=left; //标记右半区第一个未排序的元素 int r_p

2021-02-07 21:27:02 90

原创 算法:快速排序

public void quickSort(int left,int right,int[] nums){ //在[left.right]中进行排序 //如果左边索引比右边索引大,是不合法的,直接结束 if(left>right) return; int base=nums[left]; int i=left; int j=right; //i和j不相遇时,在循环..

2021-02-01 17:01:32 132 1

原创 算法:复杂度分析

O衡量量级上的差距,当n突破一个点时,时间复杂度低的算法一定比时间复杂度高的算法要快,n越大优势越明显O表示算法执行的最低上界,算法有几部分(n规模一致),随着数据规模增大,以量级最高的时间复杂度作为主导;规模不一致时要分开考虑时间复杂度计算实例:考虑最长的字符串长度,因为O是一个上界,假设数组中的字符串长度都更最长的字符串长度是一样的,涵盖了最坏的情况,排序算法O(nlogn)中的nlogn表示比较的次数,对整型数组进行排序只需进行nlogn次比较,两个整型数据的比较是O(1)级别的,两个字..

2021-01-21 20:50:36 1660

原创 算法:二分查找法(处理有序数组时可用)

处理边界索引指向:保证循环不变量,虽然left和right的值在不断变化,但待查找的target在[l…r]的范围里的声明是不变的,控制边界保证循环不变量 public int binarySearch(E arr[], E target, int n) { int left=0; int right=n-1;//在[left..right]的范围里寻找target while(left<=right) {//没有可查找内容时跳出循环;当lef

2021-01-19 19:58:40 250

原创 数据结构:哈希表(线性结构)

(1)哈希表将我们关心的内容转换成索引,直接用一个数组来存储相应的内容,数组本身支持随机访问,可使用O(1)的复杂度来完成各项操作(2)哈希表中可以存储各种数据类型,对于每种数据类型,都需要一种方法将其转换成索引,将该数据类型转换成索引的函数就是哈希函数(3)复杂情况下,如键是指身份证号,不能直接用来当作数组的索引;键是字符串,需要设计一个哈希函数将字符串转换成索引;键是浮点数,符合类型等,需要设计一个合理的哈希函数(4)很难保证每一个键通过哈希函数的转换对应不同的索引,可能产生哈希冲突关键问题.

2021-01-05 21:38:17 1391

原创 数据结构:优先队列和堆

操作系统进行任务调度:(1)如果任务数量是固定的,不需要制作新的数据结构来处理,可以按照优先级进行排序然后执行,这个过程需要的是一个排序算法而不是优先队列(2)实际中需要对源源不断的任务进行优先级排序并处理,不能在一开始就确定需要处理多少个任务,需要使用优先队列来解决(3)在实现优先队列时不用管什么是优先级高的对数据结构来说,如果有一项是O(n)复杂度的话,进行n个元素的操作,整个过程的时间复杂度是O(n2),相对耗时设计一个抽象的数据结构,队列本身是一个抽象的数据结构,在这个基础上限制它的性.

2020-12-27 22:09:01 297

原创 数据结构:映射

需要映射数据结构一般是为了根据键来快速寻找值,键充当索引删除元素时,键充当索引,可以不考虑键对应的值是什么,只要删除指定键对应的数据,相应的值也删除了查找是否存在某个数据,也可以直接根据键来查找,类似于查字典,只要知道某个单词是否存在,不去管单词的释义是什么;类似查车牌号是否注册,不去管车辆的具体信息使用get拿到具体信息set给定键和新的值的信息,更新键对应的值,而不是传入新的键和值,不然就和add的作用重合了public class LinkedListMap<K,V>

2020-12-20 13:03:01 1207

原创 数据结构:集合

高层数据结构集合和映射:高层数据结构,类似于栈和队列,定义好了相应的使用接口,其底层实现可以是多种多样的,栈和队列的底层实现可以是动态数组或链表二分搜索树本身支持集合这种高层数据结构的所有操作:去重public class BstSet<E extends Comparable<E>> implements Set<E>{ private BST<E> bst; public BstSet(){ bst=new BST

2020-12-18 21:54:02 377 1

原创 数据结构:二叉树

(1)二叉树不需要在创建数据结构时就决定这个数据结构最多可以容纳多少元素(2)左右孩子都没有的节点叫做叶子结点(3)链表具有天然的递归结构,但由于链表是线性的,可以使用循环完成操作;而对树结构来说,递归写法比非递归写法简单(1)一个节点也是二叉树;空也是二叉树,跟链表一样,链表只有一个结点或没有结点也可以看作一个链表**(递归的基本问题,对左子树或右子树为空的二叉树进行操作)**(2)每个节点的左子树和右子树也是二叉树**(递归中的更小的相同问题,对节点的不为空左子树和右子树进行递归操作,左子树.

2020-12-03 22:16:40 289

原创 LeetCode(递归(数组求和,斐波那契数列))

public class Sum { //计算arr[l..n)这个区间内所有数字的和,递归函数 public int sum(int[] a,int l){ if(l==a.length) return 0; return a[l]+sum(a,l+1); } //用户使用的函数,对用户屏蔽递归方法 public int sum(int[] a){ return sum(a,0); }.

2020-11-26 21:23:37 356

原创 Java流程控制

包括顺序结构、选择结构、循环结构选择1、if语句的判断条件类型为boolean2、判断条件是一个范围3、else if隐含表示条件满足是前一个表达式条件的取反且满足表达式2,则执行语句24、else与离它最近的if匹配1、switch的判断条件为常量值,该表达式只能是int类型或与int类型等价的char、byte、short,或string类型2、switch后的中括号不可省略3、case后的语句可为多条语句,且可不用加大括号4、default可以不写5、执行到break跳出当前循环,

2020-11-26 10:37:48 127

原创 Java运算符

表达式由运算符和操作数组成1、52、num3、sum=num1+num2运算符包括:算术、赋值、关系、逻辑、条件关系运算符(结果为boolean类型)1、结果为boolean类型< >= ==。。。。2、浮点数与整数进行比较,值相等就返回truefloat i=1.0000f;int j=1;System.out.println(i==j);逻辑运算符(结果为boolean类型)1、操作数为boolean类型(true)&&(i>3)2、&a

2020-11-26 10:37:36 59

原创 数据结构:时间复杂度

O:描述算法的运行时间和输入数据规模之间的关系(1)T=c*n+c2,T与n之间呈线性关系(2)O(n)忽略T与n之间的具体常数(3)O(n)与O(n^2)对任意输入来说,O(n)确实不一定快于O(n^2),具体要看T与n之间的常数但是O其实是描述渐进时间复杂度,描述n趋近于无穷的情况,T=2n^2+300n+100,当n趋于无穷时,低阶项被忽略,时间复杂度为O(n^2)(1)O(1)表示操作消耗的时间和数据规模没有关系,addLast在常数时间里完成(2)addFirst需要把每个元素都

2020-11-26 10:37:21 843

原创 Java包装类

基本数据类型不具有对象特征,使用包装类让基本数据类型拥有属性、方法,能像对象一样进行交互1、包装类有final修饰,不能被继承2、数值型包装类继承自Number,字符型包装类和布尔型包装类继承自Object3、Integer类有两种构造方法:Integer(int value) Integer(String s)4、拆箱和装箱装箱,基本类型数据转换成包装类包括自动装箱和手动装箱,自动装箱是直接赋值,手动装箱是调用包装类中的方法int t1=3;//自动装箱,直接赋值Integer t2=t

2020-11-26 10:37:09 95

原创 Java单例模式

单例模式使得类的一个对象成为类系统中的唯一实例,自行实例化向整个系统提供解决方法:1、只提供私有的构造方法2、含有一个该类的静态私有对象(有且只有)3、提供一个静态的公有方法用于创建、获取静态私有对象懒汉式:类内实例对象创建时并不直接初始化,直到第一次调用get方法时,才完成初始化操作(静态公有方法中实例化),用时间换空间,类加载时不会开辟对象空间,第一次使用时较慢,当多线程并发操作时,由于时间片切换,导致一定的线程风险,线程不安全private static SingleMode single

2020-11-26 10:36:53 54

原创 Java多态

编译时多态:方法重载,在编译时就能进行不同行为的区分运行时多态:程序运行时动态决定调用哪个方法,引用变量指向哪一种具体类型,变量引发的方法调用的是哪一种类中定义的方法(多态讨论运行时多态)**多态:**允许不同类的对象对同一消息做出不同的响应(同一个行为,不同对象的表现形式不同)**多态条件:**1、满足继承关系2、父类引用指向子类对象向上转型:子类对象转型为父类对象,称为向上转型,父类引用指向子类实例animal类型的引用,吃的行为,但随着在运行时实例化的对象类型不同,执行的具体行为能力不同,

2020-11-26 10:35:23 93

原创 Java抽象(多态)

抽象类,限制实例化1、不允许被直接实例化,只能被继承2、可通过向上转型指向子类实例应用场景:某些父类只是知道其子类应该包含怎样的方法,但无法准确知道这些子类如何实现这些方法Animal two=new Cat("f",6,8);~抽象方法:把在父类中只是限定子类必须具有的某种行为能力的方法做成抽象方法public abstract void run();~1、不允许有方法体,不需要具体实现2、子类必须重写父类的抽象方法,否则子类也是抽象类抽象方法使用价值1、某种行为能力在不同子类中的表

2020-11-26 10:34:46 149

原创 Java封装

封装隐藏部分对象信息,留出访问接口1、修改属性的可见性,private(只能在当前类内被访问,在类外不允许直接访问)2、创建getter/setter方法3、在getter/setter中加入属性控制语句(对属性值的合法性进行判断,解决逻辑隐患)...

2020-11-26 10:34:29 86

原创 Java字符串

创建字符串对象的方法方法一:类似变量定义的方式,创建一个字符串对象“1234”,名为s1String s="1234";方法二:创建一个空字符串对象,名为s3String s3=new String();方法三:创建一个字符串对象"1234",名为s1String s1=new String("1234");字符串方法1、打印输出字符串的长度,空格也是一个字符String str="Java zifu\t\u0056";System.out.println(str.length()

2020-11-26 10:34:03 348

原创 Java继承

方法重载1、在同一个类中2、方法名相同,参数列表不同(参数顺序、个数、类型满足其中一个不同即可)3、方法返回值和访问修饰符任意4、与方法的参数名无关方法重写1、有继承关系2、返回值类型、方法名、参数列表与父类继承的方法完全一致3、访问修饰符允许有变化(子类的访问范围必须大于等于父类的访问范围:儿子比老子强)4、与方法的参数名无关(可修改参数名)注意:方法重写适用于方法,但在父类中也可以定义与父类重名的属性继承1、子类不能选择性地继承父类,继承所有2、子类可以访问父类非私有成员3、

2020-11-26 10:33:23 188

原创 数据结构:动态数组

数据结构研究数据如何在计算机中进行组织和存储,使得我们能高效获取数据或修改数据(1)需要根据应用不同,灵活地选择最合适的数据结构,数据结构支撑不同应用:数据库----数据结构操作系统----快速在多任务间切换(使用系统栈),优先队列(堆)文件压缩----哈夫曼树通讯录----trie前缀树(2)对栈、队列等名词赋予不同操作,符合设计面向对象的设计原则,java面向对象,适用于进行数据结构底层研究(3)算法以数据结构为基石图论算法:DFS使用栈 BFS使用队列数组索引没有语意:索引只

2020-11-26 10:32:37 510

原创 LeetCode(链表:只能通过操纵节点以及节点的next指针完成,不能修改节点的值)

public class ListNode { int val; ListNode next; public ListNode(int x){ val=x; } //链表节点的构造函数,使用arr作为参数,创建一个链表,当前构造的ListNode为链表的头结点 public ListNode(int[] arr){ if(arr==null||arr.length==0){ throw new I..

2020-11-25 22:03:13 441

原创 变量和常量

变量=变量名+变量类型+变量值变量是数据临时存储,变量值存储在指定变量类型的存储空间,由变量名快速定位变量名:同标识符命名规则变量类型(数据类型):包括基本数据类型和引用数据类型引用数据类型:类、接口、数组变量值分为字面量(常量的一种)和另一个变量不区分大小写,十六进制、尾标字面量中整数的表示形式有:十进制、八进制(0)、十六进制(0x、0X),末尾省略不写默认为整型字面量,0xabcL长整型字面量浮点型字面值默认为double类型,float f=1234.678F字符型字面值:c

2020-11-25 21:08:49 220

原创 数据结构:栈和队列

栈(1)栈也是一种线性结构(2)栈对应的操作是数组的子集(3)栈本质就是一个数组,元素后进先出(4)限定数组形成栈这种数据结构栈的应用(1)通过栈顶元素确认最近的操作(2)程序调用的系统栈在程序调用过程中经常出现在一个逻辑的中间终止然后跳到另外一个逻辑,例如子函数的调用,使用系统栈记录程序的调用过程A中间调用子函数B,跳转到B,暂时中断后,中断调用信息入栈,C执行完后跳到B2,B执行完后跳到A2,A执行完系统栈为空,整个过程结束...

2020-11-19 21:13:08 399

原创 数据结构:链表(设计原则:对外部用户屏蔽底层的实现细节)

(1)链表动态数据结构:需要存储多少数据,就可以生成多少个节点(2)节点类设计,跟数组不同,数组由一个个数据组成;链表由一个个结点构成;虽然是结点,可以把它看作一种稍复杂的数据;E是真正的数据,next是指向Node的一个引用(Node类型的引用)(1)链表和数组的底层机制不一样:数组开辟连续分布的空间,可使用索引直接访问,链表的每个节点所在的内存位置是不同的,必须靠next找到元素...

2020-11-17 21:42:25 343

原创 LeetCode(哈希表)

哈希映射:把字符映射到哈希表的索引下表上(字符映射到数组索引)

2020-11-16 19:11:32 62

原创 Java数组

数组定义1、数组类型[] 数组名=new 数据类型[数组长度]等号左边为声明,等号右边为创建对象,创建对象后数组有默认值**2、数组在内存中在一片连续的内存空间中顺序存储,数组名指向数组第一个元素,创建数组对象后才分配内存空间3、数组有默认值,普通局部变量无默认值,因此需给局部变量赋值4、数组名的命名规则与变量名命名规则一致5、数组可看作一个对象**6、数组的长度a.length所有对象数组在创建时默认值均为null(0,0.0)数组的初始化int[] ar={12,23,54};声明

2020-11-16 19:11:11 161

原创 Java集合

集合:工具类,可以存储任意数量具有共同属性的对象的容器使用集合而不使用数组的场景1、无法预测存储数据的数量2、同时存储一对一关系数据3、需要进行数据的增删(动态增长)4、数据重复问题集合框架的体系结构1、集合分为Collection和Map两类,Collection存储类的对象,Map存储键值对信息2、Collection接口下有三个子接口,List与Queue中存储有序且允许重复的对象,Set中存储无序且不允许重复的对象,List的实现类包括ArrayList,ArrayList可看作长

2020-11-16 19:08:48 312

原创 Java方法

方法:用于解决一类问题的代码的有序组合,是一个功能模块**public static void main(String[] args)1、访问修饰符:方法允许的访问的权限范围返回类型,可以是任何数据类型,包括基本数据类型和引用数据类型2、参数列表=参数类型+参数实例args为字符串数组类型参数3、参数列表中为方法定义的局部变量,只在方法的大括号中有效,类似for中的循环变量定义4、参数传值可以传变量或字面值5、普通方法或主方法中的变量名可以与方法名相同,如在主方法中可定义变量main**

2020-11-16 19:08:15 152

原创 Java接口(多态)

Java只支持单继承,接口解决单继承问题解决一个类型中需要兼容多种类型特征的问题(接口继承、实现)不同类型在无法具有共同父类的前提下,仍然能具有相同的特征(用接口实现相同行为的关联)用接口实现Camera和FourthPhone的关联(方法重写,实现接口和继承类时都有方法重写)用接口描述不同类型具有相似的行为特征,从而建立关系之后,以接口引用指向实现类的方式去描述不同类型的接口行为的具体表现/** * 具有拍照能力的接口 */public interface IPhoto { pu

2020-11-16 19:07:41 140

原创 LeetCode(滑动窗口)

滑动窗口(1)start-end就是窗口需要解决的问题:(1)如何记录最长子串的长度start不动,end移动,最长不含重复字符子串长度为end-start+1(2)当end碰到重复字符时,如何判断更新start指向与当前字符重复的字符的下一个位置,保证[start,end]内没有重复字符如何判断是否碰到重复字符,可以考虑用集合的contains方法(3)如何获得与当前字符重复的字符的下一个位置使用hashmap,key为字符,value记录当前字符的下一个位置无论是否更新 start,

2020-11-16 19:07:02 161

原创 面向对象

面向对象即关注对象类1、类确定对象会拥有的属性(静态特性)和方法(动态行为)2、类是对象的类型**,对象是特定类型的数据**3、局部变量无默认值需初始化,类的成员变量有默认值对象实例化方式一:声明对象 Cat one=new Cat();实例化对象1、声明对象后不允许进行属性和方法调用,仅开辟一块内存空间2、实例化对象是在内存的堆空间里开辟了一块空间,完成了相关信息的初始化操作,每new一次就在堆中开辟一块新的空间3、对象实例化把新的堆空间存在的地址放到对象引用中,通过对象名操作具体对象信

2020-11-16 19:06:45 144 1

原创 static

static(类共享)1、无论类最终实例化多少对象,静态成员都共用同一块静态内存空间2、静态成员的生命周期:静态成员从类第一次加载时就产生一直到该类没有任何对象被使用,类销毁时,静态成员资源释放3、普通成员从对象实例产生时,相关成员产生,对象销毁时,成员进行资源释放有静态成员方法、静态成员属性、不能有静态类,不能在方法内部局部变量定义前添加static普通方法与静态方法对比1、普通成员变量2、方法调用3、静态成员变量(静态方法中不能使用this,this代表当前类实例,static代表类共

2020-11-16 19:06:22 105

空空如也

空空如也

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

TA关注的人

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