- 博客(48)
- 资源 (4)
- 收藏
- 关注
原创 经典排序算法系列7----堆与堆排序
堆排序与快速排序,归并排序一样都是时间复杂度为O(N*logN)的几种常见排序方法。学习堆排序前,先讲解下什么是数据结构中的二叉堆。二叉堆的定义二叉堆是完全二叉树或者是近似完全二叉树。二叉堆满足二个特性:1.父结点的键值总是大于或等于(小于或等于)任何一个子节点的键值。2.每个结点的左子树和右子树都是一个二叉堆(都是最大堆或最小堆)。当父结点的键值总
2016-04-21 15:55:09 1656
转载 平衡二叉查找树 [AVL]
在谈论二叉查找树的效率的时候,不同结构的二叉查找树,查找效率有很大的不同(单支树结构的查找效率退化成了顺序查找)。如何解决这个问题呢?关键在于如何最大限度的减小树的深度。正是基于这个想法,平衡二叉树出现了。 平衡二叉树的定义 (AVL—— 发明者为Adel'son-Vel'skii 和 Landis) 平衡二叉查找树,又称 AVL树。 它除了具备二叉查找树的基本特征
2016-04-19 22:20:38 454
转载 面试中的二叉树问题总结【Java版】
package Algorithms.tree;import java.util.ArrayList;import java.util.Iterator;import java.util.LinkedList;import java.util.List;import java.util.Queue;import java.util.Stack;/** * REFS: *
2016-04-19 21:45:34 572
转载 对JAVA集合进行遍历删除时务必要用迭代器
今天同事写了几行类似这样的代码:123456789101112public static void main(String args[]) { List famous = new ArrayList(); famous.ad
2016-04-13 22:43:08 382
原创 两种Java容器类List和Set分析
容器类可以大大提高编程效率和编程能力,在Java2中,所有的容器都由SUN公司的Joshua Bloch进行了重新设计,丰富了容器类库的功能。 Java2容器类类库的用途是“保存对象”,它分为两类: Collection----一组独立的元素,通常这些元素都服从某种规则。List必须保持元素特定的顺序,而Set不能有重复元素。 Map----一组成对的“键值对”
2016-04-12 11:10:56 341
原创 Java 空字符串“”和null区别
空字符串“”1、类型:“”是一个空字符串(String),长度为0,占内存,在内存中分配一个空间,可以使用Object对象中的方法。(例如:“”.toString()等)2、内存分配:表示声明一个字符串类型的引用,其值为“”空字符串,这个引用指向str1的内存空间。null1、类型:null是空引用,表示一个对象的值,没有分配内存,调用null的字符串的方法会抛出空指针异常。(例如
2016-04-11 11:41:41 453
原创 map中 key,value 对换 ,互换
当查询一些数据需要去重复的时候,有很多人想到用map自带的属性去重,因为不允许有相同的key存在,但是可以允许有相同的value存在。例如:我想得到 手机通讯录 中所有的电话号码和姓名(是去重后的手机号码,不存在相同的两个电话号码) 一部手机里面有 我的电话:152****5398 (2个) 姓名 1 :李白白
2016-04-11 10:55:10 10208
原创 字符串整理 1
null跟""的区别""是创建字符串对象,但是内容是空的,在内存中已经分配内存空间了。而null是,未初始化,在内存中并没有分配内存空间。另外你可以试一试,这个代码就清楚了!String str1 = "";String str2 = null;Console.WriteLine(str1.Length);Consol
2016-04-11 10:32:11 347
原创 JAVA String对象和字符串常量的关系解析
JAVA String对象和字符串常量的关系解析1 字符串内部列表 JAVA中所有的对象都存放在堆里面,包括String对象。字符串常量保存在JAVA的.class文件的常量池中,在编译期就确定好了。 虚拟机为每个被装载的类型维护一个常量池。常量池就是该类型所用常量的一个有序集合,包括直接常量(string、integer和float point常量)和对其他类型、字段和方法的
2016-04-10 22:42:57 419
原创 浅谈Java集合中Array(数组)的应用
我们都知道,由于Array(数组)通常意义上讲只是一个单纯的线性序列,又基于Native,凭此它的效率历来便号称Java中最高。所以通常我们也都承认Java中效率最高的存储方式就是使用数组。但是,由于数组初始化后大小固定,索引不能超出下标,缺少灵活的扩展功能等原因,使得很多人放弃了数组的使用, 转而使用Collection,List,Map,Set等接口处理集合操作。诚然在Java中使用集
2016-04-10 22:39:03 398
原创 Java集合框架List,Map,Set等全面介绍
Java Collections Framework是Java提供的对集合进行定义,操作,和管理的包含一组接口,类的体系结构。 Java集合框架的基本接口/类层次结构:java.util.Collection [I]+--java.util.List [I] +--java.util.ArrayList [C] +--java.util.
2016-04-10 22:31:35 329
转载 无处不在的二分查找
我们都知道二分查找算法,实际上二分查找以及其扩展应用是很广泛的。这里收集了一些和二分查找有关的有趣问题。强烈建议大家看完问题后最小化浏览器,先尝试自己去解决,然后再看代码,问题都不是太难。问题1描述给一个已经排序的数组,其中有N个互不相同的元素。要求使用最小的比较次数找出其中的一个元素。(你认为二分查找在排序数组里找一个元素是最优的算法的吗?)不需要太多的理论,这是
2016-04-07 09:59:52 293
转载 [经典排序算法][集锦]
经典排序算法 经典排序算法,以下文章参考了大量网上的资料,大部分都给出了出处这一系列重点在理解,所以例子什么的都是最简单的情况,难免失误之处,多指教大多数排序算法都给出了每一步的状态,以方便初学者更容易理解,通俗易懂,部分难以理解的排序算法则给出了大量的图示,也算是一个特色吧经典排序算法 - 快速排序Quick sort 经典排序算法 - 桶排序Bu
2016-04-06 16:38:02 320
转载 快速找出一个数组中的两个数字,让这两个数字之和等于一个给定的值
能否快速找出一个数组中的两个数字,让这两个数字之和等于一个给定的值,为了简化起见,我们假设这个数组中肯定存在至少一组符合要求的解。 假如有如下的两个数组,如图所示: 5,6,1,4,7,9,8 给定Sum= 10 1,5,6,7,8,9 给定Sum= 10 分析与解法 这个题目不是很难,也很容易理解。
2016-04-06 16:31:39 6424 2
原创 坑爹的小学数学题
◆小学数学作业中的变态题━━━━━━━━━━━━━━━━━━━━━━━━━'坑爹的小学数学题1博士老爸:这道变态的小学数学题难倒我了 http:/ / www.ithome.com/ html/ out/ 66331.htm 近日,一名自称有博士学位的父亲发微博称:儿子有数学题不会,问我,“一个四位数ABCD乘以9等于DCBA,则ABCD是多少?” 这名父亲称这是自己第
2016-04-06 11:00:59 2753 1
原创 贪心算法基本思想和典型例题
一、算法思想贪心法的基本思路:——从问题的某一个初始解出发逐步逼近给定的目标,以尽可能快的地求得更好的解。当达到某算法中的某一步不能再继续前进时,算法停止。该算法存在问题:1. 不能保证求得的最后解是最佳的;2. 不能用来求最大或最小解问题;3. 只能求满足某些约束条件的可行解的范围。实现该算法的过程:从问题的某一初始解出发;while 能朝给定总目标前进一步 do 求出可...
2016-04-06 10:32:56 9528
原创 三种方法拆分字符串
字符串分割有三种方法,如下:1.用split()方法进行分割,分割开的子字符串放入数组,然后进行处理。示例代码如下:2.用StringTokenizer类进行操作示例代码如下:import java.util.StringTokenizer;public class StringTokenizerTest {public static void ma
2016-04-05 17:06:25 36906
原创 Java单例模式
Java单例模式概念: java中单例模式是一种常见的设计模式,单例模式分三种:懒汉模式单例、饿汉模式单例、登记模式的那里三种。 单例模式有一下特点: 1、单例类只能有一个实例。 2、单例类必须自己自己创建自己的唯一实例。 3、单例类必须给所有其他对象提供这一实例。 单例模式确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例。
2016-04-03 18:10:08 315
原创 Java Arrays.sort源代码解析
Java Arrays中提供了对所有类型的排序。其中主要分为Primitive(8种基本类型)和Object两大类。 基本类型:采用调优的快速排序; 对象类型:采用改进的归并排序。一、对于基本类型源码分析如下(以int[]为例): Java对Primitive(int,float等原型数据)数组采用快速排序,对Object对象数组采用归并排序。对这一区别,
2016-04-03 18:09:13 752
原创 java.io.Serializable浅析
Java API中java.io.Serializable接口源码:1 public interface Serializable {2 } 类通过实现java.io.Serializable接口可以启用其序列化功能。未实现次接口的类无法使其任何状态序列化或反序列化。可序列化类的所有子类型本身都是可序列化的。序列化接口没有方法或字段,仅用于标识可序列化的语义。 J
2016-04-03 18:07:55 343
原创 Java数组扩容算法及Java对它的应用
Java数组扩容的原理 1)Java数组对象的大小是固定不变的,数组对象是不可扩容的。 2)利用数组复制方法可以变通的实现数组扩容。 3)System.arraycopy()可以复制数组。 4)Arrays.copyOf()可以简便的创建数组副本。 5)创建数组副本的同时将数组长度增加就变通的实现了数组的扩容。 源码展示:
2016-04-03 18:02:44 990
原创 System.arraycopy用法
先看ArrayList源码中数组复制的代码: 其实ArrayList 就是一个数组的形式存放数据的. 没有高深的地方.他的性能在于他的索引能力, 正因为他是数组形式,所以索引元素的时候他表现得非常的快速成,所以查找的时候是非常快的,但是插入或者删除一条记录就比较慢了,试想一下, 只要知道这个元素的索引,E[2] 你看对像就出来了.这就是ArrayList 最突出的地方.让我们来看下
2016-04-03 17:59:44 526
原创 深入理解java的clone
目录 预备知识 为什么要clone Object的clone以及为什么如此实现 如何clone 对clone的态度 其他的选择 和Serializable的比较 性能 预备知识 为了理解java的clone,有必要先温习以下的知识。 java的类型,java的类型分为两大类,一类为primitive,如int,另一类为引用类型,如String
2016-04-03 17:58:05 262
原创 魔术师发牌问题和拉丁方阵问题
本节引言:本节继续带来的是循环链表的两个经典例子,分别是魔术师发牌问题和拉丁方阵问题!1.魔术师发牌问题问题描述:魔术师利用一副牌中的13张黑桃牌,预先将他们排好后叠放在一起,牌面朝下。对观众说:“我不看牌,只数数就可以猜到每张牌是什么,我大声数数,你们听,不信?现场演示。”魔术师将牌堆最上面的哪张排数为1,把他翻过来正好是黑桃A,将黑桃A从牌堆抽出放在
2016-04-03 17:35:34 781
原创 Java 接口(interface)和抽象类(abstract class)区别
1.概述一个软件设计的好坏,我想很大程度上取决于它的整体架构,而这个整体架构其实就是你对整个宏观商业业务的抽象框架,当代表业务逻辑的高层抽象层结构 合理时,你底层的具体实现需要考虑的就仅仅是一些算法和一些具体的业务实现了。当你需要再开发另一个相近的项目时,你以前的抽象层说不定还可以再次利用 。面对对象的设计,复用的重点其实应该是抽象层的复用,而不是具体某一个代码块的复用。说到了抽象
2016-04-03 17:28:53 392
原创 JAVA中的final 和 static final
1.final和static final的区别(1)如果只是使用final 那你如果想使用这个属性 需要实例化对象 才能使用如果加上static 那他就属于类属性 不用实例化 直接使用(2)final的含义是一样的,比如被修饰的类不可继承,被修饰的方法可被继承不可被重写,被修饰的属性相当于常量不可被修改。再就是内部类访问外部类的局部变量,该局部变量需要被fin
2016-04-03 17:27:33 397
原创 求素数的算法
注意: 如果没有特殊说明, 以下讨论的都是针对n为素数时的时间复杂度1. 根据概念判断:如果一个正整数p 只有两个因子, 1和p,则称p为素数.代码:bool isPrime(int n){ if(n < 2) return false; for(int i = 2; i < n; ++i) if(n%i == 0)
2016-04-03 17:26:39 338
原创 栈、堆栈、堆、队列,它们之间的关系
堆栈和栈就是一个概念!!!队列是先进先出:就像一条路,有一个入口和一个出口,先进去的就可以先出去。而栈就像一个箱子,后放的在上边,所以后进先出。(堆和它们不同,不存在是先进后出还是先进先出)1.栈(Stack)是操作系统在建立某个进程时或者线程(在支持多线程的操作系统中是线程)为这个线程建立的存储区域,该区域具有FIFO的特性,在编译的时候可以指定需
2016-04-03 17:03:37 584
转载 面试中十四个可以向主考官提出的问题
很多应聘者成功闯过初试、复试,最后却败在了面试上,究其原因,可能跟自己的谈吐有很大的关系,也就是说,在面试时,哪些问题不能问,哪些问题可以问,哪些问题可以深究,哪些问题应浅问辄止。 面试时,谈到最后,主考官一般都会问:“你还有什么问题需要问的吗?”那这时,你就应该想想该怎么开口了。下面,我粗略统计了一些面试时面试者可以提出的问题供大家参考。 1. 这个职位为什么空缺? 2
2016-04-03 17:01:53 473
原创 顺序表 线性表 数组的区别
数组就是相同数据类型的元素按一定顺序排列的集合。一句话:就是物理上存储在一组联系的地址上。也称为数据结构中的物理结构。线性表中数据元素之间的关系是一对一的关系,即除了第一个和最后一个数据元素之外,其它数据元素都是首尾相接的。一句话:线性表是数据结构中的逻辑结构。可以存储在数组上,也可以存储在链表上。 顺序存的结点按逻辑次序依次存放在一组地址连续的存储单元里的
2016-04-03 16:57:31 646
原创 Java I/O 模型的演进
摘要 什么是同步?什么是异步?阻塞和非阻塞又有什么区别?本文先从 Unix 的 I/O 模型讲起,介绍了5种常见的 I/O 模型。而后再引出 Java 的 I/O 模型的演进过程,并用实例说明如何选择合适的 Java I/O 模型来提高系统的并发量和可用性。Java IO 模型 演进 同步 异步 阻塞 非阻塞目录[-]相关概念同步和异步阻塞和非阻塞
2016-04-03 15:50:21 747
原创 生成器模式
生成器模式:将一个复杂对象的构建与它的表示分离,使同样的构建过程可以创建不同的表示(Separate the construction of a complex object from its representation so that the same construction process can create different representations)。生成器模式结构中
2016-04-03 15:44:31 1008
原创 装饰模式
设计原则:类应该对扩展开放,对修改关闭(开闭原则)。装饰着模式:动态的将责任添加到对象上。若要扩展功能,装饰着将比继承更有弹性。装饰着模式类图如下:下面是关于装饰模式的一个典型示例:来自Head First的装饰者模式Demo(星巴兹咖啡):package com.zjut.json.decoratorPattern;/** * 装饰模式抽象组件
2016-04-03 15:43:44 595
原创 工厂方法
设计原则:依赖倒置原则(要依赖抽象,不要依赖具体类)该设计原则的最佳实践方式的几个指导方针:1.变量不可以持有具体类的引用。(如果使用new,就会持有具体类的引用,可用工厂来避开这样的做法)2.不要类派生自具体类。(如果派生自具体类,就会依赖具体类)3.不要覆盖基类中已实现的方法。(如果覆盖基类已实现的方法,那么你的基类就不是一个真正适合被继承的抽象,基类中实现的方
2016-04-03 15:42:52 646
原创 Integer.parseInt()和Integer.valueOf()有什么区别
Integer.parseInt()和Integer.valueOf()有区别吗?当然有 他们有本质区别Integer.valueof(String s)是将一个包装类是将一个实际值为数字的变量先转成string型再将它转成Integer型的包装类对象(相当于转成了int的对象)这样转完的对象就具有方法和属性了。而Integer.parseInt(String s)只是将是...
2016-04-03 10:50:15 4074
原创 关于HashMap 中的 transient table
集合中的底层实现大都是利用数组,比如HashMap中的table以及ArrayList 中的elementData。在序列化的时候,这些存储元素的数组由于被修饰了 transient 关键字而不会在默认的序列化函数中存储到文件中。当然,集合中重写了函数 [java] view plainprivate void writeObject(java.io.Obj
2016-04-03 10:15:07 1169 2
原创 JDK 1.7 Integer.parseInt 源码解析
public static int parseInt(String s, int radix) throws NumberFormatException { /* * WARNING: This method may be invoked early during VM initialization
2016-04-03 10:14:15 701
原创 Java中对象与引用
初学Java 时,在很长一段时间里,总觉得基本概念很模糊。后来才知道,在许多Java 书中,把对象和对象的引用混为一谈。 如果分不清对象与对象引用,那实在没法很好地理解下面的面向对象技术,把自己的一点认识写下来,或许能让初学Java 的朋友们少走一点弯路。 为便于说明,我们先定义一个简单的类: class student{
2016-04-01 22:40:11 771
转载 Java clone() 浅克隆与深度克隆
现在Clone已经不是一个新鲜词语了,伴随着“多莉”的产生这个词语确实很“火”过一阵子,在java中也有这么一个概念,它可以让我们很方便的“制造”出一个对象的副本来,下面来具体看看java中的Clone机制是如何工作的? 1. Clone&Copy 假设现在有一个Employee对象,Employee tobby =new Employee(“CMTobby”,5000),
2016-04-01 22:30:19 327
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人