传z播客 刘意_2015年Java基础视频笔记(day18~)(2016年3月7日00:25:16)

day18

1.Map引入

Map是区分于Collection的另外一个"老大"

作为学生来说,是根据学号来区分不同的学生的,那么假设我现在已经知道了学生的学号,我要根据学号去获取学生姓名,请问怎么做呢?

如果采用前面讲解过的集合,我们只能把学号和学生姓名作为一个对象的成员,然后存储整个对象,将来遍历的时候,判断,获取对应的名称。

但是呢,如果我都能把学生姓名拿出来了,我还需要根据编号去找吗?

针对我们目前的这种需求:仅仅知道学号,就想知道学生姓名的情况,Java就提供了一种新的集合 Map。

通过查看API,我们知道Map集合的一个最大的特点,就是它可以存储键值对的元素。这个时候存储我们上面的需求,就可以这样做

*         学号1        姓名1

*         学号2     姓名2

*         学号3        姓名3

*         学号2(不行)姓名4

*         学号4               姓名4

Map集合的特点:

*         将键映射到值的对象。一个映射不能包含重复的键;每个键最多只能映射到一个值。

*

* Map集合和Collection集合的区别?

*         Map集合存储元素是成对出现的,Map集合的键是唯一的,值是可重复的。可以把这个理解为:夫妻对

*         Collection集合存储元素是单独出现的,Collection的儿子Set是唯一的,List是可重复的。可以把这个理解为:光棍(11.11)

注意:

*         Map集合的数据结构值针对键有效,跟值无关

*             HashMap,TreeMap等会讲。

*        Collection集合的数据结构是针对元素有效

2. Map集合的功能概述:

* 1:添加功能

*         V put(K key,V value):添加元素。这个其实还有另一个功能?先不告诉你,等会讲

*             如果键是第一次存储,就直接存储元素,返回null

*             如果键不是第一次存在,就用值把以前的值替换掉,返回以前的值

* 2:删除功能

*         void clear():移除所有的键值对元素

*         V remove(Object key):根据键删除键值对元素,并把值返回

* 3:判断功能

*         boolean containsKey(Object key):判断集合是否包含指定的键

*         boolean containsValue(Object value):判断集合是否包含指定的值

*         boolean isEmpty():判断集合是否为空

* 4:获取功能

*         Set<Map.Entry<K,V>> entrySet():???

*         V get(Object key):根据键获取值

*         Set<K> keySet():获取集合中所有键的集合

*         Collection<V> values():获取集合中所有值的集合

* 5:长度功能

*         int size():返回集合中的键值对的对数

import java.util.HashMap;

import java.util.Map;

public class MapDemo {

public static void main(String[] args) {

// 创建集合对象

Map<String, String> map = new HashMap<String, String>();

// 添加元素

// V put(K key,V value):添加元素。这个其实还有另一个功能?先不告诉你,等会讲

// System.out.println("put:" + map.put("文章", "马伊俐"));

// System.out.println("put:" + map.put("文章", "姚笛"));

map.put("邓超", "孙俪");

map.put("黄晓明", "杨颖");

map.put("周杰伦", "蔡依林");

map.put("刘恺威", "杨幂");

// void clear():移除所有的键值对元素

// map.clear();

// V remove(Object key):根据键删除键值对元素,并把值返回

// System.out.println("remove:" + map.remove("黄晓明"));

// System.out.println("remove:" + map.remove("黄晓波"));

// boolean containsKey(Object key):判断集合是否包含指定的键

// System.out.println("containsKey:" + map.containsKey("黄晓明"));

// System.out.println("containsKey:" + map.containsKey("黄晓波"));

// boolean isEmpty():判断集合是否为空

// System.out.println("isEmpty:"+map.isEmpty());

//int size():返回集合中的键值对的对数

System.out.println("size:"+map.size());

// 输出集合名称

System.out.println("map:" + map);

}

}

一些测试

查看put的源码,了解它的返回值为什么是这样

3.Map集合的获取功能测试

import java.util.Collection;

import java.util.HashMap;

import java.util.Map;

import java.util.Set;

/*

* 获取功能:

* V get(Object key):根据键获取值

* Set<K> keySet():获取集合中所有键的集合

* Collection<V> values():获取集合中所有值的集合

*/

public class MapDemo2 {

public static void main(String[] args) {

// 创建集合对象

Map<String, String> map = new HashMap<String, String>();

// 创建元素并添加元素

map.put("邓超", "孙俪");

map.put("黄晓明", "杨颖");

map.put("周杰伦", "蔡依林");

map.put("刘恺威", "杨幂");

// V get(Object key):根据键获取值

System.out.println("get:" + map.get("周杰伦"));

System.out.println("get:" + map.get("周杰")); // 返回null

System.out.println("----------------------");

// Set<K> keySet():获取集合中所有键的集合

Set<String> set = map.keySet();

for (String key : set) {

System.out.println(key);

}

System.out.println("----------------------");

// Collection<V> values():获取集合中所有值的集合

Collection<String> con = map.values();

for (String value : con) {

System.out.println(value);

}

}

}

输出如下

4.Map集合的遍历之键找值

import java.util.HashMap;

import java.util.Map;

import java.util.Set;

/*

* Map集合的遍历。

* Map -- 夫妻对

* 思路:

*         A:把所有的丈夫给集中起来。

*         B:遍历丈夫的集合,获取得到每一个丈夫。

*         C:让丈夫去找自己的妻子。

*

* 思路转换:

*         A:获取所有的键

*         B:遍历键的集合,获取得到每一个键

*         C:根据键去找值

*/

public class MapDemo3 {

public static void main(String[] args) {

// 创建集合对象

Map<String, String> map = new HashMap<String, String>();

// 创建元素并添加到集合

map.put("杨过", "小龙女");

map.put("郭靖", "黄蓉");

map.put("杨康", "穆念慈");

map.put("陈玄风", "梅超风");

// 遍历

// 获取所有的键

Set<String> set = map.keySet();

// 遍历键的集合,获取得到每一个键

for (String key : set) {

// 根据键去找值

String value = map.get(key);

System.out.println(key + "---" + value);

}

}

}

5.Map集合的遍历之键值对对象找键和值

import java.util.HashMap;

import java.util.Map;

import java.util.Set;

/*

* Map集合的遍历。

* Map -- 夫妻对

*

* 思路:

*         A:获取所有结婚证的集合

*         B:遍历结婚证的集合,得到每一个结婚证

*         C:根据结婚证获取丈夫和妻子

*

* 转换:

*         A:获取所有键值对对象的集合

*         B:遍历键值对对象的集合,得到每一个键值对对象

*         C:根据键值对对象获取键和值

*

* 这里面最麻烦的就是键值对对象如何表示呢?

* 看看我们开始的一个方法:

*         Set<Map.Entry<K,V>> entrySet():返回的是键值对对象的集合

*/

public class MapDemo4 {

public static void main(String[] args) {

// 创建集合对象

Map<String, String> map = new HashMap<String, String>();

// 创建元素并添加到集合

map.put("杨过", "小龙女");

map.put("郭靖", "黄蓉");

map.put("杨康", "穆念慈");

map.put("陈玄风", "梅超风");

// 获取所有键值对对象的集合

Set<Map.Entry<String, String>> set = map.entrySet();

// 遍历键值对对象的集合,得到每一个键值对对象

for (Map.Entry<String, String> me : set) {

// 根据键值对对象获取键和值,me相当于

一个结婚证

String key = me.getKey();

String value = me.getValue();

System.out.println(key + "---" + value);

}

}

}

注意一个奇怪的接口

及其方法

6.Map集合遍历的两种方式比较图解

7.一个快速新建包以及新java文件的方法

8.HashMap集合键是Stirng值是String的案例

import java.util.HashMap;

import java.util.Set;

/*

* HashMap:是基于哈希表的Map接口实现。

* 哈希表的作用是用来保证键的唯一性的。

*

* HashMap<String,String>

* 键:String

* 值:String

*/

public class HashMapDemo {

public static void main(String[] args) {

// 创建集合对象

HashMap<String, String> hm = new HashMap<String, String>();

// 创建元素并添加元素

// String key1 = "it001";

// String value1 = "马云";

// hm.put(key1, value1);

hm.put("it001", "马云");

hm.put("it003", "马化腾");

hm.put("it004", "乔布斯");

hm.put("it005", "张朝阳");

hm.put("it002", "裘伯君"); // wps

hm.put("it001", "比尔盖茨");

// 遍历

Set<String> set = hm.keySet();

for (String key : set) {

String value = hm.get(key);

System.out.println(key + "---" + value);

}

}

}

9.HashMap集合键是Integer值是String的案例

import java.util.HashMap;

import java.util.Set;

/*

* HashMap<Integer,String>

* 键:Integer

* 值:String

*/

public class HashMapDemo2 {

public static void main(String[] args) {

// 创建集合对象

HashMap<Integer, String> hm = new HashMap<Integer, String>();

// 创建元素并添加元素

// Integer i = new Integer(27);

// Integer i = 27;//这样也可以的

// String s = "林青霞";

// hm.put(i, s);

hm.put(27, "林青霞");

hm.put(30, "风清扬");

hm.put(28, "刘意");

hm.put(29, "林青霞");

// 下面的写法是八进制,但是不能出现8以上的单个数据

// hm.put(003, "hello");

// hm.put(006, "hello");

// hm.put(007, "hello");

// hm.put(008, "hello");

//003前面的0代表进制是八进制

// 遍历

Set<Integer> set = hm.keySet();

for (Integer key : set) {

String value = hm.get(key);

System.out.println(key + "---" + value);

}

// 下面这种方式仅仅是集合的元素的字符串表示

// System.out.println("hm:" + hm);

}

}

10.HashMap集合键是String值是Student的案例)

import java.util.HashMap;

import java.util.Set;

/*

* HashMap<String,Student>

* 键:String    学号

* 值:Student 学生对象

*/

public class HashMapDemo3 {

public static void main(String[] args) {

// 创建集合对象

HashMap<String, Student> hm = new HashMap<String, Student>();

// 创建学生对象

Student s1 = new Student("周星驰", 58);

Student s2 = new Student("刘德华", 55);

Student s3 = new Student("梁朝伟", 54);

Student s4 = new Student("刘嘉玲", 50);

// 添加元素

hm.put("9527", s1);

hm.put("9522", s2);

hm.put("9524", s3);

hm.put("9529", s4);

// 遍历

Set<String> set = hm.keySet();

for (String key : set) {

// 注意了:这次值不是字符串了

// String value = hm.get(key);

Student value = hm.get(key);

System.out.println(key + "---" + value.getName() + "---"

+ value.getAge());

}

}

}

(Student类就省略了)

11.HashMap集合键是Student值是String的案例

常规思路

HashMapDemo4.java

================================

import java.util.HashMap;

import java.util.Set;

/*

* HashMap<Student,String>

* 键:Student

*         要求:如果两个对象的成员变量值都相同,则为同一个对象。

* 值:String

*/

public class HashMapDemo4 {

public static void main(String[] args) {

// 创建集合对象

HashMap<Student, String> hm = new HashMap<Student, String>();

// 创建学生对象

Student s1 = new Student("貂蝉", 27);

Student s2 = new Student("王昭君", 30);

Student s3 = new Student("西施", 33);

Student s4 = new Student("杨玉环", 35);

Student s5 = new Student("貂蝉", 27);

// 添加元素

hm.put(s1, "8888");

hm.put(s2, "6666");

hm.put(s3, "5555");

hm.put(s4, "7777");

hm.put(s5, "9999");

// 遍历

Set<Student> set = hm.keySet();

for (Student key : set) {

String value = hm.get(key);

System.out.println(key.getName() + "---" + key.getAge() + "---"

+ value);

}

}

}

=============================

但是有问题,貂蝉是相同的Student对象,重复了

回想到存储到Set的Student 并没有重写HashCode以及equals方法,因此

12.LinkedHashMap

LinkedHashMap:是Map接口的哈希表和链接列表实现,具有可预知的迭代顺序。

* 由哈希表保证键的唯一性

* 由链表保证键盘的有序(存储和取出的顺序一致)

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);

}

}

13.TreeMap

TreeMap集合键是String值是String的案例

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);

}

}

}

14.TreeMap集合键是Student值是String的案例(留意,默认Student类并不实现Comparable接口。所以要自己写)

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);

}

}

}

15.统计字符串中每个字符出现的次数案例图解

需求 :"aababcabcdabcde",获取字符串中每一个字母出现的次数要求结果:a(5)b(4)c(3)d(2)e(1)

代码实现

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);

}

}

16.两个个面试题

1:Hashtable和HashMap的区别?

2:List,Set,Map等接口是否都继承子Map接口?

import java.util.Hashtable;

/*

* 1:Hashtable和HashMap的区别?

* Hashtable:线程安全,效率低。不允许null键和null值

* HashMap:线程不安全,效率高。允许null键和null值

* (其实HashMap就是用来替代Hashtable的,就像ArrayList替代vector一样)

* 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);

}

}

17. Collections类

(对应也有Arrays类)

* Collections:是针对集合进行操作的工具类,都是静态方法。

*

* 面试题:

* Collection和Collections的区别?

* Collection:是单列集合的顶层接口,有子接口List和Set。(Map是双列的)

* Collections:是针对集合操作的工具类,有对集合进行排序和二分查找的方法

18.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):随机置换(犹如洗牌,每次运行结果不一样)

19.如果同时有自然排序和比较器排序,以比较器排序为主(也就是说,当同时实现了Student类的自然排序(implements Comparable<Student>)以及

比较器排序的话(new Comparator<Student>()),比较器排序会覆盖自然排序)

以下是同一个包的两个类(共同实现了自然排序以及比较器排序)

Student类

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;

}

}

=================================================

CollectionsDemo 类

import java.util.ArrayList;

import java.util.Collections;

import java.util.Comparator;

import java.util.List;

/*

* Collections可以针对ArrayList存储基本包装类的元素排序,存储自定义对象可不可以排序呢?

*/

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());

}

}

}

附:Collections 的 两种sort方法

20.模拟斗地主洗牌和发牌案例(省略)

注意问题

特殊字符保存问题

未排序版本

import java.util.ArrayList;

import java.util.Collections;

/*

* 模拟斗地主洗牌和发牌

*

* 分析:

*         A:创建一个牌盒

*         B:装牌

*         C:洗牌

*         D:发牌

*         E:看牌

*/

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);//shuffle方法只能是接收list,而不接受set,map

// 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();

}

}

运行示例图

对牌进行排序的思路,代码

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里面存储编号即可。(洗牌只能用list)

*      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();

}

}

对以上代码的解析:为了用Collections的shuffle功能,只能创建ArrayList:

为了实现自动排序,只能选择TreeSet;然后为了有一个对照表,使用了HashMap。

=======================================

时间: 2024-10-22 19:24:05

传z播客 刘意_2015年Java基础视频笔记(day18~)(2016年3月7日00:25:16)的相关文章

传智播客 刘意_2015年Java基础视频-深入浅出精华版 笔记(2015年10月25日23:28:50)

本笔记是个人笔记+摘录笔记相结合,非完全原创 day01 win 7系统打开DOS有趣方法:按住shift+右键,单击“在此处打开命令窗口”(注意:在此处可以是任何的文件夹,不一定是桌面) 用DOS删除的文件不可以在回收站恢复?!! 常用DOS命令d: 回车 盘符切换dir(directory):列出当前目录下的文件以及文件夹md (make directory) : 创建目录(创建文件夹)rd (remove directory): 删除目录(删除文件夹,注意:前提是文件夹必须是空的!!)如果

传智播客 刘意_2015年Java基础视频-深入浅出精华版 笔记(day11~)(2016年2月3日16:01:00)

day11 1.Eclipse的基本使用 编译: 自动编译,在保存的那一刻(ctrl+s)帮你做好了(class文件出现在bin目录下) 2.Hierarchy 显示Java继承层次结构,选中类后F4 3.eclipse行号的显示与隐藏 4.D:字体大小及颜色 a:Java代码区域的字体大小和颜色: window -- Preferences -- General -- Appearance -- Colors And Fonts -- Java修改 -- Java Edit Text Font

传智 刘意 2015年Java基础视频-深入浅出精华版 笔记 day24~(2016年4月15日00:39:59)

day24 1.多线程(JDK5之后的Lock锁的概述和使用) Lock: void lock(): 获取锁. void unlock():释放锁. ReentrantLock是Lock的实现类. Re---entrant---Lock SellTicket类 import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; public class SellTicket implem

传智播客 2015 刘意 Java基础-视频-笔记day27(完结)(2016年5月1日12:42:20)

day27 1.类的加载概述和加载时机 2.类加载器的概述和分类 类加载器 负责将.class文件加载到内存中,并为之生成对应的Class对象. 虽然我们不需要关心类加载机制,但是了解这个机制我们就能更好的理解程序的运行. 类加载器的组成 Bootstrap ClassLoader根类加载器 Extension ClassLoader扩展类加载器 SysetmClassLoader系统类加载器 通过这些描述我们就可以知道我们常用的东西的加载都是由谁来完成的. 到目前为止我们已经知道把class文

传智播客_2015年Java基础视频-深入浅出精华版 笔记(2015年9月14日23:11:11)

本笔记是个人笔记+摘录笔记相结合,非完全原创 day01 win 7系统打开DOS有趣方法:按住shift+右键,单击“在此处打开命令窗口”(注意:在此处可以是任何的文件夹,不一定是桌面) 用DOS删除的文件不可以在回收站恢复?!! 常用DOS命令d: 回车 盘符切换dir(directory):列出当前目录下的文件以及文件夹md (make directory) : 创建目录(创建文件夹)rd (remove directory): 删除目录(删除文件夹,注意:前提是文件夹必须是空的!!)如果

2016最新整理传智播客第15期C,C++基础班就业班全套

推荐优秀课程,毕业就业首选C++培训课程 视频地址:http://blog.sina.com.cn/s/blog_1706603600102wxlb.html 传智播客C++第15期

传智播客C/C++各种开发环境搭建视频工具文档免费教程

传智播客作为中国IT培训的领军品牌,一直把握技术趋势,给大家带来最新的技术分享!传智播客C/C++主流开发环境免费分享视频文档中,就有写一个helloworld程序的示范.火速前来下载吧 所谓"工欲善其事,必先利其器". 欲学C/C++,必先搭建好开发环境,欲成为C/C++高手,必先跑起来helloworld! C/C++ IDE仅仅是工具--剑,C/C++语言就是剑法.欲雄霸天下,必须精通各种剑,精通各路剑法.请大家认真关注http://c.itcast.cn最新技术视频. (有图有

传智播客 2015年 刘意_Java基础视频-深入浅出精华版 笔记(day21~)(2016年3月26日01:10:44)

day21 1.编码表概述和常见编码表 计算机只能识别二进制数据,早期由来是电信号. 为了方便应用计算机,让它可以识别各个国家的文字. 就将各个国家的文字用数字来表示,并一一对应,形成一张表. ASCII:美国标准信息交换码. 用一个字节的7位可以表示. ISO8859-1:拉丁码表.欧洲码表 用一个字节的8位表示. GB2312:中国的中文编码表. GBK:中国的中文编码表升级,融合了更多的中文文字符号. GB18030:GBK的取代版本 BIG-5码 :通行于台湾.香港地区的一个繁体字编码方

传智播客_2015年Java基础视频-深入浅出精华版 个人笔记(2015年8月30日12:57:35)

day01 win 7系统打开DOS有趣方法:按住shift+右键,单击“在此处打开命令窗口”(注意:在此处可以是任何的文件夹,不一定是桌面) 用DOS删除的文件不可以在回收站恢复?!! 常用DOS命令d: 回车 盘符切换dir(directory):列出当前目录下的文件以及文件夹md (make directory) : 创建目录(创建文件夹)rd (remove directory): 删除目录(删除文件夹,注意:前提是文件夹必须是空的!!)如果想删除不是空的文件夹(比如删除aaaaa文件夹