java
文章平均质量分 61
michellechouu
这个作者很懒,什么都没留下…
展开
-
【Java】Java中多态的实现
http://www.runoob.com/java/java-polymorphism.html多态是同一个行为具有多个不同表现形式或形态的能力。多态性是对象多种表现形式的体现。比如我们说"宠物"这个对象,它就有很多不同的表达或实现,比如有小猫、小狗、蜥蜴等等。那么我到宠物店说"请给我一只宠物",服务员给我小猫、小狗或者蜥蜴都可以,我们就说"宠物"这个对象就具备多态性转载 2015-09-17 22:23:51 · 452 阅读 · 0 评论 -
【Java】有个排序后的字符串数组,其中散布着一些空字符串,编写一个方法,找出给定字符串的位置
有个排序后的字符串数组,其中散布着一些空字符串,编写一个方法,找出给定字符串的位置如果没有空字符串,可以直接用二分查找法,但是有空字符串是不是就不行了呢?我们可以对二分查找法做一些改进,如果mid对应的是空字符串,就把mid移到离它最近的非空字符串的index。public class searchR { public int searchRE(String[] strings, S原创 2015-07-22 14:18:42 · 1449 阅读 · 0 评论 -
【Java】找出数组中的某个元素,数组原本有序,但已被旋转多次
给定一个排序后的数组,包含n个整数,但这个数组已被旋转多次,次数不详。编写代码找出数组中的某个元素。假定数组元素原先是按从小到大的顺序排列的。还是考虑二分查找考虑下面的两个数组:array1 = [10, 15, 20, 0 ,5]array2 = [50, 5, 20, 30, 40]这两个数组的中间元素都是20,但5在其中一个的左边,在另一个的右边,可见,只比较中间元素原创 2015-07-22 13:54:16 · 542 阅读 · 0 评论 -
【Java】两个排序后的数组A和B,其中A的末端有足够的缓冲容纳B。编写一个方法,将B合并入A并排序。
给定两个排序后的数组A和B,其中A的末端有足够的缓冲容纳B。编写一个方法,将B合并入A并排序。看起来很像归并排序的最后一步,但还有些不同,由于A的末端足够容纳B,我们不需要再新建一个缓冲数组。那么直接将A和B顺序比较插入相应位置即可,但如果从小到大比较,A的数据会被覆盖,由于A的末端是空的,我们可以从A和B最大的元素开始比较,从后往前依次插入.要注意的是如果B的元素比A多,那么要逐一比原创 2015-07-22 10:36:08 · 1823 阅读 · 0 评论 -
【Java】二分查找
public class binarySearch { int binarysearch(int[] a, int x) { int low = 0; int high = a.length - 1; int mid; while(low <= high) { mid = (low + high) / 2; if(a[mid] < x) { low =原创 2015-07-21 17:14:46 · 274 阅读 · 0 评论 -
【Java】归并排序
归并排序(英语:Merge sort,或mergesort),是创建在归并操作上的一种有效的排序算法,效率为O(n log n)。1945年由约翰·冯·诺伊曼首次提出。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用,且各层分治递归可以同时进行。归并操作的过程如下:申请空间,使其大小为两个已经排序序列之和,该空间用来存放合并后的序列原创 2015-07-21 16:30:57 · 345 阅读 · 0 评论 -
【Java】快速排序
快速排序是随机挑选一个元素,对数组进行分割,将所有比它小的元素排在前面,比它大的元素排在后面,这里分割经由一系列元素交换的动作完成。快速排序的时间复杂度:最好的情况下O(n(log2n)), 最坏的情况下O(n2)空间复杂度 O(1)public class quickSort { void quicksort(int arr[], int left, int right) {原创 2015-07-21 17:00:43 · 338 阅读 · 0 评论 -
【Java】如何设计facebook或linkedin的超大型社交网站?
如何设计facebook或linkedin的超大型社交网站?请设计一种算法,展示两个人之间的连接关系或社交路径,比如:我-> Bod -> Susan -> Jason -> you简化问题,先忘记几百万用户,针对简单情况设计算法。把每个人看成一个结点,如果两个结点之间有连线,则表示这两个人互为朋友class Person {Person[] friends;}直接从一个人原创 2015-07-21 10:01:35 · 851 阅读 · 0 评论 -
【Java】只允许使用加号,实现整数的减法,乘法,除法
2 - 1,可以看做2 + (-1),那么两数a和b相减,就是a加上取反后的b(也就是改变符号位)继续,两数a和b相乘就是b个a连加那么两数相除呢?这似乎有点难,如果a/b = c, 那么a是c个b连加的结果,可将b连加直到小于等于a,连加的次数即为商public class arithmetic { public static int negate(int b) { int原创 2015-07-16 14:08:11 · 2299 阅读 · 0 评论 -
【Java】单例模式
如果我们希望一个类只有一个实例,就要用到单例模式。简单实现public class SingletonClass { private static SingletonClass instance = null; public static SingletonClass getInstance() { if (instance == null) { instance = n原创 2015-07-16 14:42:02 · 355 阅读 · 0 评论 -
【Java】位运算
数组A包含了0到n的所有整数,但其中缺了一个。在这个问题中,只用一次操作无法取得数组A里某个整数的完整内容。此外,数组A的元素皆以二进制表示,唯一可用的访问操作是“从A[i]取出第j位数据”,该操作时间复杂度为常数。请编写代码找出那个缺失的整数。你有办法在O(n)时间内完成吗?找出0到n之间缺失的整数,可以将数字求和在于0到n的数字之和做减法,差值就是缺失的数字那么怎么求出每个数字呢?原创 2015-07-15 10:49:58 · 439 阅读 · 0 评论 -
【Java】找出0到n之间的所有素数
方法是剔除所有可以被素数整除的非素数第一是找出每个素数第二是找出每个素数的倍数public class findPrime { public boolean[] findPrimes( int max ) { boolean[] flags = new boolean[max + 1]; for (int i = 2; i < max+1; i++) { flags[i原创 2015-07-16 11:05:01 · 2139 阅读 · 0 评论 -
【Java】给定直角坐标系上的两条直线,确定这两条直线会不会相交
这个问题很简单,但要注意以下几点:1. 多提问,说明自己的假设条件2. 尽量设计并使用数据结构,注重面向对象设计3. 仔细考虑怎么设计数据结构来表示一条线,选择都各有优劣,须权衡取舍4. 不要假设斜率和y轴截距是整数5. 了解浮点表示法的限制,切记不要用==检查两个浮点数是否相等,而应该检查两者差值是否小于某个极小值public class LineIner { publ原创 2015-07-16 12:26:12 · 1982 阅读 · 0 评论 -
【Java】位运算的其他问题
1. 给定一个正整数,找出与其二进制表示中1的个数相同,且大小最接近的那两个数(一个略大,一个略小)2. 解释代码 n & ( n - 1) == 0是什么意思? 说明n是2的次幂3. 编写函数,确定需要改变几个位,才能将整数A转成整数Bpublic class bitSwap { public static int bitSwapReq(int a, int b) { int原创 2015-07-14 22:51:50 · 473 阅读 · 0 评论 -
【Java】不使用中间变量,如何交换两个数?
a = 9, b = 4方法一:a = a - b //5b = b + a //5+4 = 9a = b - a //4交换成功方法二:利用位运算a = a ^ bb = a ^ b //aa = a ^ b //b原创 2015-07-28 16:15:17 · 509 阅读 · 0 评论 -
【Java】假设你正在读取一串整数,每隔一段时间,你希望找出数字X的秩(小于或等于x的值的数目)。
假设你正在读取一串整数,每隔一段时间,你希望找出数字X的秩(小于或等于x的值的数目)。请事先数据结构和算法支持这些操作。也就是说,实现track(int x)方法,每读入一个数字都会调用该方法,以及getRankOfNumber(int x),返回元素值小于等于x的元素个数(不包括x本身)用一个数组存放好所有已排序的元素,getRankOfNumber(int x)实现很简单,执行二分查原创 2015-07-22 16:37:36 · 593 阅读 · 0 评论 -
【Java】编写一个方法,对字符串数组进行排序,将所有变位词排在相邻的位置
编写一个方法,对字符串数组进行排序,将所有变位词排在相邻的位置只要求将变位词排在一起,没有要求这些词按照什么顺序排在一起。怎么检查两个词是不是变位词呢?统计每个字符串中各个字符出现的次数,如果两者都相同则返回true。或者,直接将字符串进行排序,如果两个字符串排序后相同,则一定是变位词。import java.util.Arrays;import java.util.Comparat原创 2015-07-22 10:46:45 · 2813 阅读 · 1 评论 -
【Java】Java线程的概念
http://www.weixueyuan.net/view/6024.html和其他多数计算机语言不同,Java内置支持多线程编程(multithreaded programming)。多线程程序包含两条或两条以上并发运行的部分。程序中每个这样的部分都叫一个线程(thread),每个线程都有独立的执行路径。因此,多线程是多任务处理的一种特殊形式。你一定知道多任务处理,因为转载 2015-09-26 14:53:30 · 338 阅读 · 0 评论 -
【Java】java作用域public ,private ,protected 及不写时的区别
http://yangmingjiayou.iteye.com/blog/151865 这是我在别的地方看到的一篇文章,以前有看到过相似文章,觉得这里的一个比喻比较好就转载过来了。链接地址忘记了,有知道的告诉我,我添加上去。谢谢! java作用域public ,private ,protected 及不写时的区别 在说明这四个关键字之前,我想就class之间的关系做一个简转载 2015-09-26 13:25:24 · 369 阅读 · 0 评论 -
【Java】值得注意的一些语法点2
1. Which lines of the following will produce an error?12341. bytea1 = 2, a2 = 4, a3;2. shorts = 16;3. a2 = s;4. a3 = a1 * a2;原创 2015-09-25 23:23:18 · 508 阅读 · 0 评论 -
【Java】面向对象的原则
https://zh.wikipedia.org/wiki/SOLID_(%E9%9D%A2%E5%90%91%E5%AF%B9%E8%B1%A1%E8%AE%BE%E8%AE%A1)首字母指代概念S单一功能原则单一功能原则认为对象应该仅具有一种单一功能的概念。O开闭原则开闭原则认为“软件体转载 2015-09-26 15:01:44 · 311 阅读 · 0 评论 -
[Java]值得注意的一些语法点
1. Java类的运行顺序,new一个对象之后,要调用类的构造方法初始化这个类,然后要初始化它的属性,再回来继续调用构造方法。2. 构造方法不能被继承,一个类能得到构造方法,只能有两种办法:编写构造方法,或者没有构造方法,调用默认构造方法。3. super 可以调用父类中声明为private的变量。super()和this()都必须放在构造方法的第一行。super与this的区别:this原创 2015-09-25 17:26:01 · 496 阅读 · 0 评论 -
【Java】interface
接口由抽象类演化而来。抽象类中,可以包含一个或多个抽象方法。甚至没有抽象方法时也可以将这个类声明成抽象类以防止其实例化。但在接口中,所有方法都必须是抽象的,不能包含方法体。可以说,接口比抽象类更抽象。用interface关键字声明。和类一样,接口之间可以继承,而且接口还可以多继承。1. 接口不能被实例化。不允许使用new关键字来构建接口的实例,接口都没有构造方法。原创 2015-09-26 14:13:18 · 441 阅读 · 2 评论 -
【Java】抽象类
继承是自上而下的,上层的类更具有通用性,甚至可能只给出方法不给出实现,由子类自己负责去实现。表现在语法上就是方法不含有{}。这样的方法就是抽象方法,用关键字abstract声明。而包含一个或多个抽象方法的类就是抽象类,也必须用abstract声明。一个类即使不包含抽象方法,也可以声明成abstract,以防止被实例化。import static java.lang.System.*;原创 2015-09-26 12:34:02 · 374 阅读 · 0 评论 -
【Java】hashMap和hashTable的区别
HashMap Hashtable都实现了Map接口HashMap是非synchronized的, Hashtable是synchronized的HashMap使用Iterator, Hashtable使用EnumerationHashtable直接使用对象的hashcode,hashmap重新计算hash值,而且用与代替求模。线程安全的map在JDK 1.5及其更高版本环原创 2015-09-26 15:25:01 · 351 阅读 · 0 评论 -
【Java】接口和抽象类的区别
http://www.weixueyuan.net/view/6011.html类是对象的模板,抽象类和接口可以看做是具体的类的模板。由于从某种角度讲,接口是一种特殊的抽象类,它们的渊源颇深,有很大的相似之处,所以在选择使用谁的问题上很容易迷糊。我们首先分析它们具有的相同点。都代表类树形结构的抽象层。在使用引用变量时,尽量使用类结构的抽象层,使方法的定义和实现分离,这样做对转载 2015-09-26 14:17:05 · 414 阅读 · 0 评论 -
【Java】编写一个方法,将字符串中的空格全部替换为“ ”
编写一个方法,将字符串中的空格全部替换为“%20”,假定该字符串尾部有足够的空间存放新增字符,并且知道字符串的真实长度。因为java里字符串是不可变的,所以如果用java,用字符数组而不是字符串public class replaceSpaces { public void spacesReplace(char[] str, int length) { int spaceCount原创 2015-07-07 15:21:51 · 4479 阅读 · 0 评论 -
【C++, Java】C++模板和Java泛型之间有何不同?
许多人都认为模板template和泛型generic这两个概念是等价的,因为两者都允许我们按照List的样式编写代码。不过,各种语言是怎么实现该功能,以及为什么这么做,却千差万别。Java的泛型的实现根植于“类型消除”这一概念。当源代码被转换成Java虚拟机字节码时,这种技术会消除参数化类型。例如,假设有一下java 代码: Vector vector = new Vector()原创 2015-07-24 18:02:33 · 6803 阅读 · 0 评论 -
【Java】集合框架
Java的集合框架collection framework非常有用ArrayList: ArrayList是一种可动态调整大小的数组,随着元素的插入,数组会随时扩容。Vector: Vector与ArrayList非常类似,只不过前者是同步的(synchronized),两者语法也相差无几。LinkedList: Java内建的LinkedList类,使用时会引出一些迭代器的语法。原创 2015-07-24 17:06:09 · 330 阅读 · 0 评论 -
【Java】final, finally, finalize()
final关键字java的final关键字用于变量,类或方法时,含义各不相同变量: 一旦初始化,变量值就不能修改方法:该方法不能被子类重写类: 该类不能派生子类关键字finally关键字finally和try/catch语句块配对使用,即使有异常跑出,也能确保某段代码一定会执行。finally语句块在try和catch之后,在控制权交回之前执行public原创 2015-07-24 15:38:44 · 317 阅读 · 0 评论 -
【Java】将构造函数声明为私有有什么作用?
将构造函数声明为私有,可以确保本类以外的地方都不能实例化这个类,单例模式就是这么干的。在这种情况下,要创建这个类的实例,唯一的办法是提供一个公共静态方法,就像工厂方法模式那样。此外,由于构造函数是私有的,因此这个类也不能被继承。原创 2015-07-24 17:13:50 · 1456 阅读 · 0 评论 -
【Java】给定有向图,设计一个算法,找出两个结点之间是否存在一条路径
给定有向图,设计一个算法,找出两个结点之间是否存在一条路径通过图的遍历,比如深度优先或者广度优先搜索等,就能解决这个问题从结点的其中一个出发,在遍历过程中,检查是否找到另一个结点即可在遍历过程中,访问过的结点都应被标记为“已访问”,以避免重复访问深度优先实现起来比较简单,递归即可但广度优先很适合用来找最短路径,深度优先在访问临近结点之前需要先深度遍历其中一个临近结点impo原创 2015-07-14 14:01:53 · 3573 阅读 · 1 评论 -
【Java】打印一个0到1之间的实数的二进制表示
给定一个介于0和1之间的实数,(如0.72), 类型为double,打印它的二进制表示。如果该数字无法精确地用32位以内的二进制表示,则打印“ERROR”public class printBinary { public static String printBin( double num ) { if (num >= 1 || num < 0) { return "ERROR原创 2015-07-14 17:17:01 · 866 阅读 · 0 评论 -
【Java,面试】实现一个算法,确定一个字符串的所有字符是否全都不同
实现一个算法,确定一个字符串的所有字符是否全都不同首先 询问字符串是ASCII 还是Unicode,二者不同只在于unicode需要更大的存储空间。以上两个办法中,第一个办法的时间复杂度为O(n), 空间复杂度为O(1)第二个办法通过位运算把空间幅度减小为了原来的1/8(代码假定字符串只含有小写的a到z),时间复杂度不变。还有其他解法:将字符串中的每个字符与其他字符比较原创 2015-07-06 23:02:27 · 2765 阅读 · 1 评论 -
【Java】编写函数,检查链表是否为回文
快行指针找到链表中间结点1. 反转前半部分看是否和后半部分一样2. 将前半部分入栈,迭代访问剩下的一半结点,每次的栈顶元素一样则是回文链表import java.util.Stack;public class isHuiWen { public boolean isPalinddrome(LinkedListNode head) { LinkedListNode f原创 2015-07-09 15:38:02 · 2279 阅读 · 0 评论 -
【Java】给定一个有环链表,实现算法返回环路的开头结点
假设链表有一部分是环路,一部分不是,环路起始处距离链表表头有K个结点1. 创建两个指针:FastRunner 和 SlowRunnerpublic class FindLoopBegining { public LinkedListNode FindBeginging(LinkedListNode head){ LinkedListNode slow = head; LinkedLi原创 2015-07-09 15:34:57 · 1763 阅读 · 0 评论 -
【Java、算法】Princeton Algorithms Part I Week 1 Exercise
Question 1(seed = 303345)Suppose that you time a program as a function of N and producethe following table. N seconds------------------- 32 0.000 64 0.002 128原创 2014-09-22 16:49:26 · 1366 阅读 · 0 评论 -
【Java】若MxN矩阵中某个元素为0, 则将其所在的行与列清零
若直接遍历整个矩阵,发现为零的元素就直接将所在行与列清零,这样做有一个陷阱,在读取已被清零的行或列时,读到的全是零,于是所在的行或列都变成零。很快整个矩阵的所有元素都全部变为零了。其实我们并不关心具体的行号和列号,反正整行和整列都会被清零,我们可以标记出零元素的行号和列号,根据这个来进行清零public class setZeros { public void setZero(int原创 2015-07-07 21:56:48 · 3183 阅读 · 0 评论 -
【Java】以给定值x为基准将链表分割成两部分,所有小于x的结点排在大于等于x的结点之前
编写代码,以给定值x为基准将链表分割成两部分,所有小于x的结点排在大于等于x的结点之前可以用两个链表,一个存储小于x的结点,一个存储大于等于x的结点,然后将两个链表合并到一起import java.util.*;public class partition { public LinkedList Partition(LinkedList node, int x){ LinkedLi原创 2015-07-08 20:42:32 · 2731 阅读 · 2 评论 -
【Java】编写代码,移除未排序链表中的重复结点
移除重复结点,需要知道哪些结点是重复的,可以用一个哈希表, 如果有重复的元素,则将该元素从链表里删除,然后继续迭代hashtable基本用法:int size();得到键值对数boolean isEmpty();判断是否为空boolean containsKey(Object key);判断是否包含以key为键的键值对boolean containsValue(Object k原创 2015-07-08 15:18:54 · 1426 阅读 · 0 评论