Data Structures & Algorithms In Java(一):综述

Filed under: JAVA, 数据结构&算法 | Borrow: | No Comments »
Posted on

1、数据结构的概述

数据结构是对在计算机内在中的数据的一种安排。数据结构包括数组、链表、栈、二叉树、哈希表等等。

数据结构的特性

数据结构 优点 缺点
数组 插入快,如果知道下标,可以非常快地存取 查找慢,删除慢,大小固定
有序数组 比无序的数组查找快 删除和插入慢,大小固定
提供先进后出方式的存取 存取其他项很慢
队列 提供先进先出方式的存取 存取其他项很慢
链表 插入快,删除快 查找慢
二叉树 查找、插入、删除都快(如果树保持平衡) 删除算法复杂
红-黑树 查找、插入、删除都快。树总是平衡的 算法复杂
2-3-4树 查找、插入、删除都快。树总是平衡的。类似的树对磁盘存储有用 算法复杂
哈希表 如果关键字已知则存取极快。插入快 删除慢,如果不知道关键字则存取很慢,对存储空间使用不充分
插入、删除快,对最大数据项的存取很快 对其他数据项存取慢
对现实世界建模 有些算法慢且复杂

2、算法的概述 Read the rest of this entry »

Java实现分数运算

Filed under: JAVA, 经典代码 | Borrow: | No Comments »
Posted on

Java中的基本数值变量只有int、double等少数几种,而通常为了节省内存开销,每种类型的储存长度是有限的,也就是说在进行小数(通常是double型)计算的时候,往往都要损失精度。若是处理少量的数据还好,这点误差可以忽略不计。但如果需要处理的数据很多呢?这种有JAVA自身机制引起的精度误差累加后将变的无法忽视了。例如最少见的单位做报表进行统计的时候,当我把所有的统计结果相加,居然结果经常不会是100%,有可能101%或99%!
很显然是不合理的。这就是由于精度损失累加而造成的。所以我就想有没有可能利用分数来表示每种概率呢?因为这样我可以用分数表示每种可能的概率,最后将他们累加,这样得到的一定是1!

也可能因为这种情况,或是有关于钱或计算什么之类的,我在面试的过程中,有个公司也确实要我机试分数的运算。 Read the rest of this entry »

JAVA设计模式之单例(Singleton)模式

Filed under: DesignPattern, JAVA | Borrow: | No Comments »
Posted on

作为对象的创建模式,单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。这个类称为单例类。

单例模式特点:

  • 单例类只能有一个实例。
  • 单例类必须自己创建自己的唯一实例。
  • 单例类必须给所有其它对象提供这一实例。

在写关于本篇Singleton Pattem之时,我也查阅很些资料,原来老师上课之时说有5种写单例模式的代码,到今日看书只有3种代码,再看到网上看到的一些关于单例模式中关于“双重锁定”的分析,所以在这我将以我的方式展现单例模式。

单例模式基本一致认为的应该分为2种。在书上定义的名字为饿汉式单例类和懒汉式单例类,按我们平常Java中的说法应该就是静态加载和延时加载方法。(书上还定义一种名字为登记式单例类,因为缺点多,基本我也没见哪用过,所以不在这说明了,有兴趣的朋友可以自己在网上搜索相关内容看看。)

1、饿汉式单例类(静态加载),这是种最Easy和Safe的方法,没有特别要求推荐用这个。 Read the rest of this entry »

JAVA设计模式之抽象工厂(Abstract Factory)模式

Filed under: DesignPattern, JAVA | Borrow: | No Comments »
Posted on

在阅读本篇以前,为了方便理解,请首先阅读本博的“JAVA设计模式之简单工厂(Simple Factory)模式”和“JAVA设计模式之工厂方法(Factory Method)模式”。

抽象工厂模式是对象的创建模式,它是工厂方法模式的进一步推广。抽象工厂的“抽象”来自于“抽象的产品角色”,而抽象工厂就是抽象产品角色的工厂。每一个设计模式都是针对一系列的问题的解决方案。抽象模式就是针对多个等级产品结构的系统而设计的。抽象工厂模式就是向客户端提供一个接口,使得客户端在不必知道产品的具体类型的情况下,创建多个产品族中的产品。

抽象工厂中的各个角色又是怎么样的呢?

抽象工厂(Abstract Factory)角色:该角色是工厂方法模式的核心,它是以应用程序无关的。它往往由接口或抽象类来实现。所有的具体工厂类都应该实现这个Java接口或是继承这个Java类。

具体工厂(Concrete Factory)角色:这个角色直接在客户端的调用下创建产品的实例。这个角色含有选择合适的产品对象的逻辑,而这个逻辑与系统的商业逻辑紧密相连。通常用具体的Java类来实现这个角色。

抽象产品(Abstract Product)角色:工厂方法模式所创建的对象的父类或它们的共同接口,它往往由接口或抽象类来实现。

具体产品(Concrete Product)角色:抽象工厂所创建的任何产品对象都是某一个具体产品的实例。这是客户端最终需要的东西。

Read the rest of this entry »

JAVA设计模式之工厂方法(Factory Method)模式

Filed under: DesignPattern, JAVA | Borrow: | No Comments »
Posted on

在阅读本篇以前,为了方便理解,请首先阅读本博的“JAVA设计模式之简单工厂(Simple Factory)模式”。

工厂方法模式是类的创建模式,有叫做虚拟构造子模式或者多态性工厂,工厂方法的用意是定义一个创建产品对象的工厂接口,将实际创建工作推到子类中。工厂方法模式是对简单工厂模式的抽象和推广;由于使用了多态性,工厂模式保持了简单工厂模式的优点,而又克服了它的缺陷。

工厂方法如何工作:

抽象工厂(Creator)角色:该角色是工厂方法模式的核心,它是以应用程序无关的。任何在模式中创建对象的工厂类必须实现这个接口。它往往由接口或抽象类来实现。

具体工厂(Concrete Creator)角色:担任这个角色的是实现了抽象工厂接口的具体Java类。具体工厂角色含有与应用密切相关的逻辑,并且受到应用程序的调用以创建产品对象。

抽象产品(Product)角色:工厂方法模式所创建的超类型,也就是产品对象的共同父类或共同拥有的接口。它往往由接口或抽象类来实现。 Read the rest of this entry »