博学谷——让IT教学更简单,让IT学习更有效
3) 遍历字符数组,获取到每一个字符
4) 拿到每一个字符,到TreeMap集合中找对应的值,判断返回值是否为NULL 5) 如果返回值是NULL,就将字符存储到TreeMap集合中,对应的键记为1
6) 如果返回值不为NULL,就将键值加1,并重新将值(字符)和键(出现的次数)存入集合 7) 把TreeMap的元素拼接成一个字符串,输出结果
二、案例实现
import java.util.*; public class Example15{
public static void main(String[] args) { }
String s = \ // 把字符串变成字符数组。
char[] chs = s.toCharArray();
// 定义一个TreeMap集合
TreeMap
// 遍历字符数组,获取到每一个字符。 for (char ch : chs) {
// 拿到该字符,到TreeMap集合中找对应的值 Integer i = tm.get(ch);
// 根据返回值是否为null。是:存储,把次数记录为1;否:把数据++,然后重写存储
if (i == null) {
tm.put(ch, 1); i++;
tm.put(ch, i); } else {
}
}
// 把TreeMap的数据拼接成一个字符串。
StringBuilder sb = new StringBuilder(); Set
Integer i = tm.get(ch);
sb.append(ch).append(\
String result = sb.toString();
System.out.println(result);
}
}
运行结果如图7-20所示。
图7-20 运行结果
25
博学谷——让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