- 博客(12)
- 资源 (14)
- 收藏
- 关注
原创 二叉树中删除一个节点
二叉树的删除可以算是二叉树最为复杂的操作,删除的时候要考虑到很多种情况:1.被删除的节点是叶子节点2.被删除的节点只有左孩子节点3.被删除的节点只有右孩子节点4.被删除的有两个孩子节点 所以在删除的时候,这4种情况都必须考虑进去,并且这4中情况之下,还会有细的划分,下面就细说怎么删除。 在二叉树中想要删除一个节点,首先需要找到这个节点,由于二叉树在插入节点的时候会遵
2014-06-15 23:06:34
13256
1
原创 Unicode编码详解
经常碰到乱码,为了弥补这一块的知识,在网上查阅了大量的资料,发现关于字符编码有很多概念,很多文章也是从不同角度来讲解,也能碰到相矛盾的文章,被绕了很久,最终才整理出我自己的理解,不一定完全准确,但是至少是自己经过思考和总结出来的,所以看文章只能是辅助自己思考的过程,要始终怀着怀疑和批判态度去思考。什么是Unicode?Unicode的学名是"Universal Multiple-O
2014-04-23 14:59:55
1597
原创 快速排序算法
快速排序思想:先把数列的最后一个数挑选出来,作为一种中间值,然后分别从数列的两端向中间靠近,从左向右遍历时,遇到比中间值大的数则把这个数的索引leftPtr先下来,然后再从右往左遍历,遇到比中间值小的数,就把这个数的索引rightPtr也记录下来,最后让leftPtr和rightPtr出的数交换,然后再分别从两端接着遍历,按照这个交换规则,最终可以让所以比中间值小的数放到数列的左边,所有比中间
2014-04-03 12:22:39
801
原创 希尔排序
希尔排序是对插入排序的一种改进,要想理解希尔排序必须先理解插入排序,希尔排序与插入排序的区别就是,希尔排序每次移动指针的距离不是固定每次只移动一个单位距离。可以想象一下,假设有一万个数据来排序,前9999个都已经排好了发现第10000个数据值相当小,如果它刚好是这个数据的最小值的话,他们它将会跟它前面的9999个数据依次的比较,然后再慢慢的移动,最后再排到第一个,这10000个数据还算少的,假如更
2014-04-02 23:18:09
775
原创 选择法排序
选择法排序,选择法排序应该算是所有排序中最好理解的一种排序算法了。其思想是,先定位到第一个,然后再拿所有的数据跟它比较,如果比它小,就让他们作交换,然后再定位到第二个,再拿出它后面所有的数据与它相比较,如果比它小就作交换,就这样,不停的定位到第2个,第三个,一直到第n个,当定位到第n个的时候,真个就是一个顺序的数列了。如下代码:public static void sort(int[] n
2014-04-02 22:54:36
1038
原创 插入法排序
插入法排序,插入法排序相对于选择排序和冒泡排序来说相对要难理解一些,算法也比较巧妙,直接看代码: public static void sort(int[] m){ for(int i=1;i<m.length;i++){ int t=m[i]; int j=i-1; while(j>=0&&m[j]>t){ m[j+1]=m[j];//把前一个赋给后一个
2014-04-02 22:21:23
1105
原创 冒泡排序
冒泡排序法是一种常见的排序算法,在笔试中会经常考到,也是最基本的排序算法,下面直接看代码 public static void sort(int[] n) { for (int i = 0; i < n.length-1; i++) { for(int j=n.length-1;j>i;j--){ if(n[j-1]>n[j]){ n[j]=n[j]^n[j-1];//
2014-04-02 22:06:19
737
原创 ArrayList中ensureCapacity的使用与优化
对于ArrayLis中有一个方法ensureCapacity(int n),这个方法可以对ArrayList低层的数组进行扩容,显示的调用这个函数,如果参数大于低层数组长度的1.5倍,那么这个数组的容量就会被扩容到这个参数值,如果参数小于低层数组长度的1.5倍,那么这个容量就会被扩容到低层数组长度的1.5倍。说这么多,总而言之,记住这个函数可以对低层数组扩容就行了,在适当的时机,好好利用这个函数,
2014-04-01 19:48:11
8560
3
原创 ArrayList、LinkedList、Vector的使用和优化。
ArrayList、LinkedList、Vector都实现了List接口,它们有什么区别呢?ArrayList低层是数组来实现的,所以它适合查找和修改,不适合删除和增加。LinkedList低层是双向链表来实现的,所以它适合删除和增加,不适合查找和修改。Vector跟ArrayList相似,低层都是数组,它们唯一的区别就是vector是线程安全的,ArrayList是非线程安全的,所
2014-04-01 19:24:53
966
原创 如何不使用第三个变量进行数据交换?
对于这个问题又两种方法第一种通过按位异或实现int a=7,b=5;a=a^b;b=a^b;a=a^b;最终a=7,b=5,看起来虽然奇怪,但是的确能做到交换的效果,具体过程转换成2进制来看:a=0111;b=0101;a=0111^0101; / / =0010 ,一样的置0,不一样的置1b=0010^0101; //=0111=7;a=0010^01
2014-04-01 16:32:02
956
原创 求N!
刚开始看到这个题目觉得很简单,一个循环搞定。但是仔细考虑一下,如果N是一个特别大的数呢,它可能是100,1000.....这个时候基本类型数据已经装不下它了,这是时候就需要写一种数据结构来满足大数据的计算,如下代码: /** * 定义大数据的乘法 * @param str 乘数(大数据) * @param n 被乘数 * @return */ publi
2014-04-01 13:44:45
1160
原创 String驻留池
在java面试题中会经常碰到类似与这样的题目:String str=new String("abc");这句代码创建了几个对象?想要搞明白这个问题,不得不解释一个概念,也就是字符串常量池,也称为驻留池。对于以下代码:Sring s1="abc";String s2="abc";总共创建了几个对象?答案是一个,这两个字符串,我们在使用的时候,它们在内容上没有任何区别,更没有理由
2014-03-26 18:12:25
1233
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人