import java.util.*; public class CommonProgram { enum Suit { CLUB, DIAMOND, HEART, SPADE } enum Rank { ACE, DEUCE, THREE, FOUR, FIVE, SIX, SEVEN, EIGHT, NINE, TEN, JACK, QUEEN, KING } private static final Random rnd = new Random(); //了解和使用标准类库及其API的功能 //Boolean.getBoolean(name)返回System.getProperty(name)的boolean值 public static boolean yesOrNo(String s) { s = s.toLowerCase(); if (s.equals("yes") || s.equals("y") || s.equals("t")) { s = "true"; } return Boolean.getBoolean(s); } public static void main(String[] args) { System.out.println(yesOrNo("true") + " " + yesOrNo("Yes")); Collection<Suit> suits = Arrays.asList(Suit.values()); Collection<Rank> ranks = Arrays.asList(Rank.values()); //throw NoSuchElementException /*for (Iterator<Suit> i = suits.iterator(); i.hasNext(); ) for (Iterator<Rank> j = ranks.iterator(); j.hasNext(); ) System.out.println(i.next() + ", " + j.next()); */ //正确的用法 for (Iterator<Suit> i = suits.iterator(); i.hasNext(); ) { Suit suit = i.next(); for (Iterator<Rank> j = ranks.iterator(); j.hasNext(); ) System.out.println(suit + ", " + j.next()); } //for-each for (Suit suit : suits) for (Rank rank : ranks) System.out.println(suit + " " + rank); //分布不平均的随机数 int n = 2 * (Integer.MAX_VALUE / 3); int low = 0; for (int i = 0; i < 1000000; i++) if (rnd.nextInt() < n/2) low++; System.out.println(low); //新类库功能更准确 low = 0; for (int i = 0; i < 1000000; i++) if (rnd.nextInt(n) < n/2) low++; System.out.println(low); //float和double不精确 System.out.println(1.03 - .42); } }
* 将局部变量的作用域最小化:最有力的方法就是在第一次使用它的地方声明。
for/for each循环允许声明循环变量,它们的作用域被限定在正好需要的范围内。
当循环之外不需要循环变量时,for循环优先于while循环。
* ********************************************************************
* for each循环优先于传统的for循环:for each循环通过隐藏迭代器或者索引变量,避免了混乱和出错的
可能。
以下情况无法使用for each循环:
1.过滤:如果需要遍历集合,并删除指定元素,就需要使用显式的迭代器,以便可以调用
Iterator.remove(item)方法。
2.转换:如果需要遍历数组或者集合,并取代它部分或者全部的元素值,就需要集合迭代器或者
数组索引,以便设定元素的值。
3.平行迭代:如果需要并行地迭代多个集合,就需要显式地控制迭代器或者索引变量,以便迭代器
或者索引变量都可以同步前移。
* ********************************************************************
* 了解和使用标准类库:
通过使用标准类库,可以充分利用编写标准类库的专家的知识,以及之前其他人的使用经验。
标准类库的性能往往会随着时间的推移而不断提高。
使用标准类库可以使代码融入主流,更易读,更易维护和重用。
* ********************************************************************
* 如果需要精确的答案,避免使用float和double:尤其不适合用于货币计算。
使用BigDecimal或者放大数据使用int或者long进行精确计算并处理小数点。
* ********************************************************************
* 基本类型优先于装箱基本类型:
装箱基本类型具有与它们的值不同的同一性。
基本数据类型只有功能完备的值,装箱基本类型除了有对应的功能完备的值外,还有非功能值null。
基本数据类型比装箱基本类型更节省时间和空间。
对装箱基本类型使用==操作符几乎总是错误的。
当一项操作中混合使用基本类型和装箱基本类型时,装箱基本类型就会自动拆箱。
装箱基本类型应用场所:
1.作为集合中元素的key和value
2.在泛型中作为类型参数时
3.在进行反射的方法调用时
* ********************************************************************
* 如果其他类型更适合,则尽量避免使用字符串:
字符串不适合代替其他的值类型。
字符串不适合代替枚举类型。
字符串不适合代替聚集类型。
* ********************************************************************
* 当心字符串连接(+)的性能:
为连接n个字符串而重复地使用字符串连接操作,需要n的平方级的时间。这是由于字符串不可变
而导致的结果。当两个字符串被连接在一起时,它们的内容都要被拷贝。
多个字符串连接时,应该使用StringBuilder的append方法。
* ********************************************************************
* 通过接口引用对象:应该优先使用接口而不是类来引用对象。
如果有合适的接口类型存在,那么对于参数、返回值、变量和field来说,都应该使用接口类型进行声明。
只有当利用构造器创建某个对象的时候,才真正需要引用这个对象的类。
对于不存在接口的类,尽量使用基类(通常是抽象类)来引用对象,而不是具体的实现类。
* ********************************************************************
* 接口优先于反射机制:
使用反射需要付出的代价:
丧失了编译时类型检查的好处,执行反射访问所需要的代码非常笨拙和冗长。反射方法调用比普通方法
调用慢了许多。如果在编译时存在接口或者超类,就可以以反射方式创建实例,然后通过接口或者超类,
以正常的方式访问实例。
* ********************************************************************
* 遵循普遍接受的命名惯例:
static final 常量域的名称应该包含一个或者多个大写的单词,中间用下划线(_)隔开。
泛型类型参数通常由单个大写字母组成。T=任意类型、E=集合元素类型、(K/V)=映射的键和值得类型、
X=异常、(T/U/V)=任何类型的序列。
输出为:
false false
CLUB, ACE
CLUB, DEUCE
CLUB, THREE
CLUB, FOUR
CLUB, FIVE
CLUB, SIX
CLUB, SEVEN
CLUB, EIGHT
CLUB, NINE
CLUB, TEN
CLUB, JACK
CLUB, QUEEN
CLUB, KING
DIAMOND, ACE
DIAMOND, DEUCE
DIAMOND, THREE
DIAMOND, FOUR
DIAMOND, FIVE
DIAMOND, SIX
DIAMOND, SEVEN
DIAMOND, EIGHT
DIAMOND, NINE
DIAMOND, TEN
DIAMOND, JACK
DIAMOND, QUEEN
DIAMOND, KING
HEART, ACE
HEART, DEUCE
HEART, THREE
HEART, FOUR
HEART, FIVE
HEART, SIX
HEART, SEVEN
HEART, EIGHT
HEART, NINE
HEART, TEN
HEART, JACK
HEART, QUEEN
HEART, KING
SPADE, ACE
SPADE, DEUCE
SPADE, THREE
SPADE, FOUR
SPADE, FIVE
SPADE, SIX
SPADE, SEVEN
SPADE, EIGHT
SPADE, NINE
SPADE, TEN
SPADE, JACK
SPADE, QUEEN
SPADE, KING
666400
499585
0.6100000000000001
相关推荐
Ada是一种表现能力很强的通用程序设计语言,它是美国国防部为克服软件开发危机,耗费巨资,历时近20年研制成功的。它被誉为第四代计算机语言的成功代表。 Ada语言的使用可大大改善软件系统的清晰性、可靠性、有效性...
服务端通用程序设计 服务端通用程序设计 服务端通用程序设计
C语言是一门面向过程的、抽象化的通用程序设计语言,广泛应用于底层开发。C语言能以简易的方式编译、处理低级存储器。C语言是仅产生少量的机器语言以及不需要任何运行环境支持便能运行的高效率程序设计语言。尽管...
本文档《基于matlab的空间三维桁架结构受力分析通用程序设计.pdf》详细介绍了如何利用MATLAB软件结合有限元方法来设计一个空间三维桁架结构受力分析的通用程序。 首先,文档指出了空间三维桁架结构的重要性,并强调...
论文研究-县级人口系统规划研究通用程序设计.pdf, 本文采用人口系统研究方法, 以TURBOBASIC开发了一个县级人口系统规划研究通用的软件。该软件包括人口的复杂预测和人口...
通过深入理解W5300的内部结构和通用程序设计,开发者不仅可以快速地将网络功能集成到自己的产品中,还能优化系统性能,降低功耗,提高整体系统的可靠性。同时,这种高度集成的网络协议芯片也简化了嵌入式系统的网络...
本书同时详细分析Delphi作为通用程序设计语言的本质特征和语法规则,并以大量Delphi程序实例演示应用程序的设计过程,介绍主流的思想方法,培养读者的代码编写能力。 本书内容深入浅出,覆盖面广,图文并茂,独...
china-pub产品,高清,C语言是目前流行的通用程序设计语言,是许多计算机专业人员和计算机的爱好者学习程序设计语言的首选。 本书共10章,分别介绍了C语言的算法基础、基本概念和如何利用C语言进行程序设计。通过...
介绍了椭圆曲线加工原理,设计了...实践表明,该通用宏程序有效克服了自动编程程序冗长、精度不易控制、可读性、可重用性及灵活性差的缺点,对机械加工中曲线轮廓、相似零件分组和曲面零件的通用宏程序设计具有借鉴意义。
摘要:介绍如何利用状态图的分析结果把握待开发系统的软界面结构,完成软键盘控制类产品界面显示的通用程序设计。 关键词:状态图 控制类产品 界面 数据结构可视频程序的一个重要特点是:有大量的窗口、对话框等界面...
以Java语言为载体,通过讨论Java程序...本书同时详细分析了Java作为通用程序设计语言的本质特点和语法规划,并以大量Java程序实例演示说明有关应用程序的设计过程,介绍主流的程序设计思想方法,培养读者的代码编写.
本书同时详细分析了Java作为通用程序设计语言的本质特点和语法规划,并以大量Java程序实例演示说明有关应用程序的设计过程,介绍主流的程序设计思想方法,培养读者的代码编写能力。本书内容深入浅出,覆盖面广,...
农民讲习所建立通用程序 包括代码 和 清晰的pdf文档 建立一个电子钟
C语言是目前流行的通用程序设计语言,是许多计算机专业人员和计算机的爱好者学习程序设计语言的首选。 本书共10章,分别介绍了C语言的算法基础、基本概念和如何利用C语言进行程序设计。通过大量的实例介绍了C语言...
通用机器人程序设计通用机器人程序设计
C语言是目前流行的通用程序设计语言,是许多计算机专业人员和计算机的爱好者学习程序设计语言的首选。 本书共10章,分别介绍了C语言的算法基础、基本概念和如何利用C语言进行程序设计。通过大量的实例介绍了C语言...
C++是一种静态类型、编译式的通用程序设计语言,它支持过程化编程、面向对象编程以及泛型编程等多种编程范式。源代码中可能会包含对变量声明、数据类型、运算符、流程控制(如if语句、switch语句、for循环、while...
MFC程序设计详细实例 第07章 通用控件MFC程序设计详细实例 第07章 通用控件MFC程序设计详细实例 第07章 通用控件MFC程序设计详细实例 第07章 通用控件MFC程序设计详细实例 第07章 通用控件MFC程序设计详细实例 第07...