java
DreamGodJava
一个java初学者
展开
-
Java学习之基本数据类型
基本数据类型简介java基本数据类型及其所占字节数:byte : 1个字节char : 2个字节short: 2个字节int : 4个字节long : 8个字节float : 4个字节double: 8个字节boolean: true/false基本类型后缀:long : l 或 Lfloat : f 或 Fdouble:...原创 2019-03-26 12:21:26 · 77 阅读 · 0 评论 -
Java异常
Java异常概念异常就是在程序的运行过程中所发生的意外,他中断指令的正常运行。java中,通过五个关键字try,catch,finally,throw和throws进行异常管理Java异常处理机制java.langObjectThrowableErrorExceptionError: 错误 Error 类指的是系统错误或运行环境出现的错误,这些错误一般是很严重的错误,即使捕捉到也...原创 2019-05-03 20:38:26 · 76 阅读 · 0 评论 -
java类的加载机制
类的加载机制java虚拟机一般使用java类的流程:首先将开发者编写的java源代码编译成字节码文件,然后类加载器会读取字节码文件,并转换成java.lang.Class对象,java虚拟机利用反射方式创建真正的对象。类加载器多继承于ClassLoaderlei类。类加载器BootstarpClassLoader启动类加载器, 加载JAVA_HOME/jre/lib的jar包EXTens...原创 2019-05-03 20:44:32 · 110 阅读 · 0 评论 -
java抽象类和接口
抽象类和抽象方法在java中,对象是由类进行描绘的,但是并不是所有的类都可以new对象,如果一个类不能实例化对象,我们把这种类称为抽象类。抽象方法是抽象类中的一个特别的成员方法,抽象方法特点是没有方法体;抽象类和抽象方法都要用abstract修饰abstract class Animal{ //抽象类 public abstract void run(); / /抽象方法没有方法体...原创 2019-05-03 21:13:01 · 119 阅读 · 0 评论 -
java类和对象(三)
类的初始化方式class People{ String name; public People(){ //默认构造方法 name = null; } }构造方法普通方法静态块实例块通过引用变量原创 2019-04-28 18:33:17 · 108 阅读 · 0 评论 -
ArrayList源码分析(jdk1.7)
ArrayListArrayList是数组实现的线性表,容量不够时会进行扩容。public class ArrayList<E> extends AbstractList<E> implements List<E>, RandomAccess, Cloneable, java.io.Serializable首先 它继承了AbstractL...原创 2019-07-09 10:38:49 · 394 阅读 · 0 评论 -
LinkedList源码分析(jdk1.7)
LinkedListLinkedList是双向链表实现的线性表。public class LinkedList<E> extends AbstractSequentialList<E> implements List<E>, Deque<E>, Cloneable, java.io.Serializable首先,它继承了Abs...原创 2019-07-09 13:45:58 · 172 阅读 · 0 评论 -
LinkedList和ArrayList比较
LinkedList和ArrayList区别底层数据结构不同,ArrayList底层数据结构是数组,LinkedList底层数据结构是双向链表(1.7之后是双向链表,1.7之前是双向循环链表)ArrayList实现了RandomAccess接口,可以实现随机访问,而LinkedList不行LinkedList底层是双向链表,所以不需要扩容,而ArrayList底层是数组,刚开始是空数组,第...原创 2019-07-09 13:58:11 · 381 阅读 · 0 评论 -
HashMap源码分析
HashMap实现原理HashMap的底层数据结构是数组+链表的形式。数组是HashMap的主体,链表则主要是为了解决哈希冲突而存在的,如果定位到数组位置不含链表(当前entry的next指向null),那么对于查找,添加等操作很快,一步到位时间复杂度O(1)。如果有链表的话,对于添加,时间复杂度仍然为O(1)。但是查找操作,就需要遍历链表,然后通过key对象的equals 一一对比。哈希...原创 2019-07-09 18:02:28 · 107 阅读 · 0 评论 -
HashTable和HashMap对比
HashTable和HashMap区别:遍历方式比HashMap多一种HashTable父类 Dictionary HashMap 父类 abstractMap和Maphashtable初始化大小是11,而hashmap初始化大小是16,数组的初始化时机不同,hashtable是构造函数,hashmap是第一个元素放入。hashtable没有进行扰动处理扩容的方式 hashtable...原创 2019-07-09 18:05:24 · 227 阅读 · 0 评论 -
排序算法之选择排序(二)
选择排序:将数组分为两个区域,排好序的和未排序的区域,每一趟下来在未排序的区域中找到最小的放在最前面(也可以将最大的放在最后面),持续进行n趟之后,数组有序。例如:原数组 3,1,4,2,5第一趟 1,3,4,2,5第二趟 1,2,4,3,5第三趟 1,2,3,4,5此时排序就已经完成了。代码实现使用双重for循坏即可时间复杂度 O(n^...原创 2019-08-04 11:52:12 · 132 阅读 · 0 评论 -
排序算法之插入排序(三)
插入排序:把n个待排序的元素看成为一个有序表和一个无序表。开始时有序表中只包含1个元素,无序表中包含有n-1个元素,排序过程中每次从无序表中取出第一个元素,将它插入到有序表中的适当位置,使之成为新的有序表,重复n-1次可完成排序过程。例如;给定一个数组 3,1,4,2,5第一趟 3,1,4,2,5第二趟 1,3,4,2,5...原创 2019-08-05 11:30:02 · 133 阅读 · 0 评论 -
排序算法之希尔排序(四)
希尔排序:希尔排序是插入排序的优化算法,算法思想:通过将全部元素分为几个区域来提升插入排序的性能。先将步长设为数组的一半,将分好的区域进行插入排序,之后步长gap每次等于他的一半,即gap /= 2。当步长为1时,就是普通的插入排序,但是到了这步,需排序的数据几乎是已排好的了,插入速度快。例如:数组 2,5,7,3,4,9,6,8,1,10第一次gap=5 此时的分组如下,进行插入排序...原创 2019-08-05 23:15:56 · 133 阅读 · 0 评论 -
排序算法之快速排序(五)
快速排序:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行。例如:4,3,1,2,6,5,1.刚开始定义两个变量i和j指向数组的首尾,首先将i号下标元素值拿出来当作标记位。从j开始由后向前找到第一个比标记位4小的值放到i好下标位置即图2,然后i向后移动找到第一个比标记位4...原创 2019-08-06 09:29:50 · 290 阅读 · 0 评论 -
java面向对象三大特性
java面向对象三大特性封装将类的一些属性和方法隐藏在类内部,不允许外部程序直接访问,只能通过该类提供的方法来实现对隐藏信息的操作和访问。访问修饰符访问修饰符本类同包子类其他private√默认√√protected√√√public√√√√this关键字class Dog(){ int age; pu...原创 2019-05-03 20:29:40 · 78 阅读 · 0 评论 -
leetcode-26 删除排序数组中的重复项 java实现
题目:给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。思路:因为不要使用额外的数组空间,你必须在原地修改输入数组,所以将不重复的值放入原来的数组,首先0号元素先放入,然后循环只要相邻的两个不相等,将后者放入数组。这里参数是引用,所以修改之后数组...原创 2019-04-23 21:00:29 · 93 阅读 · 0 评论 -
转圈打印矩阵
输入一个矩阵,按照从外向里以顺时针的顺序一次打印出每一个数字。例如:输入如下矩阵:1 2 3 45 6 7 89 10 11 1213 14 15 16输出结果:1, 2 ,3 ,4 ,8 ,12 ,16 ,15 ,14 ,13 ,9 ,5 ,6 ,7 ,11 ,10这个题的解法很简单,就是矩阵分圈处理,每次都要打印最外层的一圈,最外圈左上角坐标(0,...原创 2019-04-12 15:28:02 · 154 阅读 · 0 评论 -
java学习之数组(一)
数组的定义:如果我们要定义一个int类型的变量,那么好,int a。但是我们要定义成百上千的变量,我们还能这样做吗?显然这样做,太麻烦,那么有没有什么好的方法呢。答案是有的,就是使用数组。比如我们要定义100个int型,那么我们可以这样int[] arr = new int[100];使用数组元素直接通过下标就可以。比如arr[i]代表数组arr里面的第(i-1)个元素,为什么不是第i个呢。这...原创 2019-04-01 22:26:23 · 198 阅读 · 0 评论 -
java学习之数组(二)
数组的在内存中的分布数组深拷贝和浅拷贝内存区别数组的拷贝方式分为浅拷贝和深拷贝,区别为是否有共享内存,深拷贝:内存分离浅拷贝:内存共享浅拷贝内存:两个声明指向同一块内存深拷贝内存:两个声明指向的不是同一块内存...原创 2019-04-01 23:06:30 · 114 阅读 · 0 评论 -
java学习之== 和 equals区别
运算符 == 和 equals()的区别在基本数据类型中 运算符 == 比较的是两个变量的值,equals()方法不能比较基本数据类型,引用类型的比较,运算符 == 比较的是两个变量的地址,equals()方法比较的也是地址。在Object类中equals的原码也是用的==。在某些特殊的类中,比如经常使用的String和一些包装类(Integer,Character等),在源码中重写...原创 2019-04-02 20:10:59 · 321 阅读 · 1 评论 -
斐波那契数列递归解法
Fibonacci数列1 1 2 3 5 8 13 21 34 当前数是前两项数之和主要代码如下private static int Fibonacci(int n) { if (n == 0){ return 0; } if (n == 1){ return 1; } ...原创 2019-04-16 10:48:16 · 251 阅读 · 0 评论 -
Java用栈简单实现迷宫
迷宫用0表示可以走,1表示不可以走,从左上角走到右下角,能否找到一条路,如果找到,那么打印出来路径,用2表示走过的路径如果找不到,那么图中尝试过的点置为 -1.程序运行如下输出如下我的主要思路,首先用一个Maze类来表示迷宫上面的点,类中包含点的横纵坐标和点的值,用栈保存迷宫路径。从入口到出口,依次按照右 下 左 上判断四周是否是通路,如果是,将判断的点入栈,并将值置为...原创 2019-04-16 11:39:15 · 3480 阅读 · 3 评论 -
java用栈实现Puzzle
题目:初始正方形中的带圆圈的数字是可以移动到沿着行的其他正方形的标记。在拼图的每个步骤,可以移动标记的正方形中由当前占据的整数指示的方格数。标记可以沿着该行向左或向右移动,但可以不移动经过任一端。例如,唯一合法的第一步是将标记向右移动三个方格,因为没有空间向左移动三个空格。拼图的目标是将标记移动到行的远端的0。要求如果圆圈能够移动到最后0的位置,返回true,否则返回false。...原创 2019-04-20 20:22:54 · 350 阅读 · 0 评论 -
leetcode-9 回文数 java实现
题目:判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数示例:输入 121输出 true输入-121输出false;解法一:将x转为String类型,然后用char[] 来实现代码如下class Solution { public boolean isPalindrome(int x) { String s...原创 2019-04-23 10:42:30 · 323 阅读 · 0 评论 -
java类和对象(一)
面向对象和面向过程的区别面向过程是在解决问题时,将事务拆分成一个个的方法,然后按照一定的顺序去执行这些方法来解决这个问题。面向对象就是在解决问题时,将事务抽象成对象的概念,然后给对象生成一些属性和方法,以此来解决这个问题。举个例子,比如你要吃饭,首先得做饭。按照面向过程的思想,首先你得买菜,洗菜,切菜,做饭,之后才可以吃饭 。但是按照面向对象的思想,你只需要new一个对象,让对象去做...原创 2019-04-28 09:08:48 · 83 阅读 · 0 评论 -
Java类和对象(二)
类和对象类是一种实体类型的抽象,它是一个新的数据类型。对象是类的具体实体,也就是类的实例。创建一个对象也叫做类的实例化。类和对象的创建创建类需要用到关键字 classclass A{ int i; //属性或者叫字段 public void run(){ //方法或者叫行为 }}对象创建需要用到关键字 newA a = new A();n...原创 2019-04-28 11:46:23 · 193 阅读 · 0 评论 -
leetcode-7 整数反转 java实现
题目:给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。注意:假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为[−231, 231− 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。思路:将该数转换为char数组,判断该整数是否是负数,如果是那么需要反转的就是1~length-1,不是负数就需要反转0~length-1;,每次进行...原创 2019-04-23 19:12:21 · 238 阅读 · 0 评论 -
leetcode-8 字符串转换整数 (atoi)
题目:请你来实现一个atoi函数,使其能将字符串转换成整数。首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止。当我们寻找到的第一个非空字符为正或者负号时,则将该符号与之后面尽可能多的连续数字组合起来,作为该整数的正负号;假如第一个非空字符是数字,则直接将其与之后连续的数字字符组合起来,形成整数。该字符串除了有效的整数部分之后也可能会存在多余的字符,...原创 2019-04-23 19:25:33 · 95 阅读 · 0 评论 -
leetcode-11 盛最多水的容器 java实现
题目:给定 n 个非负整数 a1,a2,...,an,每个数代表坐标中的一个点(i,ai) 。在坐标内画 n 条垂直线,垂直线 i的两个端点分别为(i,ai) 和 (i, 0)。找出其中的两条线,使得它们与x轴共同构成的容器可以容纳最多的水。说明:你不能倾斜容器,且n的值至少为 2。图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。在此情况下,容器...原创 2019-04-23 20:12:51 · 467 阅读 · 0 评论 -
排序算法之归并排序(六)
归并排序:建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。例:2,5,7,3,4,9,6,8,1,101.先将数组中的元素分组,{2,5,7,3,4},{9,6,8,1,10},2.继续分...原创 2019-08-19 16:29:55 · 281 阅读 · 0 评论