目录

Map之HashMap

HashMap存储自定义类型

TreeMap

概念:

Map集合练习


Map之HashMap

HashMap存储自定义类型

//编写一个自定义类Dog类
public class Dog {private String color;private int age;
​public String getColor() {return color;}
​public void setColor(String color) {this.color = color;}
​public int getAge() {return age;}
​public void setAge(int age) {this.age = age;}
​public Dog(String color, int age) {this.color = color;this.age = age;}
​public Dog() {}
​//equals和hashCode方法的重写@Overridepublic boolean equals(Object o) {if (this == o) return true;if (!(o instanceof Dog)) return false;Dog dog = (Dog) o;return age == dog.age &&color.equals(dog.color);}
​@Overridepublic int hashCode() {return Objects.hash(color, age);}
​@Overridepublic String toString() {return "Dog{" +"color='" + color + '\'' +", age=" + age +'}';}
}
​
​
//测试类
/*** 我的目标是要来用HashMap存储自定义类型(用自定义类型来当key)*/
public class Test1 {public static void main(String[] args) {LinkedHashMap<Object, Object> map = new LinkedHashMap<>();Dog dog1 = new Dog("黑毛",2);Dog dog2 = new Dog("白毛",1);Dog dog3 = new Dog("黄毛",3);map.put(dog1,"上海");map.put(dog2,"上dsf");map.put(dog3,"上sdfsdf");
​// 验证所有的狗对象作为key已经存入了map集合中// 首先获取所有的keySet<Object> keys = map.keySet();for (Object key : keys) {Object value = map.get(key);System.out.println(key+"-----------"+value);/*Dog{color='黑毛', age=2}-----------上海Dog{color='白毛', age=1}-----------上dsfDog{color='黄毛', age=3}-----------上sdfsdf*/}}
}
  • 当给HashMap中存放自定义对象时,如果自定义对象作为key存在,这时要保证对象唯一,必须复写对象的hashCode和equals方法(如果忘记,请回顾HashSet存放自定义对象)。

  • 如果要保证map中存放的key和取出的顺序一致,可以使用java.util.LinkedHashMap集合来存放。

TreeMap

概念:

Java TreeMap类是基于红黑树的实现。它提供了一种有效的方法来按排序顺序存储键值对。

排序方式有两种:自然排序比较器排序;到时使用的是哪种排序,取决于我们在创建对象的时候所使用的构造方法;

public TreeMap()                                    使用自然排序
public TreeMap(Comparator<? super K> comparator)    比较器排序

自然排序很简单,就只要在新建对象是使用new TreeMap<>();不带参数就行,就可以进行自然排序

代码演示:

//比较器排序
public class Test2 {public static void main(String[] args) {TreeMap<Dog, String> treeMap = new TreeMap<>(new Comparator<Dog>() {//只要在括号里写new Comparator就会自动生成重写方法@Overridepublic int compare(Dog o1, Dog o2) {return o2.getAge()-o1.getAge();//重写年龄的排序 降序}});
​treeMap.put(new Dog("黄",2),"dfsdf");treeMap.put(new Dog("白",3),"erw");treeMap.put(new Dog("黑",1),"cvbcb");
​System.out.println(treeMap);//{Dog{color='白', age=3}=erw, Dog{color='黄', age=2}=dfsdf, Dog{color='黑', age=1}=cvbcb}}
}

Map集合练习

计算一个字符串中每个字符出现次数。

这个题最重要的就是

方法介绍

public boolean containKey(Object key):判断该集合中是否有此键。

代码演示:

/*** 计算一个字符串中每个字符出现次数。*/
public class Test3 {public static void main(String[] args) {String s = "sdlkfjjwefksddvmsdf";//用一个map集合把该字符串的字符和次数存起来,键放字符,值放次数HashMap<Character, Integer> map = new HashMap<>();//获取每个字节for (int i = 0; i <s.length() ; i++) {char c = s.charAt(i);// 判断该字符是否在map集合中存在,如果存在则次数+1,否则把次数设置为1if(map.containsKey(c)){//判断该集合中是否有此键。Integer integer = map.get(c);//得到原来的次数integer++;//原来的次数加1map.put(c,integer);//更新}else{//如果该字符没有出现过,就直接设置为1map.put(c,1);}}System.out.println(map);//{s=3, d=4, e=1, f=3, v=1, w=1, j=2, k=2, l=1, m=1}}
}
​

模拟斗地主洗牌发牌(讨厌这个题好复杂)

代码演示:

/*** 斗地主*/
public class Test4 {public static void main(String[] args) {// 把数字与牌对应起来HashMap<Integer, String> map = new HashMap<>();// 把数字放进list集合中存储ArrayList<Integer> list = new ArrayList<>();
//        map.put(1,"黑桃A");
//        map.put(2,"红桃A");
​// 构建纸牌;由数字+花色组成String s = "2-A-K-Q-J-10-9-8-7-6-5-4-3";String nums[] =s.split("-");String oldcolor = "♥-♠-♦-♣";String[] colors = oldcolor.split("-");int flag = 2;for (String num : nums) {for (String color : colors) {String pooker = color+num;map.put(flag,pooker);list.add(flag);flag++;}}//将大王小王添加到集合map.put(0, "大王");map.put(1, "小王");list.add(0);list.add(1);
​// 定义玩家ArrayList<Integer> player1 = new ArrayList<Integer>();ArrayList<Integer> player2 = new ArrayList<Integer>();ArrayList<Integer> player3 = new ArrayList<Integer>();ArrayList<Integer> diPai = new ArrayList<Integer>();
​// 洗牌Collections.shuffle(list);
​// 发牌//遍历牌号的集合 判断索引发牌号for(int i = 0 ;i < list.size() ;i++) {Integer pookerNum = list.get(i);
​if (i >= 51) {diPai.add(pookerNum);} else if (i % 3 == 0) {player1.add(pookerNum);} else if (i % 3 == 1) {player2.add(pookerNum);} else if (i % 3 == 2) {player3.add(pookerNum);}}
​// 理牌Collections.sort(player1);Collections.sort(player2);Collections.sort(player3);
​// 看牌show("罗璇",player1,map);show("万人迷",player2,map);show("陈总",player3,map);// 显示底牌for (Integer integer : diPai) {String value = map.get(integer);System.out.println("底牌是:"+value);}}//定义方法 看牌public static void show(String name,ArrayList<Integer> player,HashMap<Integer, String> pookerMap ){System.out.print(name+":");for(Integer pookerNum : player){String thisPooker = pookerMap.get(pookerNum);System.out.print(thisPooker+" ");}System.out.println();//罗璇:大王 ♥2 ♠2 ♦2 ♣2 ♥K ♦Q ♠J ♠10 ♦9 ♥8 ♣7 ♠6 ♦6 ♣5 ♠4 ♦4
//万人迷:♦A ♥Q ♣Q ♥J ♣J ♥10 ♦10 ♠9 ♣8 ♥7 ♠7 ♥6 ♣6 ♥4 ♣4 ♠3 ♦3
//陈总:小王 ♥A ♠A ♣A ♠K ♦K ♠Q ♦J ♣10 ♥9 ♣9 ♠8 ♦8 ♦7 ♠5 ♥3 ♣3
//底牌是:♣K
//底牌是:♥5
//底牌是:♦5}
}
​

HashMap和TreeMap相关推荐

  1. 【转】HashMap、TreeMap、Hashtable、HashSet和ConcurrentHashMap区别

    转自:http://blog.csdn.net/paincupid/article/details/47746341 一.HashMap和TreeMap区别 1.HashMap是基于散列表实现的,时间 ...

  2. 面试:如何决定使用 HashMap 还是 TreeMap?

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 问:如何决定使用 HashMap 还是 TreeMap? 介绍 T ...

  3. java中HashMap,LinkedHashMap,TreeMap,HashTable的区别

    java为数据结构中的映射定义了一个接口java.util.Map;它有四个实现类,分别是HashMap Hashtable LinkedHashMap 和TreeMap Map主要用于存储健值对,根 ...

  4. HashMap、TreeMap、Hashable和LinkedHashMap

    Map是最重要的数据结构之一.开始会告诉怎么用HashMap.TreeMap.Hashtable和LinkedHashMap 1.Map概述 在Java SE中有4种Map的实现:HashMap.Tr ...

  5. 【面试题】使用 HashMap 还是 TreeMap

    基本介绍 TreeMap<K,V>的Key值是要求实现java.lang.Comparable,所以迭代的时候TreeMap默认是按照Key值升序排序的:TreeMap的实现是基于红黑树结 ...

  6. 1.5 Map集合:HashMap 和TreeMap 类

    Map集合,HashMap,TreeMap Map 是一种键-值对(key-value)集合,Map 集合中的每一个元素都包含一个键(key)对象和一个值(value)对象.用于保存具有映射关系的数据 ...

  7. 深入理解HashMap和TreeMap的区别

    文章目录 简介 HashMap和TreeMap本质区别 排序区别 Null值的区别 性能区别 共同点 深入理解HashMap和TreeMap的区别 简介 HashMap和TreeMap是Map家族中非 ...

  8. Java 集合系列14之 Map总结(HashMap, Hashtable, TreeMap, WeakHashMap等使用场景)

    概要 学完了Map的全部内容,我们再回头开开Map的框架图. 本章内容包括: 第1部分 Map概括 第2部分 HashMap和Hashtable异同 第3部分 HashMap和WeakHashMap异 ...

  9. Hashtable、HashMap、TreeMap总结

    Hashtable.HashMap.TreeMap总结 三者均实现了Map接口,存储的内容是基于key-value的键值对映射,一个映射不能有重复的键,一个键最多只能映射一个值. (元顺初线) (1) ...

  10. HashMap、TreeMap、Hashtable、HashSet和ConcurrentHashMap区别

    2019独角兽企业重金招聘Python工程师标准>>> 1.HashMap.TreeMap都继承AbstractMap抽象类:TreeMap实现SortedMap接口,所以TreeM ...

最新文章

  1. c efcore.mysql_EF Core在mysql中调用存储过程
  2. Python【算法中心 03】Docker部署Django搭建的Python应用流程实例(Docker离线安装配置+Django项目Docker部署)
  3. vue指令-单向和双向绑定
  4. Linux卸载/删除多余网卡
  5. 我国.NET域名注册总量超57.3万 6月新增6747个
  6. 基于Matlab----RSSI指纹定位技术性能仿真
  7. bzoj 1050: [HAOI2006]旅行comf(尺取+最短路)
  8. Axis2发布webservices
  9. 【BZOJ 1053】反素数【素数基本知识】
  10. gps 数据解析-NMEA 0183协议
  11. 掷骰子游戏设计(C++)
  12. php实现短信验证功能
  13. Retrofit源码分析
  14. 将多名学生成绩绘制在一张画布中,并在图中显示学生成绩
  15. qcon2016_从QCon San Francisco 2016中学到的重点知识和教训
  16. 生成SSL自签名证书
  17. Java Web 网络商城案例演示十五 订单详情功能(提交订单支付界面)
  18. java经典题之冒泡排序
  19. 去掉浏览器页面广告和弹窗
  20. 【单片机毕业设计】【mcuclub-jj-051】基于单片机的书桌的设计

热门文章

  1. oracle两个压缩包怎么解压,AIX下如何解压缩zip文件
  2. 机器视觉之工业摄像机知识点(二)
  3. swarm-XDai主网免bzz质押和rpc全套搭建教程-windows
  4. 通信领域的dB计量单位
  5. AVFoundation 框架小结
  6. arm920t中断系统详解
  7. 湘潭大学计算机组成原理试卷,湘潭大学 计算机组成与原理 控制器实验 实验报告...
  8. oracle 伪列访问序列,Oracle同义词与序列基础教程
  9. 角摩电子书制作工具(JoymoEBook)v1.0绿色版
  10. 编程新技术实务实验二HTML以及J2EE简单编程