![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
JAVASE
JAVA基础
苗秋秋
向大佬看齐!
展开
-
顺序表的基本操作
线性表线性表是n个具有相同特性的数据元素的有序集合.常见的线性表:顺序表,链表,栈,队列,字符串…线性表在逻辑上是连续的,但是在物理结构上不一定是连续的,线性表在物理存储时,通常用数组或者链表的形式来存储.顺序表概念及结构顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构,一般情况下用数组储存.在数组上完成数据的增删改查.. 数组具有一个重要特性:随机访问能力,可以高效的按照下标来操作2.顺序表可以分为:静态顺序表:用定长度数组来存储动态顺序表:用动态开辟的数组存原创 2020-05-12 14:42:37 · 432 阅读 · 0 评论 -
栈的压入.弹出操作
题目:思路:先遍历将pushA里的元素入栈当栈不为空,且栈顶元素与popA中元素相等时,将栈顶元素出栈,再比较popA的下一个元素和新的栈顶元素当pushA里的元素遍历结束,且辅助栈中元素为空,则代表true反之false代码: //栈的压入弹出序列 public boolean IsPopOrder(int [] pushA,int [] popA) { ...原创 2020-05-01 20:53:06 · 670 阅读 · 0 评论 -
Java数据结构——哈希表(HashTable)
概念理想的搜索方法:可以不经过任何的比较,一次直接从表中得到搜索的元素。哈希表就是一种理想的搜索方式,通过某种函数使得元素的存储位置和他的关键码之间建议一种一一对应的映射关系那么就可以很快的查找到该元素。理想的哈希表时间复杂度是O(1),因为不需要进行多次比较。哈希函数是一个复杂的函数,一般可用key%数组长度通过key的到hash的值,再根据hash的值快速判断key是否存在。哈...原创 2020-04-20 22:52:40 · 576 阅读 · 0 评论 -
二叉搜索树
概念基于TreeSet,TreeMap实现的,实际上用的是红黑树(比较平衡的树)AVL树:一个绝对平衡的(左右子树高度差不大于1)的二叉搜索树叫AVL树。定义:若他的左子树不为空,则左子树上所有节点的值都小于根节点得值若他的右子树不为空,则右子树上所有节点的值都大于根节点的值他的左右子树也分别是二叉搜索树二叉搜索树中序遍历是一个有序数组,核心用途:用来查找元素在搜索树中, 不能修...原创 2020-04-18 11:13:43 · 112 阅读 · 0 评论 -
排序问题—归并排序
特点归并排序适用于外部排序(存在磁盘上)也适用于链表排序。希尔排序,堆排序,快速排序都依赖于数组的随机访问能力,不适用于链表排序。思路核心思路:合并两个有序数组,采用分治的思想。(思路都在代码上)代码package sort;import java.util.Arrays;public class mergeSort { //归并排序 //h核心思想是合并两...原创 2020-04-14 23:27:20 · 277 阅读 · 0 评论 -
排序问题—快速排序
思路从待排序区间中找一个基准值,通常取第一个或最后一个。将比基准值小的放在基准值左边,比基准值大的放在基准值右边。采用分治思想,将以基准值为区分的,左侧已调整好的区间和右侧以调整好的区间,再次按同样的方法处理,直到数组长度为1则代表不需要调整了。代码:核心理解partition比较交换操作注意:当取最右侧为基准值时,要先从左往右遍历,再从右往左遍历。当取最左侧为基准值时,要先...原创 2020-04-14 15:56:56 · 149 阅读 · 0 评论 -
排序问题—冒泡排序
冒泡排序:每次比较无序区间相邻的两个元素,将大泡调整到数组后面,小泡调整到数组前面,持续这个过程直到数组有效。每次找最小的方式,从后往前遍历比较交换时间复杂度:O(N^2)空间复杂度:O(1)稳定性:稳定package sort;import java.util.Arrays;public class bubbleSort { public static void bub...原创 2020-04-13 00:14:09 · 141 阅读 · 0 评论 -
排序问题—堆排序
堆排序:思路:也是基于选择排序,(默认升序)创建一个大堆,将堆顶元素和堆的最后一个元素交换,再删除最后一个元素,该元素逻辑上是删除,实际是在数组的末尾,重新向下调整堆,重复上操作。注意很多的边界情况升序建大堆,降序建小堆。过程:时间复杂度:O(N*logN),比O(N^2)快空间复杂度:O(1)稳定性:不稳定package sort;import java.util.Array...原创 2020-04-13 00:10:09 · 331 阅读 · 0 评论 -
排序问题—直接选择排序
直接选择排序:思路:通过打擂台的方式,从待排序区间中,依次遍历取出元素与擂主bound位置的值相比较,若小于擂主则打擂成功,交换两者。外部循环使用bound,区分有序区间和无序区间.外部循环进行每次的打擂操作时间复杂度:O(N^2)空间复杂度:O(1)稳定性:不稳定package sort;import java.util.Arrays;public class select...原创 2020-04-12 20:45:14 · 170 阅读 · 0 评论 -
排序问题—希尔排序
希尔排序:(插入排序的优化)思路:将数组元素分为gap组,分别对这gap组进行插入排序,再返回数组,重新分组,重复操作。当gap值为1时,所有元素统一在一组中进行排序。gap的常用取值为:size/2,size/4…1;当gap>1时,都是在预排序,目的是让数组更接近有序当gap等于1时,数组已经接近有序了,最后再整体排序。双重循环:外部循环是要把所有的组都处理完毕。内部循环...原创 2020-04-11 23:38:39 · 258 阅读 · 0 评论 -
排序问题—插入排序
插入排序:思路:将整个数组划分为有序区间和无序区间。每次取无序区间的第一个元素,在有序区间里从后往前遍历找合适位置插入,并将有序区间进行搬运,保证插入后有序区间仍是有序的。用两个循环嵌套,外部循环更新bound的值,更新区间划分,内部循环用来给无序区间查找合适位置。时间复杂度:O(N^2);空间复杂度:O(1);稳定性:稳定特点:当待排序区间的元素较少时,排序效率很高。当整个数组...原创 2020-04-11 21:37:52 · 198 阅读 · 0 评论 -
堆应用—TopK问题
找前k个最大的,就要建k个大小的堆。原创 2020-04-10 19:16:19 · 129 阅读 · 0 评论 -
堆应用—优先级队列(Priority Queue)
优先级队列的实现方法有很多种,这里我们通过堆来狗构建原创 2020-04-09 19:01:24 · 155 阅读 · 0 评论 -
堆(heap)基础总结
二叉树的顺序存储1.使用数组来保存二叉树结构,就是将二叉树层序遍历放到数组中。这种方法一般指适用于完全二叉树,因为非完全二叉树会存在空间上的浪费。主要用法,就是堆的表示。2.在数组中的下标的关系已知根节点下标(parent),则:左子树下标=2*parent+1右子树下标=2+parent+2已知左右子树(child)下标,则:根节点下标=(child-1)/2堆的概念1....原创 2020-04-08 18:16:05 · 214 阅读 · 0 评论 -
给定一个二叉树,找到该树中指定两个节点的最近公共祖先
最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”说明所有节点的值都是唯一的。p、q 为不同节点且均存在于给定的二叉树中。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/lowest-common-anc...原创 2020-04-08 10:54:19 · 980 阅读 · 0 评论 -
二叉树的层序遍历(用list)
题目描述:给你一个二叉树,请你返回其按 层序遍历 得到的节点值。 (即逐层地,从左到右访问所有节点)。示例:二叉树:[3,9,20,null,null,15,7],3/ 9 20/ 15 7返回其层次遍历结果:[[3],[9,20],[15,7]]链接:https://leetcode-cn.com/problems/binary-tree-level-ord...原创 2020-04-06 18:43:44 · 382 阅读 · 0 评论 -
二叉树的构建及遍历练习
题目描述:编一个程序,读入用户输入的一串先序遍历字符串,根据此字符串建立一个二叉树(以指针方式存储)。 例如如下的先序遍历字符串: ABC##DE#G##F### 其中“#”表示的是空格,空格字符代表空树。建立起此二叉树以后,再对二叉树进行中序遍历,输出遍历结果。(记得输出不匹配的话也过不去)输出将输入字符串建立二叉树后中序遍历的序列,每个字符后面都有一个空格。每个输出结果占一行。思路及代码...原创 2020-04-06 11:37:13 · 440 阅读 · 0 评论 -
判断二叉树是否为完全二叉树
判断二叉树是否为完全二叉树完全二叉树看起来就像是满二叉树右下角缺了一口。思路:需要引入一个标志位来区分两个阶段1.先对该树进行层序遍历,会出现两种阶段a):任何一个节点都有两颗子树当遇到一个结点没有子树或者只有左子树时,那么就进入第二阶段。当遇到一个节点只有右子树时,那么这棵树一定不是完全二叉树。b):任何一个节点,都没有子树2.当我们层序遍历结束后,整棵树满足上述条件,那么这...原创 2020-04-05 21:05:29 · 968 阅读 · 0 评论 -
二叉树的层序遍历练习
二叉树操作补充层序遍历原创 2020-04-05 16:08:13 · 92 阅读 · 0 评论 -
二叉树基础面试题练习
二叉树基础面试题练习:二叉树的前序遍历。二叉树中序遍历 。二叉树的后序遍历 。检查两颗树是否相同。另一颗树的子树。二叉树最大深度。判断一颗二叉树是否是平衡二叉树。对称二叉树。深刻体会神奇的递归思想!!!原创 2020-04-04 14:08:15 · 151 阅读 · 1 评论 -
二叉树基础代码练习
1.二叉树基本概念一棵二叉树是结点的一个有限集合,该集合为空,或者是由一个根节点加上两颗称为左子树和右子树的二叉树组成的。特点:每个节点最多有两颗子树,就是二叉树节点的度不超过2;二叉树有左右子树之分,子树次序不能颠倒;2.两种特殊的二叉树:(有一道面试题:判断是否为完全二叉树)...原创 2020-04-02 11:27:24 · 310 阅读 · 0 评论 -
树型结构基础(了解)
树是一种非线性结构,由n(n>=0)个有限节点组成的具有层次关系的集合。特点:每个节点有零个或多个子结点;没有父节点的节点成为根结点;每一个非根结点有且只有一个父结点;除了根结点以外,每个子结点可以分为多个不想交的子树。概念(重要)节点的度: 一个结点含有子树的个数;A的为6树的度:一棵树中,最大节点的度;树的度为6叶子节点或终端节点:度为0的节点成为叶子结点;B,...原创 2020-04-01 12:08:20 · 401 阅读 · 0 评论 -
基于List的代码练习——发扑克牌
基于List的代码练习——发扑克牌思路:(发牌部分有疑惑,再瞅瞅)import java.util.ArrayList;import java.util.List;import java.util.Random;class Card{//card类用于定义扑克牌类型 public int rank;//牌面值 public String suit;//花色 ...原创 2020-03-31 00:56:58 · 154 阅读 · 0 评论 -
List集合基础
List常用方法:代码练习:import java.util.ArrayList;import java.util.LinkedList;import java.util.List;public class ListDemo { public static void main(String[] args) { List <String> cour...原创 2020-03-30 00:13:01 · 180 阅读 · 0 评论 -
包装类Wrapper Class基础总结
Map<String,String> map=new HashMap<>();//注意其声明格式 System.out.println(map.size());//获取map键值对个数 System.out.println(map.isEmpty());//判断map是否为空 System.out.println(map.g...原创 2020-03-29 19:09:23 · 630 阅读 · 0 评论 -
泛型Generic基础总结
一:泛型的使用背景:为了能够写一个类或者方法就能支持多种不同类型的对象。是对object的简单包装。泛型机制的引入是为了:增加编译期间的类型检查取消类型转换的使用二:泛型的使用尖括号<>是泛型的标志E是一个泛型参数,需要再真正对该类实例化时,确定实参,一般要大写,常用的泛型参数名字有:E,T,KEY,VALUA…E在定义时是形参,当前array的...原创 2020-03-27 22:53:58 · 118 阅读 · 0 评论 -
集合框架container基础总结
一 :什么是集合类?java.util包中包含一些集合类,也被称为容器container。集合类和数组的不同:集合类的长度是可变的,数组长度是不可变的;数组用来存放基本数据类型,集合用来存放对象的引用。二:集合框架存在的意义?可以直接将多个元素element置于一个单元中,用于对这些元素进行快速便捷的存储store,检索retrieve,管理manipulate,即常说的增删改查。使用...原创 2020-03-26 23:43:41 · 290 阅读 · 0 评论 -
map常用方法练习
Map:键值对key-Value-Pair,背后隐含着查找/搜索的含义常用方法练习:原创 2020-03-26 00:03:29 · 165 阅读 · 0 评论 -
异常基础
异常基础一:异常是一种程序运行时出现错误的通知调用者的一种机制。在程序出现错误时,要及时通知程序媛,主要有两种方式1.LBYL:在操作之前做充分的检查2.EAFP(异常的核心思想):先操作,遇到问题再处理二:基本语法try{有可能出现异常的语句}[catch (异常类型 异常对象){}…][finally{异常的出口}]1.t...原创 2020-03-24 22:56:15 · 107 阅读 · 0 评论 -
抽象类和接口
抽象类:在解决实际问题中,父类一般定义为抽象类,需要这个父类进行继承和多态的处理。存在意义就是被继承,是一种校验机制,预防出错。抽象类用abstract关键字定义。抽象类不能直接进行实例化,无法new对象。抽象类被继承后,需要实现其中的所有抽象方法。抽象类中可以包含非抽象方法和字段,这个非抽象方法和普通方法是一样的,可以被重写或被子类直接调用抽象方法:用abstract关键字定义...原创 2020-03-13 22:18:12 · 99 阅读 · 0 评论