标签为 [java] 的文章

Java中equals和==的区别

平时在学Android和Java语言的时候,总是碰到“equals”和“==”这两个字符,老感觉差不多;其实还是有一些区别的,今天干脆把它们彻底弄清楚。 一、java当中的数据类型和“==”的含义: 基本数据类型(也称原始数据类型) :byte,short,char,int,long,float,double,boolean。他们之间的比较,应用双等号(==),比较的是他们的值。 引用数据类型:当他们用(==)进行比较的时候,比较的是他们在内存中的存放地址(确切的说,是堆内存地址)。 注:对于第二种类型,除非是同一个new出来的对象,他们的比较后的结果为true,否则比较后结果为 ......

算法初级——返回栈中最小元素

实现一个特殊的栈,在实现栈的基本功能的基础上,再实现返 回栈中最小元素的操作。 【要求】 1.pop、push、getMin操作的时间复杂度都是O(1)。 2.设计的栈类型可以使用现成的栈结构。 /* * 实现一个特殊的栈,在实现栈的基本功能的基础上,再实现返 回栈中最小元素的操作。 * 两种实现方式 * mystack1:如果最小栈为空,压入最小栈,再来的元素判断是否小于当前最小,如果小于当前最小栈的栈顶元素,则压入最小栈, * 每一步都压入数据栈,弹出栈时先判断数据栈是否为空,如果不为空,先弹出数据栈元素,同时记录,并与最小 ......

算法初级——对数器

对数器 对数器是用来测试代码正确性的,我们在找不到合适的oj系统测试自己的代码时,可以自己写一个对数器对代码进行测试。 对数器的概念和使用 0,有一个你想要测的方法a, 1,实现一个绝对正确但是复杂度不好的方法b, 2,实现一个随机样本产生器 3,实现比对的方法 4,把方法a和方法b比对很多次来验证方法a是否正确 5,如果有一个样本使得比对出错,打印样本分析是哪个方法出错 6,当样本数量很多时比对测试依然正确,可以确定方法a已经正确 下面使用冒泡排序的代码进行举例说明: 1234567891011121314151617181920212223242526 ......

算法初级——堆排序

堆 堆分为大根堆和小根堆,大根堆就是所有的根节点都比他的子节点都要大,小根堆同理。 我们进行堆排序的时候,其实并不是真的要用到二叉树(完全二叉树),而只是借用这个形式来理解排序的过程,可以将一个数组想象成一棵树。例如i节点的父节点就是(i-1)/2,i节点的左子节点就是i*2+1,右子节点就是i*2+2。 heapInsert:将数组的0到1位置的数变成一个大根堆,然后加入2位置的数,整体是一个大根堆,方法就是刚进来的i位置的数与他的父节点比较,如果大于父节点就交换,然后i位置变成了他的父节点的位置,然后再比较i位置与他的 ......

算法初级——荷兰国旗问题

荷兰国旗问题 给定一个数组arr,和一个数num,请把小于num的数放在数组的左边,等于num的数放在数组的中间,大于num的数放在数组的右边。 要求额外空间复杂度O(1),时间复杂度O(N) 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950import java.util.Arrays; /**  * @author sky  *给定一个数组arr,和一个数num,请把小于num的数放在数组的左边,等于num的数放在数组的中间,大于num的数放在数组的右边。  *要求额外空间复杂度O(1),时间复杂度O(N)  */ public ......

算法初级——时间复杂度

认识时间复杂度 常数时间的操作:一个操作如果和数据量没有关系,每次都是固定时间内完成的操作,叫做常数操作。 时间复杂度为一个算法流程中,常数操作数量的指标。常用O(读作big O)来表示。具体来说,在常数操作数量的表达式中,只要高阶项,不要低阶项,也不要高阶项的系数,剩下的部分如果记为f(N),那么时间复杂度为O(f(N))。 评价一个算法流程的好坏,先看时间复杂度的指标,然后再分析不同数据样本下的实际运行时间,也就是常数项时间。 一个简单的理解时间复杂度的例子 一个有序数组A,另一个无序数组B,请打印B中的所有 ......