java
奔跑的钰神
这个作者很懒,什么都没留下…
展开
-
Java 堆排序
堆排序 是一个时间复杂度为O(nlogn)的排序算法,基于它的效率比较好。同时利用了完全二叉树的概念。 算法描述如下 /** * 堆排序 基于完全二叉树 * @param arr */ public static void heapSort(int arr[]){ for(int i = arr.length/2;i>=0;i--){ arrHeap(arr,i,arr.length); }原创 2020-07-12 17:25:20 · 202 阅读 · 0 评论 -
java中new关键字和newInstance()方法的区别
1 new是一个关键字,可以说是一个指令; newInstance()是一个方法,Class对象的一个方法。 2 new主要作用是在内存中生成一个实例,而这个类可以没有提前加载到内从中; newInstance()主要作用是在内存中生成一个实例,而这个方法在使用前必须得保证:①这个类被加载到内存中,②这个类已经被连接,而完成以上两个过程的是Class.forName()方法。 3 new关键字的使用一般比较呆板的写入到程序中; newInstance()方法一般用于框架中,工厂模式中等等。 4 new关键字原创 2020-07-11 22:02:10 · 266 阅读 · 0 评论 -
java 基于数组实现循环队列
队列的实现方式可以通过链表和数组,大多数是链表,但是在使用中有不少要求使用数组的数据结构,抱着好奇的心态写了如下数据结构及其相关的方法 /** * @author zy * @date 2020/6/17 19:31 */ public class ArrayQueue { /* 长度为maxSize-1 */ private int maxSize; private int rear; private int front; private i原创 2020-06-21 11:14:33 · 226 阅读 · 0 评论 -
java实现二分查找-递归和非递归
二分查找算法思想 有序的序列,每次都是以序列的中间位置的数来与待查找的关键字进行比较,每次缩小一半的查找范围,直到匹配成功。 一个情景:将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。重复以上过程,直到找到满足条件的记录,使查找成功,或直到子表不存在为止,此时查找不成功。 二分查找的使用条件 数组必须为有序数组, 比较次数少,查询快 代码实现 非递归实现 /原创 2020-06-08 10:15:17 · 198 阅读 · 0 评论 -
java数组的排序算法Sort()方法分析
作为java语言的使用者,我们应该都知道java自动封装了Array的工具类,其中我们可能常用的Sort排序方法到底是调用了哪个排序方法呢? JDK8中Arrays.sort的底层原理,调用的是插入排序,归并排序和快速排序。简单来说就是根据数组长度的大小选择合适排序方法。 元素少于47用插入排序 元素大于等于47小于286的用快速排序 至于大于286的,它会进入归并排序(Merge Sort),但在此之前,它有个小动作(就是看数据具不具备结构) 结构简单来说也就是局部有序。 下面是测试算法 public原创 2020-06-07 10:07:54 · 971 阅读 · 0 评论 -
java 的128 陷阱(自动装箱和拆箱)
当我们在比较Java中Interger类型的数据时,有时候会发现两个明明相同的值,最后比较的结果为false,这是为什么呢?这就要了解一下我们常说的“128陷阱” 在Java中,Interger是数据类型int的封装类,Java设计者是这么认为的: 每次都要开辟新空间会占用大量的资源,因此他们规定在-128~127(因为Java设计者认为大家对数的使用大多在100以内)之间的Integer类型的变量,直接指向常量池中的缓存地址,不会new开辟出新的空间。 public class Test {原创 2020-06-01 19:19:08 · 309 阅读 · 0 评论 -
Java HashMap——Hash算法
作为Java的一个重要的数据结构HashMap,其中很多地方值得我们思考,HashMap快速根据key找到Value的秘密到底在哪里? 下面我摘取了其中的核心算法 //重新计算哈希值 static final int hash(Object key) { int h; return (key == null) ? 0 : (h = key.hashCode()) ^ (h >>> 16);//key如果是null 新hashcode是0 否则 计算新的hashcode }原创 2020-05-25 18:31:43 · 1526 阅读 · 0 评论 -
java父类和子类的调用顺序
在了解java类加载机制的时候,我们有时候会遇到一些谁先谁后的问题,我们当然不能一眼看出来,我们需要实践代码来总结结论 下面是我封装好两个类 public class People { private String name; private int age; private static String a = father(); public static String father() { System.out.println("父类静态变量")原创 2020-05-24 11:35:23 · 1543 阅读 · 0 评论 -
Java重写equals()和hashCode()方法——小白必看
以一个People类为例 public class People { String name; int age; public String getName() { return name; } public int getAge() { return age; } public void setNam...原创 2020-02-20 11:46:45 · 391 阅读 · 0 评论 -
JVM 的运行机制与java跨平台原因——小白必看!!
JVM 并没有大家想的那样复杂,对于大多数学过Java的同学来说并不陌生。Java所运行的代码 都是在这个运行Java字节码的虚拟机上运行的。 JVM运行在操作系统之上,不与硬件设备直接交互。 Java之所以能够跨平台,是因为Java的源文件再通过编译器之后被翻译成.Class文件文件(字节码文件),.Class文件又被JVM中的解释器编译成机器码在不同的操作系统上运行,即使每个系统的解释器都是不...原创 2020-02-18 11:13:07 · 218 阅读 · 0 评论 -
java的深浅拷贝 String与数组
前面我们介绍了String的其中一种命名方法,今天我们结合数组来看一下java的深拷贝与浅拷贝。 首先我们来看一下String的另一种命名方法, new 实例化对象。 String s1 = new String("123"); String s2 = new String("123"); 此时我们实例化了两个字符串对象,new方法在堆中申请内存空间,也就是说“即使都是123”,在堆中占据了...原创 2019-07-21 23:26:21 · 769 阅读 · 1 评论 -
java的值传递——小白必看
首先我们要知道在java是不同于c++的,它是没有指针的。 形式参数:是在定义函数名和函数体的时候使用的参数,目的是用来接收调用该函数时传入的参数。 实际参数:在调用有参函数时,主调函数和被调函数之间有数据传递关系。在主调函数中调用一个函数时,函数名后面括号中的参数称为“实际参数”。 值传递(pass by value)是指在调用函数时将实际参数复制一份传递到函数中,这样在函数中如果对参数进行...原创 2019-07-17 23:22:48 · 115 阅读 · 0 评论 -
java的String类型(二)浅谈JVM
在java虚拟机中大致分为了栈、堆、方法区、常量池以及本地方法区等,由于String的存储涉及一二,我们便来看一下一些简单的存储机理。 首先栈的存储特点:先进后出,用来存放顺序控制指令的基本数据类型,还有一些引用。值得我们注意的是(类里面的基本类型放在堆中,方法里面的基本类型在栈中),陆续我们都会讲到。 那么今天们要讲的String就主要存储在常量池中(现在的java认为常量池是堆的一部分)。...原创 2019-07-17 16:27:20 · 205 阅读 · 1 评论 -
java的String类型(一)
作为java的一个重要的数据类型字符串——String,它并不是一种字符数组,却有着数组的一些性质。 首先我们来看一下String的一种定义方法。 String s1 =“abc”; String s2=“bjl”; 每一个用双引号括起来的字符串都是String的一个实例。 我们来看一下String的一些常用方法: 1.subsrting():用来提取字符串。(开始下标,结束下标)左...原创 2019-07-17 16:24:53 · 176 阅读 · 0 评论 -
java基本数据类型——强力推荐
接触过计算机的人可能都知道计算机的内部只有01二进制,也就是说计算机会通过自己一种方式来将我们的文字转化为01,这些内容我们陆续会在计算机组成和操作系统进行整合学习。下面我们就来探索一下java中的基本数据类型,其中我们将涉及一些二进制码的思考。 java中有四种表示整型的数据类型,其中byte,short,int,long,分别为1、2、4、8个字节。 正如我们的正数包括正整数、0、负整...原创 2019-07-17 16:23:48 · 86 阅读 · 0 评论