Java
点蓝红
这个作者很懒,什么都没留下…
展开
-
HashMap问题整理
hashmap扩容原理和扩容形式的演变原创 2021-10-14 16:59:51 · 318 阅读 · 0 评论 -
基数排序(Java实现)
基数排序(radix sort)属于“分配式排序”(distribution sort),又称“桶子法”(bucket sort)或bin sort,顾名思义,它是透过键值的部份资讯,将要排序的元素分配至某些“桶”中,藉以达到排序的作用,基数排序法是属于稳定性的排序,其时间复杂度为O (nlog®m),其中r为所采取的基数,而m为堆数,在某些时候,基数排序法的效率高于其它的稳定性排序法。最高位优先(Most Significant Digit first)法,简称MSD法:先按k1排序分组,同一组中.原创 2021-10-04 16:45:50 · 242 阅读 · 0 评论 -
归并排序(Java实现)
归并排序(Merge Sort)是建立在归并操作上的一种有效,稳定的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。可以看到这种结构很像一棵完全二叉树,本文的归并排序我们采用递归去实现(也可采用迭代的方式去实现)。分阶段可以理解为就是递归拆分子序列的过程,递归深度为log2n。再来看看治阶段,我们需要将两个已经有序的子序列合并成一个有原创 2021-10-04 16:24:23 · 291 阅读 · 0 评论 -
堆排序(Java实现)
堆排序是利用堆这种数据结构而设计的一种排序算法,堆排序是一种选择排序,它的最坏,最好,平均时间复杂度均为O(nlogn),它也是不稳定排序。大顶堆:arr[i] >= arr[2i+1] && arr[i] >= arr[2i+2]小顶堆:arr[i] <= arr[2i+1] && arr[i] <= arr[2i+2]思路:将无需序列构建成一个堆,根据升序降序需求选择大顶堆或小顶堆;将堆顶元素与末尾元素交换,将最大元素"沉"到数组原创 2021-10-04 16:15:56 · 221 阅读 · 0 评论 -
希尔排序(Java实现)
该方法实质上是一种分组插入方法希尔排序(Shell’s Sort)是插入排序的一种又称“缩小增量排序”(Diminishing Increment Sort),是直接插入排序算法的一种更高效的改进版本。希尔排序是非稳定排序算法。该方法因 D.L.Shell 于 1959 年提出而得名。希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至 1 时,整个文件恰被分成一组,算法便终止。希尔排序是基于插入排序的以下两点性质而提出改原创 2021-10-04 15:43:14 · 113 阅读 · 0 评论 -
直接插入算法(Java实现)
直接插入排序(Straight Insertion Sort)是一种最简单的排序方法,其基本操作是将一条记录插入到已排好的有序表中,从而得到一个新的、记录数量增1的有序表。package paixu;import java.util.Arrays;public class InsertSort { public static int[] insertSort(int[] array){ for(int i=1;i<array.length;i++)//第0位独自作为有原创 2021-10-04 15:30:49 · 470 阅读 · 0 评论 -
String、StringBuilder和StringBuffer
String、StringBuffer、StringBuilder区别一、StringString 底层:public final class String //序列化、可排序类的排序方式、描述字符串结构的接口(三个常用子类String、StringBuffer和StringBuilder) implements java.io.Serializable, Comparable<String>, CharSequence { //由final修饰的字符数组,这里就注定St原创 2021-10-04 14:12:45 · 107 阅读 · 0 评论 -
Java基础(快问快答)
Java基本类型类型自动转换是什么八大排序思想、冒泡快排代码实现接口和抽象类的区别equals和==区别(String中的equals)为什么重写equals要重写hashCode重写hashCode要注意什么,为什么什么是代理,举例说明什么是反射,举例说明面向对象的三个特征多态的好处父类静态方法能否被子类重写static关键字final关键字String、StringBuffer、StringBuilder区别构造函数特点...原创 2021-09-29 18:22:20 · 118 阅读 · 0 评论 -
Java的equals()方法和hasahCode()方法详解
Java的equals()方法和hasahCode()方法详解目录文章目录简介正文什么是equals方法什么是hashCode()方法`hashCode`的几个特性:equals()方法和hashCode方法的关联为什么重写equals()方法就要重写HashCode()方法简介Object是Java所有类的超类,equals和hashCode方法都是从Object中来的,讨论equals和hashCode方法必定绕不开Object、继承、重写正文什么是equals方法Object类中eq.原创 2021-09-28 21:08:27 · 613 阅读 · 0 评论 -
equals方法规范的5个特性
equals方法规范的5个特性:自反性:就是自己反过来跟自己比,要返回true;比如x.equals(x) == true对称性:就是x.equals(y) == true时,也要y.equals(y) == true传递性:就是x.equals(y) == true,同时y.equals(z) == true,那么x.equals(z) == true一致性:就是传说中的幂等性,即x.equals(y)调用多次,都应该返回一样的结果非空和空比较则返回false的特性:就是x.equals(y)原创 2021-09-27 23:31:48 · 373 阅读 · 0 评论 -
if(!super.equals(o)) return false;——equals重写理解误区
在仿照别人博客写equals重写方法的时候,我发现在if(!super.equals(o)) return false;这个语句上我的理解一直存在问题,所以写一篇博客记录一下。类重写euqals方法1. 判断两个引用指向的对象是否相等2. 判断传来的参数是否为当前类或者当前类的子类3. 比较各个属性值是否相等(其中包括比较父类值的属性)因为如果一个子类继承了父类,那么这个子类拥有父类所有的成员属性和方法,即使是父类里有private属性的变量,子类也是继承的,只不过父类的私有属性和方法,子类是原创 2021-09-27 22:56:48 · 719 阅读 · 0 评论 -
jdk1.7的HashMap底层原理
简介基于哈希表的 Map 接口的实现 HashMap是线程不安全的,在多线程下可能出现问题,而HashTable是线程安全的。 HashMap 的实例有两个参数影响其性能:初始容量 和加载因子。将在下文介绍。源码分析Entry类型存储//用于存储Node节点,由上图所示static class Entry<K,V> implements Map.Entry<K,V> { final K key; //键 V value; ..原创 2021-09-11 11:58:11 · 120 阅读 · 0 评论 -
实现jdk1.7的简易HashMap
我的gitee中该项目地址:https://gitee.com/dianlanhong/hash-map1.7原创 2021-09-11 11:24:16 · 105 阅读 · 0 评论 -
抽象类和接口类的区别
一、抽象类和接口类的理解接口和抽象类是Java的两个基础机制。接口是对行为的抽象,他是抽象方法的集合。接口不用被实例化,不能包含非常量成员。所有成员默认被public static final所修饰,接口中也没有非静态方法的实现,所有方法要么是抽象方法,要么是静态方法。接口实现了定义与实现分离的目的。抽象类也不能被实例化,但是形式上和一般的Java方法没有太大区别,一个抽象类中可以有一个或者多个抽象方法,也可以不含有抽象方法。抽象类是对共有方法实现或者共有的成员变量的抽取,主要用于代码重用(通过继承的方原创 2021-09-07 20:07:07 · 135 阅读 · 0 评论 -
八大排序算法整理
术语解释稳定排序:如果 a 原本在 b 的前面,且 a == b,排序之后 a 仍然在 b 的前面,则为稳定排序非稳定排序:如果 a 原本在 b 的前面,且 a == b,排序之后 a 可能不在 b 的前面,则为非稳定排序原地排序:原地排序就是指在排序过程中不申请多余的存储空间,只利用原来存储待排数据的存储空间进行比较和交换的数据排序非原地排序:需要利用额外的数组来辅助排序时间复杂度:一个算法执行所消耗的时间空间复杂度:运行完一个算法所需的内存大小选择排序插入排序冒泡排序非优化原创 2021-08-25 22:13:26 · 133 阅读 · 0 评论 -
Java 计算一段代码运行的时间
一、精确到毫秒 (ms)//获取开始时间long startTime = System.currentTimeMillis(); //测试的代码段method(); //获取结束时间long endTime = System.currentTimeMillis(); //输出程序运行时间System.out.println("程序运行时间:" + (endTime - startTime) + "ms"); 二、精确到纳秒 (ns)//获取开始时间long startTime=原创 2021-08-25 16:59:41 · 849 阅读 · 0 评论 -
死锁 基础
有一天张三来面试,面试官要张三谈谈对死锁的理解,张三却说你先给我offer我再说,面试官说你得把我的问题打上来我才能有机会给你offer啊。其实这就涉及到死锁了,张三要offer,面试官要死锁的解释,他俩谁都不松口的话,那么大概率就是面试官拿不到死锁的解释,然后挂掉张三,接着面下一个人,但是如果张三松口,提前说出了死锁的定义,那么他还是有机会看到offer的死锁:多个进行相互等待对方资源,在得到所有资源继续运行之前,都不会释放自己已有的资源,这样造成了循环等待的现象,称为死锁。一、 产生死锁的必原创 2021-08-20 17:10:23 · 93 阅读 · 0 评论