Map集合、HashMap集合、LinkedHashMap集合、Hashtable集合、Collections工具类和模拟斗地主洗牌和发牌

1、Map集合概述和特点

  * A:Map接口概述
     * 查看API可以知道:

     * 将键映射到值的对象

     * 一个映射不能包含重复的键

     * 每个键最多只能映射到一个值

  * B:Map接口和Collection接口的不同

     * Map是双列的,Collection是单列的

     * Map的键唯一,Collection的子体系Set是唯一的

     * Map集合的数据结构值针对键有效,跟值无关;Collection集合的数据结构是针对元素有效

2、Map集合的功能概述

  * A:Map集合的功能概述

   * a:添加功能

  * V put(K key,V value):添加元素。

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

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

   * b:删除功能

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

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

   * c:判断功能

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

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

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

  * d:获取功能

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

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

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

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

  * e:长度功能

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

3、Map集合的遍历之键找值

  * A:键找值思路:

  * 获取所有键的集合

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

  * 根据键找值

  * B:案例演示

   * Map集合的遍历之键找值

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

hm.put("张三", 23);

hm.put("李四", 24);

hm.put("王五", 25);

hm.put("赵六", 26);

/*Set<String> keySet = hm.keySet();            //获取集合中所有的键

Iterator<String> it = keySet.iterator();    //获取迭代器

while(it.hasNext()) {                        //判断单列集合中是否有元素

String key = it.next();                    //获取集合中的每一个元素,其实就是双列集合中的键

Integer value = hm.get(key);            //根据键获取值

System.out.println(key + "=" + value);    //打印键值对

}*/

for(String key : hm.keySet()) {                //增强for循环迭代双列集合第一种方式

System.out.println(key + "=" + hm.get(key));

}

4、Map集合的遍历之键值对对象找键和值

  * A:键值对对象找键和值思路:

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

   * 遍历键值对对象的集合,获取到每一个键值对对象

  * 根据键值对对象找键和值

  * B:案例演示

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

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

hm.put("张三", 23);

hm.put("李四", 24);

hm.put("王五", 25);

hm.put("赵六", 26);

/*Set<Map.Entry<String, Integer>> entrySet = hm.entrySet();    //获取所有的键值对象的集合

Iterator<Entry<String, Integer>> it = entrySet.iterator();//获取迭代器

while(it.hasNext()) {

Entry<String, Integer> en = it.next();                //获取键值对对象

String key = en.getKey();                                //根据键值对对象获取键

Integer value = en.getValue();                            //根据键值对对象获取值

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

}*/

for(Entry<String,Integer> en : hm.entrySet()) {

System.out.println(en.getKey() + "=" + en.getValue());

}

5、LinkedHashMap的概述和使用

  * A:案例演示

  * LinkedHashMap的特点

  * 底层是链表实现的可以保证怎么存就怎么取

6、统计字符串中每个字符出现的次数

  * A:案例演示

  * 需求:统计字符串中每个字符出现的次数

String str = "aaaabbbcccccccccc";

char[] arr = str.toCharArray();                        //将字符串转换成字符数组

HashMap<Character, Integer> hm = new HashMap<>();    //创建双列集合存储键和值

for(char c : arr) {                                    //遍历字符数组

/*if(!hm.containsKey(c)) {                        //如果不包含这个键

hm.put(c, 1);                                //就将键和值为1添加

}else {                                            //如果包含这个键

hm.put(c, hm.get(c) + 1);                    //就将键和值再加1添加进来

}

//hm.put(c, !hm.containsKey(c) ? 1 : hm.get(c) + 1);

Integer i = !hm.containsKey(c) ? hm.put(c, 1) : hm.put(c, hm.get(c) + 1);

}

for (Character key : hm.keySet()) {                    //遍历双列集合

System.out.println(key + "=" + hm.get(key));

}

7、集合嵌套之HashMap嵌套HashMap

  * A:案例演示

  * 集合嵌套之HashMap嵌套HashMap

 1 public class Demo {
 2
 3     public static void main(String[] args) {
 4         HashMap<Student,String> hm88=new HashMap<>();
 5         hm88.put(new Student("张三",23),"北京");
 6         hm88.put(new Student("李四",24),"北京");
 7         hm88.put(new Student("王五",25),"上海");
 8         hm88.put(new Student("赵六",26),"广州");
 9
10         HashMap<Student,String> hm99=new HashMap<>();
11         hm99.put(new Student("唐僧",1023),"北京");
12         hm99.put(new Student("孙悟空",1024),"北京");
13         hm99.put(new Student("猪八戒",1025),"上海");
14         hm99.put(new Student("沙和尚",1026),"广州");
15
16         HashMap<HashMap<Student,String>,String> hm=new HashMap<>();
17         hm.put(hm88,"第88期基础班");
18         hm.put(hm99,"第99期基础班");
19
20         //遍历双列集合
21         for(HashMap<Student,String> h:hm.keySet()){
22             String value=hm.get(h);
23             for(Student key:h.keySet()){
24                 String value2=h.get(key);
25
26                 System.out.println(key+"="+value2+"="+value);
27             }
28         }
29
30     }
31
32 }

8、HashMap和Hashtable的区别

  * A:面试题

  * HashMap和Hashtable的区别

  * Hashtable是JDK1.0版本出现的,是线程安全的,效率低,HashMap是JDK1.2版本出现的,是线程不安全的,效率高

   * Hashtable不可以存储null键和null值,HashMap可以存储null键和null值

9、Collections工具类的概述和常见方法讲解

  * A:Collections类概述

  * 针对集合操作 的工具类

  * B: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)

10、模拟斗地主洗牌和发牌

  * A:案例演示
      * 模拟斗地主洗牌和发牌,牌没有排序

//买一副扑克

String[] num = {"A","2","3","4","5","6","7","8","9","10","J","Q","K"};

String[] color = {"方片","梅花","红桃","黑桃"};

ArrayList<String> poker = new ArrayList<>();

for(String s1 : color) {

for(String s2 : num) {

poker.add(s1.concat(s2));

}

}

poker.add("小王");

poker.add("大王");

//洗牌

Collections.shuffle(poker);

//发牌

ArrayList<String> gaojin = new ArrayList<>();

ArrayList<String> longwu = new ArrayList<>();

ArrayList<String> me = new ArrayList<>();

ArrayList<String> dipai = new ArrayList<>();

for(int i = 0; i < poker.size(); i++) {

if(i >= poker.size() - 3) {

dipai.add(poker.get(i));

}else if(i % 3 == 0) {

gaojin.add(poker.get(i));

}else if(i % 3 == 1) {

longwu.add(poker.get(i));

}else {

me.add(poker.get(i));

}

}

//看牌

System.out.println(gaojin);

System.out.println(longwu);

System.out.println(me);

System.out.println(dipai);

11、模拟斗地主洗牌和发牌并对牌进行排序的代码实现

  * A:案例演示

  * 模拟斗地主洗牌和发牌并对牌进行排序的代码实现

//买一副牌

String[] num = {"3","4","5","6","7","8","9","10","J","Q","K","A","2"};

String[] color = {"方片","梅花","红桃","黑桃"};

HashMap<Integer, String> hm = new HashMap<>();            //存储索引和扑克牌

ArrayList<Integer> list = new ArrayList<>();            //存储索引

int index = 0;                                            //索引的开始值

for(String s1 : num) {

for(String s2 : color) {

hm.put(index, s2.concat(s1));                    //将索引和扑克牌添加到HashMap中

list.add(index);                                //将索引添加到ArrayList集合中

index++;

}

}

hm.put(index, "小王");

list.add(index);

index++;

hm.put(index, "大王");

list.add(index);

//洗牌

Collections.shuffle(list);

//发牌

TreeSet<Integer> gaojin = new TreeSet<>();

TreeSet<Integer> longwu = new TreeSet<>();

TreeSet<Integer> me = new TreeSet<>();

TreeSet<Integer> dipai = new TreeSet<>();

for(int i = 0; i < list.size(); i++) {

if(i >= list.size() - 3) {

dipai.add(list.get(i));                         //将list集合中的索引添加到TreeSet集合中会自动排序

}else if(i % 3 == 0) {

gaojin.add(list.get(i));

}else if(i % 3 == 1) {

longwu.add(list.get(i));

}else {

me.add(list.get(i));

}

}

//看牌

lookPoker("高进", gaojin, hm);

lookPoker("龙五", longwu, hm);

lookPoker("冯佳", me, hm);

lookPoker("底牌", dipai, hm);

}

public static void lookPoker(String name,TreeSet<Integer> ts,HashMap<Integer, String> hm) {

System.out.print(name + "的牌是:");

for (Integer index : ts) {

System.out.print(hm.get(index) + " ");

}

System.out.println();

}

12、泛型固定下边界

  * ? super E

原文地址:https://www.cnblogs.com/hfumin/p/10238354.html

时间: 2024-10-10 06:38:13

Map集合、HashMap集合、LinkedHashMap集合、Hashtable集合、Collections工具类和模拟斗地主洗牌和发牌的相关文章

18.29_集合框架(模拟斗地主洗牌和发牌并对牌进行排序的代码实现)

1 package dou_di_zhu; 2 3 import java.util.ArrayList; 4 import java.util.Collection; 5 import java.util.Collections; 6 import java.util.HashMap; 7 import java.util.TreeSet; 8 9 /** 10 * 思路: 11 * A:创建一个HashMap集合 12 * B:创建一个ArrayList集合 13 * C:创建花色数组和点数

集合详解(五):集合嵌套与Collections工具类

一.集合嵌套 1.HashMap嵌套HashMap <span style="font-size:18px;"> /* * HashMap嵌套HashMap * * 传智播客 * jc 基础班 * 陈玉楼 20 * 高跃 22 * jy 就业班 * 李杰 21 * 曹石磊 23 * * 先存储元素,然后遍历元素 */ public void test3(){ // 创建集合对象 HashMap<String, HashMap<String, Integer>

Collections工具类、Map集合、HashMap、Hashtable(十八)

1.Map集合概述和特点 * A:Map接口概述 * 去重复, * 查看API可以知道, * 将键映射到值的对象, * 一个映射不能包含重复的键, * 每个键最多只能映射到一个值.* B:Map接口和Collection接口的不同 * Map是双列的,Collection是单列的. * Map的键唯一,Collection的子体系Set是唯一的,即不重复. * Map集合的数据结构值针对键有效,跟值无关;Collection集合的数据结构是针对元素有效. 2.Map集合的功能概述 * a:添加功

day07(Set接口,HashSet类,hashcoad(),Collections工具类,Map集合)

Set接口 set接口的实现类特点 1.无序(取出来的顺序和存进去的数据的顺序不一致) 2.唯一(数据不能存相同的) 底层是用Map集合写的 HashSet类  实现了  set接口       唯一性  public class HashSetTest { public static void main(String[] args) { HashSet<String> hs=new HashSet<String>(); hs.add("hello"); hs.

迭代器遍历【List、Set、Map】&amp;&amp; 遍历集合的方法总结 &amp;&amp; Collections工具类

整理&&总结 迭代器遍历Iterator[List.Set.Map]example 1 package boom.collection; 2 3 import java.util.ArrayList; 4 import java.util.HashMap; 5 import java.util.HashSet; 6 import java.util.Iterator; 7 import java.util.List; 8 import java.util.Map; 9 import jav

Collections工具类:操作集合的工具类

Collections工具类:操作集合的工具类 Java提供了一个操作Set List Map等集合的工具类:Collections,该工具类提供了大量方法对集合元素进行排序.查询和修改等操作.还提供了将集合对象设置为不可变,对集合对象实现同步控制等方法. 排序操作 ArrayList arrayList = new ArrayList(); arrayList.add(2); arrayList.add(-1); arrayList.add(4); arrayList.add(6); Syst

9.9-全栈Java笔记:遍历集合的N种方式总结&Collections工具类

遍历集合的N种方式总结 [示例1]遍历List方法1,使用普通for循环 for(int i=0;i<list.size();i++){         //list为集合的对象名 String temp = (String)list.get(i); System.out.println(temp); } [示例2]遍历List方法2,使用增强for循环(使用泛型定义类型!) for (String   temp : list) { System.out.println(temp); } [示例

Java集合框架(六)—— Collections工具类

操作集合的工具类Collections Java提供了一个操作Set.List和Map等集合的工具类:Collections,该工具类里提供了大量方法对集合元素进行排序.查询和修改等操作,还提供了将集合对象设置为不可变.对集合对象实现同步控制等方法. 排序操作 Collections提供了如下几个方法对List集合元素进行排序: static void reverse(List list);       //反转指定List集合元素的顺序. static void shuffle(List li

Java集合框架:Collections工具类

java.util.Collections工具类提供很多有用的方法,使得程序猿操作集合类的时候更加的方便容易,这些方法都是静态的.整个Collections工具类源码差不多有4000行,我们针对一些典型的方法进行阐述. 1. 调用一个空List,Set,Map public static final List EMPTY_LIST = new EmptyList<>(); public static final Map EMPTY_MAP = new EmptyMap<>(); p