day18_Map类和Collections类

------------------------------------day18 总结----------------------------------------
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 void sort(List list)
B:public static int binarySearch(List<?> list,T key)
C:public static T max(Collection<?> coll)
D:public static void reverse(List<?> list)
E:public static void shuffle(List<?> list)
(4)案例
A:ArrayList集合存储自定义对象的排序
B:模拟斗地主洗牌和发牌
C:模拟斗地主洗牌和发牌并对牌进行排序

------------------------------------知识点1----------------------------------------
package cn.itcast_01;

import java.util.HashMap;
import java.util.Map;

/*

  • 需求:作为学生来说,根据学号进行区分,可以根据学号去获取学生姓名,请问如何做?

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

  • 学号1 姓名1

  • 学号2 姓名2

  • 学号3 姓名3

  • Map集合的特点:

  •  将键映射到值的对象。一个映射不能包含重复的键;每个键最多只能映射到一个值
    
  • Map集合和Collection集合的区别?

  •  Map集合存储元素是成对出现的,Map集合的键是唯一的,值可以是重复的
    
  •  Collection集合存储元素,Collection的子类Set是惟一的,List是可重复的
    
  • Map接口和Collection接口的不同
    Map是双列的,Collection是单列的
    Map的键唯一,Collection的子体系Set是唯一的
    Map集合的数据结构值针对键有效,跟值无关
    Collection集合的数据结构是针对元素有效

  • Map集合的功能:

  •  1.添加功能
    
  •  	V put(K key, V value):添加元素
    
  •  		如果键是第一次存储,就直接存储元素,返回null
    
  •  		如果键不是第一次存在,就用值把以前的值替换,返回以前的值
    
  •  2.删除功能
    
  •  	void clear():移除所有的键值对元素
    
  •  	V remove(Object key):根据键删除键值对元素,并返回key的关联值
    
  •  3.判断功能
    
  •  	boolean containsKey(Object key):判断集合是否包含指定的键
    
  •  	boolean containsValue(Object value):判断集合是否包含指定的值
    
  •  	boolean isEmpty():判断集合是否为空
    
  •  4.获取功能
    
  •  	Set<Map.Entry<K,V>> entrySet():
    
  •  	V get(Object key):返回指定键所映射的值;如果此映射不包含该键的映射关系,则返回 null。
    
  •  	Set<K> keySet():获取集合中所有键的集合
    
  •  	Collection<V> values():获取集合中所有值的集合
    
  •  5.长度功能
    
  •  	int size():返回集合中键值对的对数
    
  • */
    public class MapDemo {
    public static void main(String[] args) {
    Map<String,String> map = new HashMap<String,String>();

     // 添加元素
    // System.out.println("put:"+map.put("文章", "马伊琍"));
    //  System.out.println("put:"+map.put("文章", "姚笛"));
     
     map.put("邓超", "孙俪");
     map.put("黄晓明", "杨颖");
     map.put("周杰伦", "昆凌");
     
     // void clear():移除所有的键值对元素
     //map.clear();
     
     // V remove(Object key):根据键删除键值对元素,并返回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);
    

    }
    }
    ------------------------------------知识点2----------------------------------------
    package cn.itcast_01;

import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;

/*

  • 4.获取功能

  •  	V get(Object key):返回指定键所映射的值;如果此映射不包含该键的映射关系,则返回 null。
    
  •  	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("周杰伦", "昆凌");
     
     // V get(Object key):返回指定键所映射的值;如果此映射不包含该键的映射关系,则返回 null。
     System.out.println("get:"+map.get("邓超"));
     System.out.println("get:"+map.get("邓超1")); // 如果不包含,则返回null
     System.out.println("--------------------");
     
     // Set<K> keySet():获取集合中所有键的集合
     Set<String> s = map.keySet();
     System.out.println("keySet:"+s);
     // 增强for遍历
     for(String ss:s){
     	System.out.println(ss);
     }
     System.out.println("--------------------");
     
     // Collection<V> values():获取集合中所有值的集合
     Collection<String> c = map.values();;
     System.out.println("values:"+c);
     
     for(String sss:c){
     	System.out.println(sss);
     }
    

    }
    }

------------------------------------知识点3----------------------------------------
package cn.itcast_01;

import java.util.HashMap;
import java.util.Map;
import java.util.Set;

/*

  • 遍历Map集合

  • Map-- 夫妻对

  • 思路:

  •  1.将所有的键集合起来
    
  •  2.遍历集合,获取每个键
    
  •  3.让每个键去找自己对应的值
    
  • */
    public class MapDemo3 {
    public static void main(String[] args) {
    // 创建集合并添加元素
    Map <String,String> map = new HashMap<String,String>();

     map.put("邓超", "孙俪");
     map.put("黄晓明", "杨颖");
     map.put("周杰伦", "昆凌");
     
     Set<String> s = map.keySet();
     // 遍历集合
     for(String key :s){
     	System.out.println(key+"---"+map.get(key));
     }
    

    }
    }
    ------------------------------------知识点4----------------------------------------
    package cn.itcast_01;

import java.util.HashMap;
import java.util.Map;
import java.util.Set;

/*

  • 遍历Map集合

  • Map-- 夫妻对

  • 思路:

  •  1.获取所有键值对对象的集合
    
  •  2.遍历集合,获取每个键值对象
    
  •  3.根据键值对象获取键和值
    
  • 方法:

  •  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("周杰伦", "昆凌");
     
     // Set<Map.Entry<K,V>> entrySet():返回的是键值对对象的集合
     Set<Map.Entry<String,String>> set = map.entrySet();
     
     for(Map.Entry<String,String> ms:set){
     	String key = ms.getKey();
     	String value =ms.getValue();
     	System.out.println(ms);
     	System.out.println(key+"---"+value);
     }
    

    }
    }
    ------------------------------------知识点5----------------------------------------
    package cn.itcast_02;

import java.util.HashMap;
import java.util.Set;

/*

  • HashMap<Integer,String>

  • 键:Integer

  • 值:String

  • */
    public class HashDemo2 {
    public static void main(String[] args) {
    // 创建集合对象
    HashMap<Integer,String> hm = new HashMap<>();

     // 添加元素
     Integer i = new Integer(27);
     String s = "林青霞";
     hm.put(i, s);
     
     hm.put(35, "李白");
     hm.put(42, "杜甫");
     hm.put(65, "王安石");
     
     // 0开头表示的是八进制数,数字不能超过8
    

// hm.put(004, “hello”);
// hm.put(005, “hello”);
// hm.put(007, “hello”);
// hm.put(008, “hello”);

	// 遍历集合
	Set<Integer> set = hm.keySet();
	for(Integer ii:set){
		String vaule= hm.get(ii);
		System.out.println(ii+"---"+vaule);
	}
	
	// 下面表示的仅仅是元素的字符串拼接,不是遍历
	//System.out.println("hm"+hm);
	
	
}

}
------------------------------------知识点6----------------------------------------
package cn.itcast_02;

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

     hm.put("it002", "孙俪");
     hm.put("it001", "杨颖");
     hm.put("it003", "昆凌");
     hm.put("it004", "马云");
     hm.put("it001", "雷军");
     
     // 遍历
     Set<String> set = hm.keySet();
     for(String s:set){
     	String value = hm.get(s);
     	System.out.println(s+"---"+value);
     }
    

    }
    }
    ------------------------------------知识点7----------------------------------------
    package cn.itcast_02;

import java.util.HashMap;
import java.util.Set;

/*

  • HashMap<String,Student>

  • */
    public class HashMapDemo3 {
    public static void main(String[] args) {
    // 创建集合对象
    HashMap<String,Student> hm = new HashMap<String,Student>();

     // 创建学生类对象
     Student s1 = new Student("唐僧",12);
     Student s2 = new Student("孙悟空",600);
     Student s3 = new Student("猪八戒",543);
     Student s4 = new Student("沙僧",323);
     Student s5 = new Student("白龙马",342);
     
     //添加对象到集合
     hm.put("it001", s1);
     hm.put("it002", s2);
     hm.put("it003", s3);
     hm.put("it004", s4);
     hm.put("it005", s5);
     
     // 遍历集合
     Set<String> set = hm.keySet();
     for(String key:set){
     	Student value = hm.get(key);
     	System.out.println(key+"---"+value.getName()+"---"+value.getAge());
     }
    

    }
    }
    ------------------------------------知识点8----------------------------------------
    package cn.itcast_02;

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 s1 = new Student("唐僧",12);
     Student s2 = new Student("孙悟空",600);
     Student s3 = new Student("猪八戒",543);
     Student s4 = new Student("沙僧",323);
     Student s5 = new Student("白龙马",342);
     Student s6 = new Student("白龙马",342);
     
     // 添加元素
     hm.put(s1, "9527");
     hm.put(s2, "9528");
     hm.put(s3, "9529");
     hm.put(s4, "9526");
     hm.put(s5, "9525");
     hm.put(s6, "9524");
     
     // 遍历
     Set<Student> set = hm.keySet();
     for(Student key:set){
     	String value = hm.get(key);
     	System.out.println(key.getName()+"--"+key.getAge()
     	                   +"--"+value);
     }
    

    }
    }
    ------------------------------------知识点9----------------------------------------
    package cn.itcast_03;

import java.util.LinkedHashMap;
import java.util.Set;

/*

  • LinkedHashMap<K,V>:

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

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

  • 由链表保证键的有序性。(有序性是指存储和取出的顺序一致)

  • */
    public class LinkedHashMapDemo {
    public static void main(String[] args) {
    // 创建集合对象
    LinkedHashMap<String,String> lhm = new LinkedHashMap<>();

     // 添加元素
     lhm.put("001", "hello");
     lhm.put("003", "java");
     lhm.put("002", "world");
     lhm.put("004", "javaee");
     
     // 遍历
     Set<String> set = lhm.keySet();
     for(String key:set){
     	String value = lhm.get(key);
     	System.out.println(key+"--"+value);
     }
    

    }
    }
    ------------------------------------知识点10----------------------------------------
    package cn.itcast_04;

import java.util.Set;
import java.util.TreeMap;

/*

  • TreeMap:是基于红黑数的Map接口的实现。

  • TreeMap<String,String>

  • 键:String

  • 值:String

  • */
    public class TreeMapDemo {
    public static void main(String[] args) {
    // 创建集合对象
    TreeMap<String,String> tm = new TreeMap<>();

     // 添加对象元素
     tm.put("tangseng", "唐僧");
     tm.put("sunwukong", "孙悟空");
     tm.put("bajie", "猪八戒");
     tm.put("shaseng", "沙悟净");
     tm.put("bailongma","白龙马");
     tm.put("bailongma","白龙马2");
     tm.put("bajie", "猪八戒");
     
     Set<String> set = tm.keySet();
     for(String key:set){
     	String value = tm.get(key);
     	System.out.println(key+"---"+value);
     }
    

    }
    }

package cn.itcast_04;

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<>(new Comparator() {

     	@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("唐僧",12);
     Student s2 = new Student("孙悟空",600);
     Student s3 = new Student("猪八戒",543);
     Student s4 = new Student("沙僧",323);
     Student s5 = new Student("白龙马",342);
     Student s6 = new Student("白龙马",342);
     
     // 添加元素
     tm.put(s1, "tangseng");
     tm.put(s2, "sunwukong");
     tm.put(s3, "zhubajie");
     tm.put(s4, "shaseng");
     tm.put(s5, "bailongma");
     tm.put(s6, "白龙马");
     
     Set<Student> set = tm.keySet();
     for(Student key:set){
     	String value = tm.get(key);
     	System.out.println(key.getName()+"---"+key.getAge()+"---"+value);
     }
    

    }
    }
    ------------------------------------知识点11----------------------------------------
    package cn.itcast_05;

import java.util.Scanner;
import java.util.Set;
import java.util.TreeMap;

/*

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

  • */
    public class TreeMapDemo {
    public static void main(String[] args) {
    // 定义集合对象
    TreeMap<Character,Integer> tm = new TreeMap<>();

     // 键盘录入字符串
     Scanner sc = new Scanner(System.in);
     System.out.println("请输入一个字符串:");
     String s = sc.nextLine();
     
     // 将字符串转化为字符数组
     char [] arr = s.toCharArray();
     
     // 遍历数组
     //int count =1;
     for(char key:arr){
     	Integer vaule = tm.get(key);
     	if(vaule==null){
     		tm.put(key, 1);
     	}else {
     		//count++;
     		tm.put(key, vaule+1);
     	}
     }
     
     // 遍历输出集合 方式1 采用输出拼接
     Set<Character> set = tm.keySet();
     for(Character key:set){
     	Integer value = tm.get(key);
     	System.out.print(key+"("+value+")");
     }
     System.out.println();
     System.out.println("----------------------");
     
     // 遍历输出集合  方式2   采用字符串缓冲区拼接
     StringBuilder sb = new StringBuilder();
     for(Character key:set){
     	sb.append(key);
     	sb.append("(");
     	sb.append(tm.get(key));
     	sb.append(")");
     }
     System.out.println(sb);
    

    }
    }
    ------------------------------------知识点12----------------------------------------
    package cn.itcast_05;

import java.util.HashMap;
import java.util.Set;

/*

  • HashMap嵌套HashMap

  • 传智播客

  •  jc  基础班
    
  •  	  张三    20
    
  •  	  李四   22
    
  •  jy   就业班
    
  •  	 王五  23
    
  •  	 孙六  24
    
  • */
    public class HashMapDemo2 {
    public static void main(String[] args) {
    // 创建外部集合对象
    HashMap<String,HashMap<String,Integer>> hm = new HashMap<String,HashMap<String,Integer>>();

     // 创建内部集合对象
     HashMap<String,Integer> jc = new HashMap<String,Integer>();
     HashMap<String,Integer> jy = new HashMap<String,Integer>();
     
     // 内部集合添加元素
     jc.put("张三", 20);
     jc.put("李四", 22);
     jy.put("王五", 23);
     jy.put("孙六", 24);
     
     // 外部集合添加元素
     hm.put("基础班", jc);
     hm.put("就业班", jy);
     
     // 循环遍历输出
     // 外部集合遍历
     Set<String> set = hm.keySet();
     for(String key:set){
     	HashMap<String,Integer> value = hm.get(key);
     	// 内部集合遍历
     	Set<String> set2 = value.keySet();
     	for(String key2:set2){
     		Integer value2 = value.get(key2);
     		System.out.println(key+"---"+key2+"---"+value2);
     	}
     }
    

    }
    }
    ------------------------------------知识点13----------------------------------------
    package cn.itcast_05;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Set;

/*

  • HashMap嵌套ArrayList

  • 需求:

  • 假设HashMap集合的元素是ArrayList:有3个

  • 每一个ArrayList集合的值是字符串

  • 结果:

  •  三国演义
    
  •  	吕布
    
  •  	周瑜
    
  •  笑傲江湖
    
  •  	令狐冲
    
  •  	林平之
    
  •  神雕侠侣
    
  •  	郭靖
    
  •  	黄蓉
    
  • */
    public class HashMapDemo3 {
    public static void main(String[] args) {
    // 创建外部集合
    HashMap<String,ArrayList> hm = new HashMap<String,ArrayList>();

     // 创建内部集合
     // 三国演义集合
     ArrayList<String> sg = new ArrayList<>();
     // 笑傲江湖集合
     ArrayList<String> xa = new ArrayList<>();
     // 神雕侠侣集合
     ArrayList<String> sd = new ArrayList<>();
     
     // 内部集合添加元素
     sg.add("吕布");
     sg.add("周瑜");
     xa.add("令狐冲");
     xa.add("林平之");
     sd.add("郭靖");
     sd.add("黄蓉");
     
     // 外部集合添加元素
     hm.put("三国演义", sg);
     hm.put("笑傲江湖", xa);
     hm.put("神雕侠侣", sd);
     
     // 循环遍历
     Set<String> set = hm.keySet();
     for(String key:set){
     	ArrayList<String> al = hm.get(key);
     	System.out.println(key);
     	for(String s:al){
     		System.out.println("      "+s);
     	}
     }
    

    }
    }
    ------------------------------------知识点14----------------------------------------
    package cn.itcast_05;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Set;

/*

  • ArrayList嵌套HashMap

  • 结果显示为:

  • 周瑜–小乔

  • 吕布–貂蝉

  • 郭靖–黄蓉

  • 杨过–小龙女

  • 令狐冲–任盈盈

  • 林平之–岳灵姗

  • */
    public class HashMapDemo4 {
    public static void main(String[] args) {
    // 定义ArrayList集合
    ArrayList<HashMap<String,String>> list = new ArrayList<HashMap<String,String>>();

     // 创建内部集合
     HashMap<String,String> hm1 = new HashMap<String,String>();
     hm1.put("周瑜", "小乔");
     hm1.put("吕布", "貂蝉");
     
     HashMap<String,String> hm2 = new HashMap<String,String>();
     hm2.put("郭靖", "黄蓉");
     hm2.put("杨过", "小龙女");
     
     HashMap<String,String> hm3 = new HashMap<String,String>();
     hm3.put("令狐冲", "任盈盈");
     hm3.put("林平之", "岳灵珊");
     
     // ArrayList集合添加元素
     list.add(hm1);
     list.add(hm2);
     list.add(hm3);
     
     // 遍历输出集合
     for(HashMap<String,String> hm:list){
     	Set<String> set = hm.keySet();
     	for(String key:set){
     		String value = hm.get(key);
     		System.out.println(key+"---"+value);
     	}
     	System.out.println();
     }
    

    }
    }
    ------------------------------------知识点15----------------------------------------
    package cn.itcast_05;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Set;

/*

  • HashMap嵌套HashMap嵌套HashMap(三层嵌套)

  •  要求存储学生类
    
  • 传智播客:

  •  bj  北京校区  
    
  •  		基础班
    
  •  			刘备  23
    
  •  			关羽  34
    
  •  		就业班
    
  •  			周瑜  34
    
  •  			小乔   27
    
  •  sh  上海校区
    
  •  		基础班
    
  •  			张飞  32
    
  •  			赵云  32
    
  •  		就业班
    
  •  			曹操  42
    
  •  			司马懿  45
    
  •  gz  广州校区
    
  •  		基础班
    
  •  			吕布  32
    
  •  			董卓  45
    
  •  		就业班
    
  •  			黄忠   54
    
  •  			马超   33
    
  • */
    public class HashMapDemo5 {
    public static void main(String[] args) {
    // 创建大集合
    HashMap<String,HashMap<String,ArrayList>> hm = new HashMap<String,HashMap<String,ArrayList>> ();

     	// 北京校区
     	HashMap<String,ArrayList<Student>> bj = new HashMap<String,ArrayList<Student>>();
     	ArrayList<Student> array1 = new ArrayList<Student>();
     	ArrayList<Student> array2 = new ArrayList<Student>();
     	Student s1 = new Student("刘备",23);
     	Student s2 = new Student("关羽",34);
     	Student s3 = new Student("周瑜",34);
     	Student s4 = new Student("小乔",27);
     	array1.add(s1);
     	array1.add(s2);
     	array2.add(s3);
     	array2.add(s4);
     	bj.put("基础班", array1);
     	bj.put("就业班", array2);
     	hm.put("北京校区", bj);
     	
     	// 上海校区
     	HashMap<String,ArrayList<Student>> sh = new HashMap<String,ArrayList<Student>>();
     	ArrayList<Student> array3 = new ArrayList<Student>();
     	ArrayList<Student> array4 = new ArrayList<Student>();
     	Student s5 = new Student("张飞",32);
     	Student s6 = new Student("赵云",32);
     	Student s7 = new Student("曹操",42);
     	Student s8 = new Student("司马懿",45);
     	array3.add(s5);
     	array3.add(s6);
     	array4.add(s7);
     	array4.add(s8);
     	sh.put("基础班", array3);
     	sh.put("就业班", array4);
     	hm.put("上海校区", sh);
     	
    
     	// 广州校区
     	HashMap<String,ArrayList<Student>> gz = new HashMap<String,ArrayList<Student>>();
     	ArrayList<Student> array5 = new ArrayList<Student>();
     	ArrayList<Student> array6 = new ArrayList<Student>();
     	Student s9 = new Student("吕布",32);
     	Student s10 = new Student("董卓",45);
     	Student s11 = new Student("黄忠",54);
     	Student s12 = new Student("马超",33);
     	array5.add(s9);
     	array5.add(s10);
     	array6.add(s11);
     	array6.add(s12);
     	gz.put("基础班", array5);
     	gz.put("就业班", array6);
     	hm.put("广州校区", gz);
     	
     	// 遍历集合
     	Set<String> set = hm.keySet();
     	for(String key1:set){
     		HashMap<String,ArrayList<Student>> value = hm.get(key1);
     		System.out.println(key1);
     		Set<String> setvalue = value.keySet();
     		for(String key2:setvalue){
     			ArrayList<Student> sdt = value.get(key2);
     			//System.out.println();
     			System.out.println("    "+key2);
     			for(Student ss:sdt){
     				System.out.println("\t"+ss.getName()+"\t"+ss.getAge());
     			}
     		}
     		System.out.println();
     	}
     	
     }
    

}
------------------------------------知识点16----------------------------------------
package cn.itcast_06;

import java.util.HashMap;
import java.util.Hashtable;

/*

  • Hashtable和HashMap的区别:

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

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

  • List,Set,Map等接口是否都继承Map接口的子类接口

  • List,Set:继承自Collection接口

  • Map接口本身就是一个顶层接口。

  • */
    public class HashtableDemo {
    public static void main(String[] args) {
    HashMap<String,String> hm = new HashMap<String,String>();

     hm.put("it001", "hello");
     hm.put(null, "world");
     hm.put("javaee", null);
     System.out.println(hm);
     
     Hashtable<String,String> ht = new Hashtable<String,String>();
     ht.put("it001", "hello");
     //ht.put(null, "world");  NullPointerException
     //ht.put("javaee", null);  NullPointerException
     System.out.println(ht);
    

    }
    }
    ------------------------------------知识点17----------------------------------------
    package cn.itcast_01;

import java.util.ArrayList;
import java.util.Collections;
import java.util.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):随机置换
    
  • */
    public class CollectionsDemo {
    public static void main(String[] args) {
    List list = new ArrayList();

     list.add(50);
     list.add(32);
     list.add(45);
     list.add(18);
     list.add(34);
     
     System.out.println(list);
     
     // public static <T> void sort(List<T> list):排序默认情况下是自然排序
     Collections.sort(list);
     System.out.println(list);
     
     // public static <T> int binarySearch(List<?> list,T key):二分查找
     System.out.println("binarySearch:"+Collections.binarySearch(list, 18));
     System.out.println("binarySearch:"+Collections.binarySearch(list, 30));
     
     // public static <T> T max(Collection<?> coll):最大值
     System.out.println(Collections.max(list));
     
     // 	public static void reverse(List<?> list):反转
     //System.out.println("反转前:"+list);
     //Collections.reverse(list);
     //System.out.println("反转后:"+list);
     
     // public static void shuffle(List<?> list):随机置换
     Collections.shuffle(list);
     System.out.println(list);
    

    }
    }
    ------------------------------------知识点18----------------------------------------
    package cn.itcast_02;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

/*

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

  • */
    public class CollectionsDemo {
    public static void main(String[] args) {
    // 创建集合对象
    List list = new ArrayList();

     // 创建学生类对象
     Student s1 = new Student("林青霞",23);
     Student s2 = new Student("刘德华",26);
     Student s3 = new Student("范冰冰",33);
     Student s4 = new Student("林青霞",27);
     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() {
// @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;
// }
//
// });

	// 遍历集合
	for(Student s:list){
		System.out.println(s.getName()+"---"+s.getAge());
	}
	
}

}
------------------------------------知识点19----------------------------------------
package cn.itcast_03;

import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.Set;

/*

  • 模拟斗地主洗牌和发牌

  • 分析:

  • 1.创建一个牌盒

  • 2.装牌

  • 3.洗牌

  • 4.发牌

  • 5.看牌

  • 程序运行结果:
    关羽
    [JOKER, ❤Q, ♣Q, ❤10, ❤3, ♠7, ❤J, joker, ♣5, ♣8, ❤K, ♦4, ❤4, ♣9, ♠8, ♠A, ♦2]
    张飞
    [♠5, ♦9, ♦5, ♠9, ❤5, ❤6, ♣7, ♣2, ♣6, ♠Q, ❤A, ♠4, ♠3, ♦J, ♦3, ♦10, ♠2]
    刘备
    [♦8, ♠K, ♣3, ♣10, ♠6, ♦A, ♦6, ♣A, ♦Q, ♠J, ❤7, ♣J, ❤2, ❤9, ♠10, ♣K, ❤8]
    底牌
    [♦K, ♣4, ♦7]

  • */
    public class PokerDemo {
    public static void main(String[] args) {
    // 创建一个牌盒
    ArrayList poker = new ArrayList<>();
    // 创建牌花色
    ArrayList array1 = new ArrayList();
    array1.add(“♠”);
    array1.add(“❤”);
    array1.add(“♣”);
    array1.add(“♦”);

     // 创建牌号
     ArrayList<String> array2 = new ArrayList<>();
     array2.add("A");
     array2.add("2");
     array2.add("3");
     array2.add("4");
     array2.add("5");
     array2.add("6");
     array2.add("7");
     array2.add("8");
     array2.add("9");
     array2.add("10");
     array2.add("J");
     array2.add("Q");
     array2.add("K");
     
     // 牌盒添加牌
     for(String s:array1){
     	for(String ss:array2){
     		String sss =s.concat(ss);
     		poker.add(sss);
     	}
     }
     
     // 添加大小王
     poker.add("JOKER");
     poker.add("joker");
     
     // 洗牌
     Collections.shuffle(poker);
     
     // 创建玩家
     HashMap<String,ArrayList<String>> hm = new HashMap<String,ArrayList<String>>();
     
     ArrayList<String> liubei = new ArrayList<String>();
     ArrayList<String> guanyu= new ArrayList<String>();
     ArrayList<String> zhangfei = new ArrayList<String>();
     
     // 发牌
     // 创建底牌
     ArrayList<String> dipai = new ArrayList<>();
     for(int x=0;x<poker.size();x++){
     	if(x>=51){
     		dipai.add(poker.get(x));
     	}else{
     		if((x+1)%3==1){
     			liubei.add(poker.get(x));
     		}else if((x+1)%3==2){
     			guanyu.add(poker.get(x));
     		}else{
     			zhangfei.add(poker.get(x));
     		}
     	}
     }
     hm.put("刘备", liubei);
     hm.put("关羽", guanyu );
     hm.put("张飞", zhangfei);
     
     // 看牌
     Set<String> set = hm.keySet();
     for(String key:set){
     	ArrayList<String> value = hm.get(key);
     	System.out.println(key);
     	System.out.println(value);
     }
     System.out.println("底牌");
     System.out.println(dipai);
    

    }
    }
    ------------------------------------知识点20----------------------------------------
    package cn.itcast_03;

import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.Set;
import java.util.TreeMap;

/*

  • 改进版斗地主
  • 改进前程序运行结果:
  • 关羽
    [JOKER, ❤Q, ♣Q, ❤10, ❤3, ♠7, ❤J, joker, ♣5, ♣8, ❤K, ♦4, ❤4, ♣9, ♠8, ♠A, ♦2]
    张飞
    [♠5, ♦9, ♦5, ♠9, ❤5, ❤6, ♣7, ♣2, ♣6, ♠Q, ❤A, ♠4, ♠3, ♦J, ♦3, ♦10, ♠2]
    刘备
    [♦8, ♠K, ♣3, ♣10, ♠6, ♦A, ♦6, ♣A, ♦Q, ♠J, ❤7, ♣J, ❤2, ❤9, ♠10, ♣K, ❤8]
    底牌
    [♦K, ♣4, ♦7]
缺陷:玩家手中的牌,没有排序

斗地主游戏新思路
1.定义一个HashMap集合hm,里面按大小存储54张牌
      键:0-53
      值:3-JOKER
2.定义一个ArrayList<Integer>:0-53
3.洗牌
	将ArrayList集合打乱,每位玩家获取14个编号
4.发牌
	创建三个玩家  HashMap<String,TreeMap<Integer,String>>
5.看牌
  • */
    public class PokerDemo2 {
    public static void main(String[] args) {
    // 创建存储所有牌的集合
    ArrayList poker = new ArrayList();

     ArrayList<String> array1 = new ArrayList<String>();
     
     // 牌的花色,从小到大排序
     array1.add("♦");
     array1.add("♣");
     array1.add("❤");
     array1.add("♠");
     
     // 创建牌号,从小到大
     ArrayList<String> array2 = new ArrayList<>();
     array2.add("3");
     array2.add("4");
     array2.add("5");
     array2.add("6");
     array2.add("7");
     array2.add("8");
     array2.add("9");
     array2.add("10");
     array2.add("J");
     array2.add("Q");
     array2.add("K");
     array2.add("A");
     array2.add("2");
     
     // 牌盒添加牌
     for(String s:array2){
     	for(String ss:array1){
     		String sss =s.concat(ss);
     		poker.add(sss);
     	}
     }
     
     // 添加大小王
     poker.add("joker");
     poker.add("JOKER");
     
     		
     
     /* 创建所有牌的排序表(HashMap表)
      0-----♦3
      1-----♣3
      .
      .
      .
      52-----joker
      53-----JOKER
     */
     
     // 创建HashMap集合对象
     HashMap<Integer,String> hm = new HashMap<Integer,String> ();
     for(int x=0;x<54;x++){
     	hm.put(x, poker.get(x));
     }
     
     // 洗牌
     ArrayList<Integer> list = new ArrayList<Integer>();
     for(int x=0;x<54;x++){
     	list.add(x);
     }
     // 打乱顺序
     Collections.shuffle(list);
    

// System.out.println(list);
// System.out.println(list.get(0));
// 发牌
// 创建三个玩家
HashMap<String,TreeMap<Integer,String>> hm_player=new HashMap<String,TreeMap<Integer,String>>();

	// 第一位玩家收牌
	TreeMap<Integer,String> player1 = new TreeMap<Integer,String>();
	for(int x=0;x<17;x++){
		player1.put(list.get(x), hm.get(list.get(x)));
	}
	
	// 第二位玩家收牌
	TreeMap<Integer,String> player2 = new TreeMap<Integer,String>();
	for(int x=17;x<34;x++){
		player2.put(list.get(x), hm.get(list.get(x)));
	}
			
	// 第三位玩家收牌
	TreeMap<Integer,String> player3 = new TreeMap<Integer,String>();
	for(int x=34;x<51;x++){
		player3.put(list.get(x), hm.get(list.get(x)));
	}
	
	hm_player.put("刘备", player1);
	hm_player.put("关羽", player2);
	hm_player.put("张飞", player3);
	
	// 底牌
	ArrayList<String> dipai =new ArrayList<String>();
	dipai.add(hm.get(list.get(51)));
	dipai.add(hm.get(list.get(52)));
	dipai.add(hm.get(list.get(53)));
	
	// 看牌
	Set<String> set = hm_player.keySet();
	for(String key:set){
		System.out.println(key+":");
		TreeMap<Integer,String> value = hm_player.get(key);
		Set<Integer> value_set = value.keySet();
		for(Integer i:value_set){
			System.out.print(value.get(i)+"\t");
		}
		System.out.println();
	}
	System.out.println("底牌:");
	for(String s:dipai){
		System.out.print(s+"\t");
	}

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值