Java基础知识拾遗(三)
集合框架
SortedSet接口,声明了以升序进行排序的行为。
Queue接口,声明了队列行为,队列通常是先进先出的列表
Deque接口,扩展了Queue接口,声明了双端队列的行为。双端队列可以像标准队列那样先进先出,也可以像堆栈那样后进先出。
LinkedHashSet,维护组中条目的一个链表,链表中条目顺序也就是插入他们的顺序,这使得可以按照插入顺序迭代集合。
EnumSet,专门用于枚举类型的元素。
集合迭代器Spliterator,用于循环遍历元素序列,他支持并行迭代,即使用不到并行编程,也可以用。它讲hasNext()和next操作合并到了一个方法中,从而提高了效率。
RandomAccess接口,通过实现这个接口,可表明集合支持高效地随机访问其中的元素。
SortedMap接口,扩展了Map接口,确保条目以键的升序保存。
NavigableMap接口,扩展了SortedMap,支持基于最接近匹配原则的条目检索行为,即支持检索与给定的一个或多个键最匹配的条目。
TreeMap,该类用于创建存储在树结构中的映射,TreeMap提供了有序存储键/值对的高效手段,并支持快速检索。树映射确保元素以键的升序存储。
常用工具类
StringTokenizer类,实现了Enumeration接口。解析就是将字符串分隔成一系列独立的部分,又称为标记,它们是可以表达语义含义的特定序列。它提供了解析过程的第一步,通常称为字符解析器或
扫描器。所以,给定输入字符串,就可以使用StringTokenizer枚举字符串中包含的每个标记。为了使用StringTokenizer,指定一个输入字符串和一个包含定界符的字符串。定界符
是用来分割标记的字符。定界符中的每个字符都被都被认为是有效的定界符,例如“,;:”将逗号,分号,和冒号设置为定界符。默认的定界符组由空白字符组成:空格,制表符
换页符,换行以及回车符。
BitSet类,创建特殊类型的数组,这类数组的元素是布尔形式的位值。这类数组可以根据需要增加大小,这使得BitSet与位向量类似。
Optional、OptionalDouble、OptionalInt和OptionalLong,为处理值可能存在、也可能不存在的场合提供了方法。避免需要频繁检查空值。
Class Optional<T> T指定了存储的值的类型。Optional实例既可以包含为T值,也可以为空
Optional的基础是isPresent()和get()方法。isPresent()方法可判断是否存在值。存在返回true,否则false。get()方法取得Optional中的值。如果不包含值则抛出异常。orElse()方法将
返回值,否则返回一个默认值。
Optional.empty()
Optional.of("ABCDEFG")
OptionalDouble、OptionalInt和OptionalLong类的工作方式与Optional类十分类似,只不过他们是专门为操作double、int和long类型设计的。因此,他们分别定义了getAsDouble()、
getAsInt()、getAsLong()方法为而不恃get()方法。
Date类,封装了当前日期和时间。不允许获取日期或时间的单个组成部分。只能以毫秒数为单位获取日期和时间。
Calendar抽象类提供了一套方法,允许将毫秒数形式的时间转换成大量有用的时间组成部分。
GregorianCalendar类,是Calendar类的具体实现,实现了熟悉的Gregorian日历。这个对象使用默认地区和时区进行初始化。GregorianCalendar定义了两个域变量:AD和BC.他们
表示格林尼治日历定义的两个纪元。
TimeZone抽象类,可以处理与格林尼治标准时间(GMT)——也就是世界时间(UTC)之间的时差。
SimpleTimeZone类,是TimeZone的一个便利子类。它实现了TimeZone的抽象方法,并且可以操作GreGorian日历的时区,此外还能够计算夏令营。
Locale类,使用Locale类实例化的对象,用于描述地理或文化上的区域。使其可以编写能在不用国际环境中云运行的java程序。例如在不同的区域,用于显示日期、时间、数字
的格式是不同的。
Locale类的构造函数如下:
Locale(String language)
Locale(String language, String country)
Locale(String language, String country, String variant)
这些构造函数用来构建表示特定语言以及特定国家的Locale对象。这些值必须包含标准语言和国家代码,辅助信息通过variant提供。
static void setDefault(Locale localeObj)
这个方法将JVM使用的默认地区设置为localeObj.
Calendar和GregorianCalendar是以地区敏感方式使用的类的例子。
Random类,是伪随机数生成器,之所以成为伪随机数,是因为他们只是简单的均匀分布序列。
Random() 使用相对唯一的种子
Random(long seed) 手动指定种子
如果使用种子初始化Random对象,就为伪随机序列定义了开始点。如果使用相同的种子初始化另外一个Ramdom对象,就会得到相同的随机序列。如果希望
生成不同的序列,需要指定不同的种子。实现这种效果的一种方式是使用当前时间作为Random对象的种子。这种方式减少了得到重复序列的可能。
Currency类,封装了有关货币的信息,Currency c = Currency.getInstance(Locale.US);
Formatter类,Java能对创建格式化输出进行支持的核心在于Formatter类。该类提供了格式转换功能,从而可以采用适合的各种方式显示数字,字符串以及时间和
日期。内容。可以让Formatter自动提供这个缓冲区,也可以在创建Formatter对象时显示提供。让Formatter将自己的缓冲区输出到文件中也是有可能的。Formatter
对象在使用完之后应当关闭,从而释放Formatter对象占用的所有资源。
Formatter参数中需包含个会说明符,定义显示后续参数的方法。格式说明符最以%开头。
Formatter fmt = new Formatter();
fmt.format("Formatting %s is easy %d %f", "with Java", 10, 98.6);
fmt.toString();
指定宽度:%和格式转换代码之间的整数作为最小字段宽度说明符,这会使用空格填充输出,确保输出达到特定的最小长度。即使字符串或数字长度小于宽度。
也仍然会完整输出。默认使用空格进行填充。如果希望使用0进行填充,可以在字段宽度说明符前放一个0。%05d使用0填充总长度小于5的数字,使数字长度为5。
指定精度:精度说明符可以应用于%f、%e、%g以及%s格式说明符。精度说明符位于最小字段宽度说明符之后。由一个小数点以及紧跟其后的整数构成。精度
说明符的确切含义取决于所应用数据的类型。%10.4f显示的数字至少有10个字符宽,并且带有4位小数。
对齐输出,默认情况所有输出是右对齐,如果紧随%之后放置一个减号,这样可以强制输出左对齐。%-10.2f:左对齐有两位小数点。
+,在整数前面显示“+”符号,%+d
,当显示打的数字时,添加组分隔符通常是很有用的。fmt.format(",.2f", 4356783497.34) : 4,356,783,497.34
"#" 应用于%o %x %e和%f格式说明符。确保具有小数点,及时没有小数位。
参数索引,格式说明符和参数按顺序从左向右进行匹配,使用参数索引,可以显示地控制哪个参数与哪个格式说明符相匹配。
fmt.format("%3$d %1$d %2$d", 10, 20,30) 30 10 20
Scanner类,与Formatter类相反,Scanner类读取格式化的输入,并将输入转换成相应的二进制。可以用于从控制台,文件,字符串或者任意实现了Readable或
ReadableByteChanner接口的资源读取内容。
一旦创建Scanner对象,使用它来读取格式化输入就是很简单的事情了。Scanner对象从位于低位的,创建这种对象时指定的源读取标记。标记与Scanner有关,
是输入的一部分,根据一系列定界符确定标记的开始和结束为止。默认情况下定界符是空格。Scanner类的nextX方法进行读取,如果nextX无法找到正在查找的 类型抛出异常。
当关闭Scanner对象时,与之关联Readable也会被关闭。
ResourceBundle、ListResourceBundle和PropertyResourceBundle类,帮助国际化程序的类。
ResourceBundle该类定义的方法用于管理地区敏感资源的集合,例如用于显示程序中用户界面元素的字符串。可以定义两套或更多套用于支持各种语言的翻译过字符串。
比如英语、德语等,每套翻译过的字符串都在自己的资源保中。然后可以加载适用于当前地区的资源包,并使用其中的字符串构造程序的用户界面。
资源包通过他们的家族名称(“基名”)进行标识。对于家族名称,可以添加两字符的小写语言代码,语言代码用于指定语言。对于这种情况,如果需要的地区与语言代码
匹配,就使用该版本的资源包。 如 家族名SampleRB_de称为德语版,所以,如果地区是Locale。GERMAN就会使用SampleRB_de。
ResourceBundle有两个子类,第一个是PropertyResourceBundle,该类使用属性文件管理资源,没有添加自己的方法。第二个是抽象类ListResourceBundle,该类使用
键/值对数组管理资源。