LinkedHashMap类概述Map 接口的哈希表和链接列表实现,具有可预知的迭代顺序。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | import java.util.LinkedHashMap;
import java.util.Set;
/*
* LinkedHashMap:是Map接口的哈希表和链接列表实现,具有可预知的迭代顺序。
* 由哈希表保证键的唯一性
* 由链表保证键盘的有序(存储和取出的顺序一致)
*/
public class LinkedHashMapDemo {
public static void main(String[] args) {
// 创建集合对象
LinkedHashMap<String, String> hm = new LinkedHashMap<String, String>();
// 创建并添加元素
hm.put( "2345" , "hello" );
hm.put( "1234" , "world" );
hm.put( "3456" , "java" );
hm.put( "1234" , "javaee" );
hm.put( "3456" , "android" );
// 遍历
Set<String> set = hm.keySet();
for (String key : set) {
String value = hm.get(key);
System.out.println(key + "---" + value);
}
}
}
|
TreeMap类概述TreeMap类概述 键是红黑树结构,可以保证键的排序和唯一性 TreeMap案例 TreeMap<String,String> TreeMap<Student,String> 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | import java.util.Set;
import java.util.TreeMap;
/*
* TreeMap:是基于红黑树的Map接口的实现。
*
* HashMap<String,String>
* 键:String
* 值:String
*/
public class TreeMapDemo {
public static void main(String[] args) {
// 创建集合对象
TreeMap<String, String> tm = new TreeMap<String, String>();
// 创建元素并添加元素
tm.put( "hello" , "你好" );
tm.put( "world" , "世界" );
tm.put( "java" , "爪哇" );
tm.put( "world" , "世界2" );
tm.put( "javaee" , "爪哇EE" );
// 遍历集合
Set<String> set = tm.keySet();
for (String key : set) {
String value = tm.get(key);
System.out.println(key + "---" + value);
}
}
}
|
自己创建类对象1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | public class Student {
private String name;
private int age;
public Student() {
super ();
}
public Student(String name, int age) {
super ();
this .name = name;
this .age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this .name = name;
}
public int getAge() {
return age;
}
public void setAge( int age) {
this .age = age;
}
}
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 | import java.util.Comparator;
import java.util.Set;
import java.util.TreeMap;
/*
* TreeMap<Student,String>
* 键:Student
* 值:String
*/
public class TreeMapDemo2 {
public static void main(String[] args) {
// 创建集合对象
TreeMap<Student, String> tm = new TreeMap<Student, String>(
new Comparator<Student>() {
@Override
public int compare(Student s1, Student s2) {
// 主要条件
int num = s1.getAge() - s2.getAge();
// 次要条件
int num2 = num == 0 ? s1.getName().compareTo(
s2.getName()) : num;
return num2;
}
});
// 创建学生对象
Student s1 = new Student( "潘安" , 30 );
Student s2 = new Student( "柳下惠" , 35 );
Student s3 = new Student( "唐伯虎" , 33 );
Student s4 = new Student( "燕青" , 32 );
Student s5 = new Student( "唐伯虎" , 33 );
// 存储元素
tm.put(s1, "宋朝" );
tm.put(s2, "元朝" );
tm.put(s3, "明朝" );
tm.put(s4, "清朝" );
tm.put(s5, "汉朝" );
// 遍历
Set<Student> set = tm.keySet();
for (Student key : set) {
String value = tm.get(key);
System.out.println(key.getName() + "---" + key.getAge() + "---"
+ value);
}
}
}
|
Map集合案例"aababcabcdabcde",获取字符串中每一个字母出现的次数要求结果:a(5)b(4)c(3)d(2)e(1)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 |
import java.util.Scanner;
import java.util.Set;
import java.util.TreeMap;
/*
* 需求 :"aababcabcdabcde",获取字符串中每一个字母出现的次数要求结果:a(5)b(4)c(3)d(2)e(1)
*
* 分析:
* A:定义一个字符串(可以改进为键盘录入)
* B:定义一个TreeMap集合
* 键:Character
* 值:Integer
* C:把字符串转换为字符数组
* D:遍历字符数组,得到每一个字符
* E:拿刚才得到的字符作为键到集合中去找值,看返回值
* 是null:说明该键不存在,就把该字符作为键,1作为值存储
* 不是null:说明该键存在,就把值加1,然后重写存储该键和值
* F:定义字符串缓冲区变量
* G:遍历集合,得到键和值,进行按照要求拼接
* H:把字符串缓冲区转换为字符串输出
*
* 录入:linqingxia
* 结果:result:a(1)g(1)i(3)l(1)n(2)q(1)x(1)
*/
public class TreeMapDemo {
public static void main(String[] args) {
// 定义一个字符串(可以改进为键盘录入)
Scanner sc = new Scanner(System.in);
System.out.println( "请输入一个字符串:" );
String line = sc.nextLine();
// 定义一个TreeMap集合
TreeMap<Character, Integer> tm = new TreeMap<Character, Integer>();
//把字符串转换为字符数组
char [] chs = line.toCharArray();
//遍历字符数组,得到每一个字符
for ( char ch : chs){
//拿刚才得到的字符作为键到集合中去找值,看返回值
Integer i = tm.get(ch);
//是null:说明该键不存在,就把该字符作为键,1作为值存储
if (i == null ){
tm.put(ch, 1 );
} else {
//不是null:说明该键存在,就把值加1,然后重写存储该键和值
i++;
tm.put(ch,i);
}
}
//定义字符串缓冲区变量
StringBuilder sb= new StringBuilder();
//遍历集合,得到键和值,进行按照要求拼接
Set<Character> set = tm.keySet();
for (Character key : set){
Integer value = tm.get(key);
sb.append(key).append( "(" ).append(value).append( ")" );
}
//把字符串缓冲区转换为字符串输出
String result = sb.toString();
System.out.println( "result:" +result);
}
}
|
HashMap嵌套HashMap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 | import java.util.HashMap;
import java.util.Set;
/*
* HashMap嵌套HashMap
*
* jc基础班
* 张三20
* 李四22
* jy就业班
* 王五21
* 李六23
*
* 先存储元素,然后遍历元素
*/
public class HashMapDemo2 {
public static void main(String[] args) {
// 创建集合对象
HashMap<String, HashMap<String, Integer>> shibazhangMap = new HashMap<String, HashMap<String, Integer>>();
// 创建基础班集合对象
HashMap<String, Integer> jcMap = new HashMap<String, Integer>();
// 添加元素
jcMap.put( "张三" , 20 );
jcMap.put( "李四" , 22 );
// 把基础班添加到大集合
shibazhangMap.put( "jc" , jcMap);
// 创建就业班集合对象
HashMap<String, Integer> jyMap = new HashMap<String, Integer>();
// 添加元素
jyMap.put( "王五" , 21 );
jyMap.put( "李六" , 23 );
// 把基础班添加到大集合
shibazhangMap.put( "jy" , jyMap);
//遍历集合
Set<String> shibazhangMapSet = shibazhangMap.keySet();
for (String shibazhangMapKey : shibazhangMapSet){
System.out.println(shibazhangMapKey);
HashMap<String, Integer> shibazhangMapValue = shibazhangMap.get(shibazhangMapKey);
Set<String> shibazhangMapValueSet = shibazhangMapValue.keySet();
for (String shibazhangMapValueKey : shibazhangMapValueSet){
Integer shibazhangMapValueValue = shibazhangMapValue.get(shibazhangMapValueKey);
System.out.println( "\t" +shibazhangMapValueKey+ "---" +shibazhangMapValueValue);
}
}
}
}
|
HashMap嵌套ArrayList /* *需求: *假设HashMap集合的元素是ArrayList。有3个。 *每一个ArrayList集合的值是字符串。 *元素我已经完成,请遍历。 *结果: * 三国演义 * 吕布 * 周瑜 * 笑傲江湖 * 令狐冲 * 林平之 * 神雕侠侣 * 郭靖 * 杨过 */ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | public class HashMapIncludeArrayListDemo {
public static void main(String[] args) {
// 创建集合对象
HashMap<String, ArrayList<String>> hm = new HashMap<String, ArrayList<String>>();
// 创建元素集合1
ArrayList<String> array1 = new ArrayList<String>();
array1.add( "吕布" );
array1.add( "周瑜" );
hm.put( "三国演义" , array1);
// 创建元素集合2
ArrayList<String> array2 = new ArrayList<String>();
array2.add( "令狐冲" );
array2.add( "林平之" );
hm.put( "笑傲江湖" , array2);
// 创建元素集合3
ArrayList<String> array3 = new ArrayList<String>();
array3.add( "郭靖" );
array3.add( "杨过" );
hm.put( "神雕侠侣" , array3);
//遍历集合
Set<String> set = hm.keySet();
for (String key : set){
System.out.println(key);
ArrayList<String> value = hm.get(key);
for (String s : value){
System.out.println( "\t" +s);
}
}
}
}
|
ArrayList嵌套HashMap /* ArrayList集合嵌套HashMap集合并遍历。 需求: 假设ArrayList集合的元素是HashMap。有3个。 每一个HashMap集合的键和值都是字符串。 元素我已经完成,请遍历。 结果: 周瑜---小乔 吕布---貂蝉 郭靖---黄蓉 杨过---小龙女 令狐冲---任盈盈 林平之---岳灵珊 */ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | public class ArrayListIncludeHashMapDemo {
public static void main(String[] args) {
// 创建集合对象
ArrayList<HashMap<String, String>> array = new ArrayList<HashMap<String, String>>();
// 创建元素1
HashMap<String, String> hm1 = new HashMap<String, String>();
hm1.put( "周瑜" , "小乔" );
hm1.put( "吕布" , "貂蝉" );
// 把元素添加到array里面
array.add(hm1);
// 创建元素1
HashMap<String, String> hm2 = new HashMap<String, String>();
hm2.put( "郭靖" , "黄蓉" );
hm2.put( "杨过" , "小龙女" );
// 把元素添加到array里面
array.add(hm2);
// 创建元素1
HashMap<String, String> hm3 = new HashMap<String, String>();
hm3.put( "令狐冲" , "任盈盈" );
hm3.put( "林平之" , "岳灵珊" );
// 把元素添加到array里面
array.add(hm3);
// 遍历
for (HashMap<String, String> hm : array) {
Set<String> set = hm.keySet();
for (String key : set) {
String value = hm.get(key);
System.out.println(key + "---" + value);
}
}
}
}
|
面试题HashMap和Hashtable的区别 List,Set,Map等接口是否都继承自Map接口 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | import java.util.Hashtable;
/*
* 1:Hashtable和HashMap的区别?
* Hashtable:线程安全,效率低。不允许null键和null值
* HashMap:线程不安全,效率高。允许null键和null值
*
* 2:List,Set,Map等接口是否都继承子Map接口?
* List,Set不是继承自Map接口,它们继承自Collection接口
* Map接口本身就是一个顶层接口
*/
public class HashtableDemo {
public static void main(String[] args) {
// HashMap<String, String> hm = new HashMap<String, String>();
Hashtable<String, String> hm = new Hashtable<String, String>();
hm.put( "it001" , "hello" );
// hm.put(null, "world"); //NullPointerException
// hm.put("java", null); // NullPointerException
System.out.println(hm);
}
}
|
Collections类概述和成员方法Collections类概述 针对集合操作 的工具类 Collections成员方法 public static <T> void sort(List<T> list) public static <T> int binarySearch(List<?> list,T key) public static <T> T max(Collection<?> coll) public static void reverse(List<?> list) public static void shuffle(List<?> list) /* * Collections:是针对集合进行操作的工具类,都是静态方法。 * * 面试题: * Collection和Collections的区别? * Collection:是单列集合的顶层接口,有子接口List和Set。 * Collections:是针对集合操作的工具类,有对集合进行排序和二分查找的方法 * * 要知道的方法 * public static <T> void sort(List<T> list):排序 默认情况下是自然顺序。 * public static <T> int binarySearch(List<?> list,T key):二分查找 * public static <T> T max(Collection<?> coll):最大值 * public static void reverse(List<?> list):反转 * public static void shuffle(List<?> list):随机置换 */ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | public class CollectionsDemo {
public static void main(String[] args) {
// 创建集合对象
List<Integer> list = new ArrayList<Integer>();
// 添加元素
list.add( 30 );
list.add( 20 );
list.add( 50 );
list.add( 10 );
list.add( 40 );
System.out.println( "list:" + list);
// public static <T> void sort(List<T> list):排序 默认情况下是自然顺序。
// Collections.sort(list);
// System.out.println("list:" + list);
// [10, 20, 30, 40, 50]
// public static <T> int binarySearch(List<?> list,T key):二分查找
// System.out
// .println("binarySearch:" + Collections.binarySearch(list, 30));
// System.out.println("binarySearch:"
// + Collections.binarySearch(list, 300));
// public static <T> T max(Collection<?> coll):最大值
// System.out.println("max:"+Collections.max(list));
// public static void reverse(List<?> list):反转
// Collections.reverse(list);
// System.out.println("list:" + list);
//public static void shuffle(List<?> list):随机置换
Collections.shuffle(list);
System.out.println( "list:" + list);
}
}
|
ArrayList存储基本包装类的元素排序/* * Collections可以针对ArrayList存储基本包装类的元素排序,存储自定义对象可不可以排序呢? */ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 | public class CollectionsDemo {
public static void main(String[] args) {
// 创建集合对象
List<Student> list = new ArrayList<Student>();
// 创建学生对象
Student s1 = new Student( "林青霞" , 27 );
Student s2 = new Student( "风清扬" , 30 );
Student s3 = new Student( "刘晓曲" , 28 );
Student s4 = new Student( "武鑫" , 29 );
Student s5 = new Student( "林青霞" , 27 );
// 添加元素对象
list.add(s1);
list.add(s2);
list.add(s3);
list.add(s4);
list.add(s5);
// 排序
// 自然排序
// Collections.sort(list);
// 比较器排序
// 如果同时有自然排序和比较器排序,以比较器排序为主
Collections.sort(list, new Comparator<Student>() {
@Override
public int compare(Student s1, Student s2) {
int num = s2.getAge() - s1.getAge();
int num2 = num == 0 ? s1.getName().compareTo(s2.getName())
: num;
return num2;
}
});
// 遍历集合
for (Student s : list) {
System.out.println(s.getName() + "---" + s.getAge());
}
}
}
/**
* @author Administrator
*
*/
public class Student implements Comparable<Student> {
private String name;
private int age;
public Student() {
super ();
}
public Student(String name, int age) {
super ();
this .name = name;
this .age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this .name = name;
}
public int getAge() {
return age;
}
public void setAge( int age) {
this .age = age;
}
@Override
public int compareTo(Student s) {
int num = this .age - s.age;
int num2 = num == 0 ? this .name.compareTo(s.name) : num;
return num2;
}
}
|
模拟斗地主洗牌和发牌 /* * 模拟斗地主洗牌和发牌 * * 分析: * A:创建一个牌盒 * B:装牌 * C:洗牌 * D:发牌 * E:看牌 */ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 | public class PokerDemo {
public static void main(String[] args) {
// 创建一个牌盒
ArrayList<String> array = new ArrayList<String>();
// 装牌
// 黑桃A,黑桃2,黑桃3,...黑桃K
// 红桃A,...
// 梅花A,...
// 方块A,...
// 定义一个花色数组
String[] colors = { "" , "" , "" , "" };
// 定义一个点数数组
String[] numbers = { "A" , "2" , "3" , "4" , "5" , "6" , "7" , "8" , "9" , "10" ,
"J" , "Q" , "K" };
// 装牌
for (String color : colors) {
for (String number : numbers) {
array.add(color.concat(number));
}
}
array.add( "小王" );
array.add( "大王" );
// 洗牌
Collections.shuffle(array);
// System.out.println("array:" + array);
// 发牌
ArrayList<String> fengQingYang = new ArrayList<String>();
ArrayList<String> linQingXia = new ArrayList<String>();
ArrayList<String> liuYi = new ArrayList<String>();
ArrayList<String> diPai = new ArrayList<String>();
for ( int x = 0 ; x < array.size(); x++) {
if (x >= array.size() - 3 ) {
diPai.add(array.get(x));
} else if (x % 3 == 0 ) {
fengQingYang.add(array.get(x));
} else if (x % 3 == 1 ) {
linQingXia.add(array.get(x));
} else if (x % 3 == 2 ) {
liuYi.add(array.get(x));
}
}
// 看牌
lookPoker( "风清扬" , fengQingYang);
lookPoker( "林青霞" , linQingXia);
lookPoker( "张三" , liuYi);
lookPoker( "底牌" , diPai);
}
public static void lookPoker(String name, ArrayList<String> array) {
System.out.print(name + "的牌是:" );
for (String s : array) {
System.out.print(s + " " );
}
System.out.println();
}
}
|
斗地主增强版本
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 | import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.TreeSet;
/*
* 思路:
* A:创建一个HashMap集合
* B:创建一个ArrayList集合
* C:创建花色数组和点数数组
* D:从0开始往HashMap里面存储编号,并存储对应的牌
* 同时往ArrayList里面存储编号即可。
* E:洗牌(洗的是编号)
* F:发牌(发的也是编号,为了保证编号是排序的,就创建TreeSet集合接收)
* G:看牌(遍历TreeSet集合,获取编号,到HashMap集合找对应的牌)
*/
public class PokerDemo {
public static void main(String[] args) {
// 创建一个HashMap集合
HashMap<Integer, String> hm = new HashMap<Integer, String>();
// 创建一个ArrayList集合
ArrayList<Integer> array = new ArrayList<Integer>();
// 创建花色数组和点数数组
// 定义一个花色数组
String[] colors = { "" , "" , "" , "" };
// 定义一个点数数组
String[] numbers = { "3" , "4" , "5" , "6" , "7" , "8" , "9" , "10" , "J" , "Q" ,
"K" , "A" , "2" , };
// 从0开始往HashMap里面存储编号,并存储对应的牌,同时往ArrayList里面存储编号即可。
int index = 0 ;
for (String number : numbers) {
for (String color : colors) {
String poker = color.concat(number);
hm.put(index, poker);
array.add(index);
index++;
}
}
hm.put(index, "小王" );
array.add(index);
index++;
hm.put(index, "大王" );
array.add(index);
// 洗牌(洗的是编号)
Collections.shuffle(array);
// 发牌(发的也是编号,为了保证编号是排序的,就创建TreeSet集合接收)
TreeSet<Integer> fengQingYang = new TreeSet<Integer>();
TreeSet<Integer> linQingXia = new TreeSet<Integer>();
TreeSet<Integer> liuYi = new TreeSet<Integer>();
TreeSet<Integer> diPai = new TreeSet<Integer>();
for ( int x = 0 ; x < array.size(); x++) {
if (x >= array.size() - 3 ) {
diPai.add(array.get(x));
} else if (x % 3 == 0 ) {
fengQingYang.add(array.get(x));
} else if (x % 3 == 1 ) {
linQingXia.add(array.get(x));
} else if (x % 3 == 2 ) {
liuYi.add(array.get(x));
}
}
// 看牌(遍历TreeSet集合,获取编号,到HashMap集合找对应的牌)
lookPoker( "风清扬" , fengQingYang, hm);
lookPoker( "林青霞" , linQingXia, hm);
lookPoker( "刘意" , liuYi, hm);
lookPoker( "底牌" , diPai, hm);
}
// 写看牌的功能
public static void lookPoker(String name, TreeSet<Integer> ts,
HashMap<Integer, String> hm) {
System.out.print(name + "的牌是:" );
for (Integer key : ts) {
String value = hm.get(key);
System.out.print(value + " " );
}
System.out.println();
}
}
|
总结: 1:Map(掌握) (1)将键映射到值的对象。一个映射不能包含重复的键;每个键最多只能映射到一个值。 (2)Map和Collection的区别? A:Map 存储的是键值对形式的元素,键唯一,值可以重复。夫妻对 B:Collection 存储的是单独出现的元素,子接口Set元素唯一,子接口List元素可重复。光棍 (3)Map接口功能概述(自己补齐) A:添加功能 B:删除功能 C:判断功能 D:获取功能 E:长度功能 (4)Map集合的遍历 A:键找值 a:获取所有键的集合 b:遍历键的集合,得到每一个键 c:根据键到集合中去找值
B:键值对对象找键和值 a:获取所有的键值对对象的集合 b:遍历键值对对象的集合,获取每一个键值对对象 c:根据键值对对象去获取键和值
代码体现: Map<String,String> hm = new HashMap<String,String>();
hm.put("it002","hello"); hm.put("it003","world"); hm.put("it001","java");
//方式1 键找值 Set<String> set = hm.keySet(); for(String key : set) { String value = hm.get(key); System.out.println(key+"---"+value); }
//方式2 键值对对象找键和值 Set<Map.Entry<String,String>> set2 = hm.entrySet(); for(Map.Entry<String,String> me : set2) { String key = me.getKey(); String value = me.getValue(); System.out.println(key+"---"+value); } (5)HashMap集合的练习 A:HashMap<String,String> B:HashMap<Integer,String> C:HashMap<String,Student> D:HashMap<Student,String> (6)TreeMap集合的练习 A:TreeMap<String,String> B:TreeMap<Student,String> (7)案例 A:统计一个字符串中每个字符出现的次数 B:集合的嵌套遍历 a:HashMap嵌套HashMap b:HashMap嵌套ArrayList c:ArrayList嵌套HashMap d:多层嵌套
2:Collections(理解) (1)是针对集合进行操作的工具类 (2)面试题:Collection和Collections的区别 A:Collection 是单列集合的顶层接口,有两个子接口List和Set B:Collections 是针对集合进行操作的工具类,可以对集合进行排序和查找等 (3)常见的几个小方法: A:public static <T> void sort(List<T> list) B:public static <T> int binarySearch(List<?> list,T key) C:public static <T> T max(Collection<?> coll) D:public static void reverse(List<?> list) E:public static void shuffle(List<?> list) (4)案例 A:ArrayList集合存储自定义对象的排序 B:模拟斗地主洗牌和发牌 C:模拟斗地主洗牌和发牌并对牌进行排序
|