博学谷——让IT教学更简单,让IT学习更有效
三、案例总结
1、在本案例中,演示了TreeMap集合中元素的存储和迭代方法与HashMap相同。从输出结果可以看出,TreeMap集合中的元素是不重复的,并且按照值的自然顺序进行了排序。这是因为在TreeMap中是通过二叉树的原理来保证键的唯一性,这个TreeSet集合存储的原理一样,因此TreeMap中所有的键是按照某种顺序排列的。
2、本案例中,在定义TreeMap集合时使用了泛型,即<参数化类型>。它可以指定该类中方法操作的数据类型,避免在集合存取时会产生的数据类型转化的错误。
案例7-16 Proeprties集合的功能
一、案例描述
1、 考核知识点
编号:00107016
名称:Proeprties集合
2、 练习目标
? 掌握Proeprties集合的存储和遍历方法
3、 需求分析
Map接口中还有一个实现类Hashtable,它和HashMap的区别是Hashtable是线程安全的。Hashtable类有一个子类Properties在实际应用中非常重要,Properties主要用来存储字符串类型的键和值,为了掌握Properties集合的使用,本案例将演示Properties集合中元素的存储,修改和遍历。
4、 设计思路(实现原理)
1) 编写一个类Example16,创建Proeprties集合对象 2) 向Proeprties集合中添加元素 3) 遍历Proeprties集合中的元素
二、案例实现
import java.util.*; public class Example16{
public static void main(String[] args) {
// 创建集合对象
Properties prop = new Properties();
//添加元素
prop.setProperty(\刘备\双股剑\
prop.setProperty(\关羽\青龙偃月刀\ prop.setProperty(\张飞\丈八蛇矛\
Set
26
博学谷——让IT教学更简单,让IT学习更有效
}
String value = prop.getProperty(key); System.out.println(key + \
}
}
运行结果如图7-21所示。
图7-21 运行结果
三、案例总结
Properties类中,针对字符串的存取提供了两个专用的方法setProperty()和getProperty()。setProperty()方法用于将配置项的键和值添加到Properties集合当中。propertyNames()方法得到一个包含所有键的set对象,然后在遍历所有的键时,通过调用getProperty()方法获得键所对应的值。
案例7-17 泛型的使用
一、案例描述
1、 考核知识点
编号:00107017 名称:泛型的使用
2、 练习目标
? 了解为什么要使用泛型 ? 掌握泛型的使用方法
3、 需求分析
集合可以存储任何类型的对象,但是在程序中无法确定一个集合中的元素到底是什么类型的。那么在取出元素时,如果进行强制类型转换就很容易出错。为了解决这个问题,在Java中引入了“参数化类型(parameterized type)”这个概念,即泛型。本案例将使用泛型来限定集合元素的数据类型,从而方便初学者学习泛型的使用方法。
4、 设计思路(实现原理)
1) 编写一个类Example17,创建ArrayList集合对象,并指定集合只能存储String类型的元素 2) 向集合中添加元素,其中有一个Integer类型的元素 3) 遍历集合中的元素,观察结果是否报错
二、案例实现
import java.util.*; public class Example17 {
27
博学谷——让IT教学更简单,让IT学习更有效
}
public static void main(String[] args) { }
// 用ArrayList存储字符串并遍历
ArrayList
array.add(new Integer(10));//添加一个Integer类型的数据,此处报编译异常 Iterator
String s = (String) it.next(); System.out.println(s);
编译程序发现报错,如图7-22所示。
图7-22 编译报错
错误显示array中不能再存入除String类型之外的数据类型,将Integer类型数据删掉,重新编译运行程序,结果如图7-23所示。
图7-23 运行结果
三、案例总结
1、在定义集合类时,可以使用“<参数化类型>”的方式指定该类中方法操作的数据类型,具体格式如下:
ArrayList<参数化类型> list = new ArrayList<参数化类型>();
2、在本案例中,使用泛型规定了ArrayList集合只能存入String类型元素。需要注意的是,在使用泛型后每次遍历集合元素时,可以指定元素类型为String,而不是Object,这样就避免了在程序中进行强制类型转换。
3、在程序中也可以自定义泛型,自定义泛型的具体代码如下:
28
博学谷——让IT教学更简单,让IT学习更有效
class cachePool
public void save(T temp) { // 在创建save()方法时,指定参数类型为T
this.temp = temp; }
public T get() { // 在创建get()方法时,指定返回值类型为T }
return temp; }
在定义CachePool类时,声明了参数类型为T,例如:在实例化对象时通过
案例7-18 Collections类对集合的操作
一、案例描述
1、 考核知识点
编号:00107019
名称:Collections工具类
2、 练习目标
? 掌握如何使用Collections类对集合进行操作
3、 需求分析
在程序中,针对集合的操作非常频繁,针对这些常见操作,JDK提供了一个工具类专门用来操作集合,这个类就是Collections。为了初学者能够熟悉Collections类中的方法,本案例将使用Collections类中的各种方法操作集合实现模拟斗地主发牌,来学习Collections类对集合操作的方法。
4、 设计思路(实现原理)
1) 编写类Example18,创建两个String类型数组,其中一个用于存储牌的花色,一个用于存储
牌的数字
2) 创建一个ArrayList集合作为牌盒,将大小王和不同花色不同数字的牌循环添加到集合中 3) 用Collections工具类的shuffle()方法洗牌
4) 创建三个ArrayList集合作为三个人的牌的集合,并循环发牌,要留三张底牌 5) 打印出三个人的牌和集合中留的三张底牌
二、案例实现
import java.util.*; public class Example18 {
public static void main(String[] args) {
// 表示花色的数组
String[] colors = { \黑桃\红桃\梅花\方块\
29
博学谷——让IT教学更简单,让IT学习更有效
}
}
// 表示点数的数组
String[] numbers = { \
\
// 找一个牌盒
ArrayList
for (String c : colors) { } // 洗牌
Collections.shuffle(array); // 发牌
ArrayList
for (int x = 0; x < array.size() - 3; x++) { } // 看牌
System.out.println(\System.out.println(\System.out.println(\// 看底牌
System.out.print(\三张底牌:\
for (int x = array.size() - 3; x < array.size(); x++) { }
System.out.print(array.get(x) + \if (x % 3 == 0) { }
linString.add(array.get(x)); zhouString.add(array.get(x)); meString.add(array.get(x)); } else if (x % 3 == 1) { } else if (x % 3 == 2) { for (String n : numbers) { }
array.add(c.concat(n));
运行结果如图7-24所示。
30