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