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

内容发布更新时间 : 2024/12/24 3:29:47星期一 下面是文章的全部内容请认真阅读。

博学谷——让IT教学更简单,让IT学习更有效

class cachePool { // 在创建类时,声明参数类型为T T temp;

public void save(T temp) { // 在创建save()方法时,指定参数类型为T

this.temp = temp; }

public T get() { // 在创建get()方法时,指定返回值类型为T }

return temp; }

在定义CachePool类时,声明了参数类型为T,例如:在实例化对象时通过将参数T指定为Integer类型,同时在调用save()方法时传入的数据也是Integer类型,那么调用get()方法取出的数据自然就是Integer类型,这样做的好处是不需要进行类型转换。

案例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 array = new ArrayList(); array.add(\大王\array.add(\小王\// 循环装牌

for (String c : colors) { } // 洗牌

Collections.shuffle(array); // 发牌

ArrayList linString = new ArrayList(); ArrayList zhouString = new ArrayList(); ArrayList meString = new ArrayList(); // 用普通for

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

博学谷——让IT教学更简单,让IT学习更有效

图7-24 运行结果

三、案例总结

1、本案例中使用到了Collections工具类的shuffle()方法对List集合中的元素进行随机排序(模拟玩扑克中的“洗牌”)。

2、Collections工具类的其它方法,具体如表7-4所示。

表7-4 Collection类的相关方法 方法声明 static boolean addAll(Collection c, T... elements) static void reverse(List list) static void shuffle(List list) static void sort(List list) static void swap(List list,int i,int j) static int binarySearch(List list,Object key) static Object max(Collection col) static Object min(Collection col) static boolean replaceAll(List list,Object oldVal,Object newVal) 功能描述 将所有指定元素添加到指定 collection 中 反转指定List集合中元素的顺序 对List集合中的元素进行随机排序(模拟玩扑克中的“洗牌”) 根据元素的自然顺序对List集合中的元素进行排序 将指定List集合中i处元素和j处元素进行交换 使用二分法搜索指定对象在List集合中的索引,查找的List集合中的元素必须是有序的 根据元素的自然顺序,返回给定集合中最大的元素 根据元素的自然顺序,返回给定集合中最小的元素 用一个新的newVal替换List集合中所有的旧值oldVal 案例7-19 Arrays类对数组的操作

一、案例描述

1、 考核知识点

编号:00107020 名称:Arrays工具类

2、 练习目标

? 掌握如何使用Arrays工具类对数组进行操作

3、 需求分析

Arrays是一个专门用于操作数组的工具类,其中提供了大量的静态方法。为了让初学者能熟悉Arrays类中方法的功能和使用,本案例将使用Arrays类中的各种方法对数据进行操作,来学习Arrays工具类对数组进行排序、转换等操作。

31

博学谷——让IT教学更简单,让IT学习更有效

4、 设计思路(实现原理)

1) 编写一个类Example21,在该类中定义一个数组 2) 用Arrays类中的sort()方法对数组进行排序 3) 用toString()方法将数组转换成字符串,并输出 4) 用asList()方法将数组转换成集合

二、案例实现

import java.util.*; public class Example19 { }

public static void main(String[] args) { }

Integer[] arr = { 3, 1, 6, 34, 78, 9 }; // 对数组排序 Arrays.sort(arr);

// 将排序后的数组转换成字符串打印出来

System.out.println(\排序后的数组:\// 将数组转换成集合

List array = Arrays.asList(arr); System.out.println(\数组转换成集合后:\

运行结果如图7-25所示。

图7-25 运行结果

三、案例总结

1、本案例中,使用Arrays的sort()方法时只需要将数组做为参数传递给sort()方法就可以,至于内部是怎么进行排序的我们无需关心。可见使用这个方法不仅可以大大减少代码的书写量,而且操作简单。使用Arrays工具类的方法toString(int[] arr)时。需要注意的是,该方法并不是对Object类toString()方法的重写,只是用于返回指定数组的字符串形式。

2、除了本案例中的三种方法,Arrays工具类中还有其他方法,如: 1)使用Arrays的binarySearch(Object[] a, Object key)方法查找元素

2)使用Arrays的copyOfRange(int[] original, int from, int to)方法拷贝元素 3)使用Arrays的fill(Object[] a, Object val)方法填充元素

32