第7章 集合类_补充案例 下载本文

博学谷——让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 tm = new 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 set = tm.keySet(); for (Character ch : 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 set = prop.stringPropertyNames(); for (String key : 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 = new ArrayList(); array.add(\array.add(\array.add(\

array.add(new Integer(10));//添加一个Integer类型的数据,此处报编译异常 Iterator it = array.iterator(); while (it.hasNext()) { }

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