Java中利用Collections、HashMap、TreeSet混合使用Demo
来源:互联网 发布:今日方知我是我的诗句 编辑:程序博客网 时间:2024/06/16 07:41
代码:
package day18_Poker;import java.util.ArrayList;import java.util.Collections;import java.util.HashMap;import java.util.TreeSet;/* * 模拟斗地主洗牌和发牌 * * 分析: * A:创建一个牌盒 * B:装牌 * C:洗牌 * D:发牌 * E:看牌 * 思路: * A:创建一个HashMap集合 * B:创建一个ArrayList集合 * C:创建花色数组和点数数组 * D:从0开始往HashMap里面存储编号,并存储对应的牌 * 同时从ArrayList里面存储编号即可 * E:洗牌(洗的是编号) * F:发牌(发的也是编号,为了保证编号是排序,就创建TreeSet集合接收) * G:看牌(遍历TreeSet集合,获取编号,到HashMap集合照对应的牌) * */public class PokerDemo { public static void main(String[] args) { // TODO Auto-generated method stub //创建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里面存储编号,并存储对应的牌 int index=0; for(String number:numbers){ for(String color:colors){ String poker=color.concat(number); //放入HashMap hm.put(index, poker);//对应左侧HashMap图 array.add(index);//对应右侧Array图 index++; } } //放大小王 hm.put(index, "小王"); array.add(index); index++;//放入元素加1 hm.put(index, "大王"); array.add(index); //洗牌(洗的是编号) Collections.shuffle(array); //F:发牌(发的也是编号,为了保证编号是排序,就创建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 i=0;i<array.size();i++){ if(i>=array.size()-3){ diPai.add(i); }else if(i%3==0){ fengQingYang.add(i); }else if(i%3==1){ linQingXia.add(i); }else if(i%3==2){ liuYi.add(i); } } //看牌(遍历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.println(name+"的牌是:"); for(Integer key:ts){ String value=hm.get(key); System.out.print(value+" "); } System.out.println(); } }
三者总结:
1.集合(自己补齐) Collection(单列集合) List(有序,可重复) ArrayList 底层数据结构是数组,查询块,增删慢 线程不安全,效率高 Vector 底层数据结构是数组,查询块,增删慢 线程安全,效率低 LinkedList 底层数据结构是链表,查询慢,增删块 线程不安全,效率高 Set(无序,不可重复) HashSet 底层数据结构是哈希表 哈希表依赖两个方法:hashCode()和equals() 执行顺序: 首先判断hashCode()值是否相同 是:继续执行equals()方法,看其返回值 true:说明元素重复,不添加 false:就直接添加 否:直接添加 最终: 自动生成hashCode()和equals()即可。alt+shift LinkedHashSet 底层数据结构由链表和哈希表组成。 有链表保证元素有序 由哈希表保证唯一 TreeSet 底层数据结构是红黑树。(是一种自平衡的二叉树) 如何保证元素唯一性? 根据比较的返回值是否是0来决定 如何保证元素的排序? 自然排序(元素具备比较性) 让元素所属的类实现Comparatable接口 比较器排序(集合具备比较性) 让集合接收一个Comparator的实现类对象 Map(双列集合) Map集合的数据结构仅仅针对键有效,与值无关 A:Map集合的数据结构仅仅针对键有效,与值无关 B:存储的是键值对形式的元素,键唯一,值可以 HashMap 底层数据结构是哈希表 哈希表依赖两个方法:hashCode()和equals() 执行顺序: 首先判断hashCode()值是否相同 是:继续执行equals()方法,看其返回值 true:说明元素重复,不添加 false:就直接添加 否:直接添加 最终: 自动生成hashCode()和equals()即可。alt+shift LinkedHashMap 底层数据结构由链表和哈希表组成。 有链表保证元素有序 由哈希表保证唯一 Hashtable 底层数据结构是哈希表 哈希表依赖两个方法:hashCode()和equals() 执行顺序: 首先判断hashCode()值是否相同 是:继续执行equals()方法,看其返回值 true:说明元素重复,不添加 false:就直接添加 否:直接添加 最终: 自动生成hashCode()和equals()即可。alt+shift TreeMap 底层数据结构是红黑树。(是一种自平衡的二叉树) 如何保证元素唯一性? 根据比较的返回值是否是0来决定 如何保证元素的排序? 自然排序(元素具备比较性) 让元素所属的类实现Comparatable接口 比较器排序(集合具备比较性) 让集合接收一个Comparator的实现类对象2:到底使用那种集合(自己补齐) 看需求: 是否是键值对形式: 是: Map 键是否需要排序: 是:TreeMap 否:HashMap 不知道,就使用HashMap 否:Collection 元素是否唯一? 是:Set 元素是否需要排序 是:TreeSet 否:HashSet 不知道,就使用HashSet 否:List 要安全吗? 是:Vector(其实我们也不用,后面我们讲解了多线程以后,再回顾) 否:ArrayList或者LinkedList 增删多:LinkedList 查询多:ArrayList 不知道,就是用ArrayList 不知道,就使用ArrayList3:集合的常见方法及便利方式 Collection: add() remove() contains() iterator() size() 遍历: 增强for 迭代器 |--List get() 遍历: 普通for |--Set Map: put() remove() containsKey(),containsValue() keySet() get() value() entrySet() size() 遍历: 根据键找值 根据键值对对象分别找键和值
阅读全文
0 0
- Java中利用Collections、HashMap、TreeSet混合使用Demo
- java中Collection/Collections;List/Set/Map;ArrayList/Vector/LinkedList;HashSet/HashMap/TreeSet/TreeMap
- Java中TreeSet类Demo
- java collections 集合基础学习 ArrayList,LinkedList, HashSet, TreeSet, HashMap, Stack,Queue,PriorityQueue
- Java中TreeSet的使用
- JCF map遍历 hashSet treeSet hashMap treeMap Collections工具类
- Java中使用HashMap,TreeSet和List来实现模拟斗地主的洗牌和发牌的小例子
- java collections framework -----HashSet and TreeSet
- TreeSet中实现自己的Comparator,以及常见的Collections方法的使用
- java-集合(6)-TreeSet,HashSet与TreeSet比较,HashMap,TreeMap只有在排序的功能时使用
- Java中的HashSet, TreeSet, HashMap, TreeMap
- java.util(一)HashMap TreeMap TreeSet
- JAVA学习笔记7 Hashset ,TreeSet , HashMap
- java集合框架的练习之TreeSet集合与ArrayList集合的混合使用
- Java中Collections.sort()的使用!
- Java笔记(8)-泛型、链表、LinkedList<E>、Iterator迭代器、Collections类方法、堆栈、HashMap<K,V>、TreeSet<E>、自动装箱和拆箱
- java中TreeSet学习
- Java中TreeSet总结
- Hdu2841 Visible Trees
- 网易编程题-圆上优雅点c++实现
- 【NOIP2017提高组模拟6.27】C
- 修改Android 的EditText的密码视觉回显
- java 线程池工作策略
- Java中利用Collections、HashMap、TreeSet混合使用Demo
- json转bean,并存进数据库
- 38 Python csv
- 第7课 面向对象的基本概念
- 如何计算文本文档词向量之间的相似度----一些概念与方法
- JZOJ 5172. 【NOIP2017提高组模拟6.27】lllegal Motor
- Microsoft Word 2007如何导出PDF
- Android开发通过Glide显示url图片
- shell编程四剑客find及grep