Collection类

1.常用功能

2.comparator比较器

  • 作用:对集合内的元素进行排序

  • 自然排序和比较器排序:

    • 比较器使用代码:

3.可变参数

  • 作用和定义规则:

  • 案例代码:

Set接口

1.特点:集合的特点: 无序(存和取的顺序), 无索引, 不可以重复

2.HashSet:hashSet集合存储自定义类型的时候, 想保证元素的唯一, 需要重写hashCode和equals方法

3.LinkedHashSet:

 ·有序(Set集合中惟一一个有序的集合)·保证元素的唯一

4.TreeSet:

·排序·保证元素的唯一(在构造方法中可以传入比较器, 自定义排序的规则)

1.特点:

2.种类

  • 二叉数:如果树中的每个节点的子节点的个数不超过2,那么该树就是一个二叉树。

  • 二叉查找树

    • . 左子树上所有的节点的值均小于等于他的根节点的值

. 右子树上所有的节点值均大于或者等于他的根节点的值

. 每一个子节点最多有两个子树

  • 平衡二叉树:它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树
  • 红黑树:它是一种特殊的二叉查找树,红黑树的每一个节点上都有存储位表示节点的颜色,可以是红或者黑

Map集合

3.常用方法:

2.常用子类

  • HashMap<K,V>:存储数据采用的哈希表结构,元素的存取顺序不能保证一致。由于要保证键的唯一、不重复,需要重写键的hashCode()方法、equals()方法。
  • LinkedHashMap<K,V>:HashMap下有个子类LinkedHashMap,存储数据采用的哈希表结构+链表结构。通过链表结构可以保证元素的存取顺序一致;通过哈希表结构可以保证的键的唯一、不重复,需要重写键的hashCode()方法、equals()方法。
  • TreeMap<K,V>:TreeMap集合和Map相比没有特有的功能,底层的数据结构是红黑树;可以对元素的键进行排序,排序方式有两种:自然排序和比较器排序

4.遍历

  • 键找值:

  • 键值对:

5.存储自定义类型:当给HashMap中存放自定义对象时,如果自定义对象作为key存在,这时要保证对象唯一,必须复写对象的hashCode和equals方法(如果忘记,请回顾HashSet存放自定义对象)。

斗地主案例(二)

package teacher.day08._04map_other;import java.util.*;/*斗地主*/
public class Demo04 {public static void main(String[] args) {// 创建Map集合, Map集合的键是数字, 代表扑克牌的大小, 值是牌HashMap<Integer, String> map = new HashMap<>();// 创建ArrayList集合, 集合中的元素就是Map中的键ArrayList<Integer> list = new ArrayList<>();// 创建点数数组(根据扑克规则的从小到大)String[] numbers = {"3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A", "2"};// 创建花色数组(根据扑克规则的从小到大)String[] colors = {"♦", "♣", "♥", "♠"};// 定义变量, 用来代表扑克牌的大小int count = 1;// 先遍历点数for (String number : numbers) {// 再遍历花色for (String color : colors) {// 拼接牌String poker = color + number;list.add(count);map.put(count++, poker);}}// 小王, 大王list.add(count);map.put(count++, "小♖");list.add(count);map.put(count, "大♕");// 洗牌Collections.shuffle(list);// 发牌ArrayList<Integer> me = new ArrayList<>();ArrayList<Integer> gaoJin = new ArrayList<>();ArrayList<Integer> zhouXingXing = new ArrayList<>();ArrayList<Integer> left = new ArrayList<>();for (int i = 0; i < list.size(); i++) {if (i >= list.size() - 3) {left.add(list.get(i));} else if (i % 3 == 0) {me.add(list.get(i));} else if (i % 3 == 1) {gaoJin.add(list.get(i));} else {zhouXingXing.add(list.get(i));}}// 排序Collections.sort(me, getComparator());Collections.sort(gaoJin, getComparator());Collections.sort(zhouXingXing, getComparator());Collections.sort(left, getComparator());// 看牌showPoker(map, left, "底牌");showPoker(map, me, "我");showPoker(map, gaoJin, "高进");showPoker(map, zhouXingXing, "周星星");}/*** 此方法用于返回比较器*/public static Comparator<Integer> getComparator() {Comparator<Integer> c =  new Comparator<Integer>() {@Overridepublic int compare(Integer o1, Integer o2) {return o2 - o1;}};return c;}/*** 此方法用于根据ArrayList集合中的值, 找到Map中对应的扑克牌**  高进:*/public static void showPoker(HashMap<Integer, String> map, ArrayList<Integer> list, String name) {// 创建StringBuilder, 用来完成字符串的拼接StringBuilder sb = new StringBuilder(name);sb.append(": ");// 遍历list集合for (Integer key : list) {// 去map集合中找到对应的值, 然后打印String value = map.get(key);// 拼接sb.append(value).append(" ");}// 打印System.out.println(sb);}
}

安安静静学JAVA(七)相关推荐

  1. 教妹学Java(二十一):一文带你了解面向对象编程的所有概念

    你好呀,我是沉默王二,是<Web 全栈开发进阶之路>的作者,CSDN 的博客之星.<教妹学 Java>是一套非常有趣的付费专栏,除了继续保持幽默风趣的行风风格,我还力求把每一个 ...

  2. 教妹学Java(十九):continue 关键字详解

    你好呀,我是沉默王二,是<Web 全栈开发进阶之路>的作者,CSDN 2019 年度的博客之星.<教妹学 Java>是一套非常有趣的付费专栏,除了继续保持幽默风趣的行风风格,我 ...

  3. 教妹学Java(二十二):来吧,一文彻底搞懂Java命名约定

    你好呀,我是沉默王二,是<Web 全栈开发进阶之路>的作者,CSDN 博客之星.<教妹学 Java>是一套非常有趣的付费专栏,除了继续保持幽默风趣的行风风格,我还力求把每一个知 ...

  4. 教妹学Java(二十):一文带你彻底了解 Java 中的注释,干货了

    你好呀,我是沉默王二,一枚颜值与才华俱在的程序员.本篇教程通过我和三妹对话的形式来谈一谈"Java 中的注释". 教妹学 Java,没见过这么有趣的标题吧?"语不惊人死不 ...

  5. 跟我学 Java 8 新特性之 Stream 流(七)流与迭代器,流系列大结局

    转载自   跟我学 Java 8 新特性之 Stream 流(七)流与迭代器,流系列大结局 恭喜你们,马上就要学完Java8 Stream流的一整系列了,其实我相信Stream流对很多使用Java的同 ...

  6. 【零基础学Java】—类的定义(七)

    [零基础学Java]-类的定义(七) 一.事物与类的对比 现实世界的一类事物 属性:事物的状态信息 行为:事物能够做什么 Java中用class描述事物也是如此 成员变量:对应事物的属性 成员方法:对 ...

  7. 今天大聪明不教你学Java了 | Happy wife,Happy life ( 距离求婚还有七天 )

    前言 今天大聪明不教大家学 Java 了,今天和大家分享一件对我来说很重要的事--我要求婚啦!!!

  8. 不是广告--如何学Java,我说点不太一样的学习方式

    首先声明,这篇文章不是卖课程.介绍培训班的广告. 最近有不少读者通过微信问我:小白应该怎么学好 Java? 提问的人里有在校大学生.有刚参加工作的.有想转行做程序员的,还有一部分是最近找工作不顺的. ...

  9. 零基础转行学Java到底难不难?

    2019独角兽企业重金招聘Python工程师标准>>> 74%的人认为不难 有人曾经做过统计,询问500多已经参加工作的 Java开发者,"学习java是否困难?" ...

  10. java开发项目实例_学java开发,项目经验最重要

    不想做将军的士兵不是好士兵! 相信没有人一开始学java,就是为了将来一直做一名初级java开发工程师.只需掌握一些简单代码技巧,别人告诉想要实现的效果,然后自己能用代码堆砌来实现. 更何况,现在企业 ...

最新文章

  1. 实际操作_MFC修改控件的Tab顺序
  2. linux 内核 虚拟文件系统VFS 路径查找 path_lookup
  3. 不是多家族媒体集的一部分,可用bakup with format来构造新的媒体集.
  4. ST17H26上下拉电阻设置注意事项
  5. 一道有意思的数据库题
  6. WEB安全基础-文件操作漏洞
  7. 【Elasticsearch】 Elasticsearch 多字段查询 best_fields、most_fields、cross_fields,傻傻分不清楚?
  8. 巨头特斯拉的进击之路
  9. 十大算法之迪杰斯特拉算法
  10. python字符串输入并倒叙_基于python3实现倒叙字符串
  11. 基因表达数据处理-Ensembl ID转化为Gene symbol
  12. plc虚拟服务器,VMware软件虚拟机和PLC通讯的连接方法
  13. 你知道icp许可证与edi许可证的区别吗
  14. 哥德尔不完全性定理 关系 谓词和代入——哥德尔读后之二十
  15. ZoteroCNKI抓取不到学位论文的解决办法
  16. Disruptor笔记
  17. 赢在云端:VMware跨云架构,让“云”卷“云”舒自由可控!——访VMware公司大中华区高级技术总监李刚
  18. AtCoder Beginner Contest 242 C~E 题解
  19. 框架64位插间_gg修改器64位插件最新版本-gg修改器64位插件补丁最新版(gg修改器64位框架)v60.3免root版_新绿资源网...
  20. rhino软件上Grasshopper 中的快捷键(用gh的同学不妨了解一下)

热门文章

  1. java 断点跳到注释,一个空指针异常,代码如下,打了断点,一到“TOPICID”那里(在下方注释4那里)就抛异常-_-||...
  2. 网站被黑 怎么检测代码含有后门
  3. 容器:forward_list用法及示例
  4. Netflix时代之后Spring Cloud微服务的未来
  5. [buuctf.reverse] 131-135
  6. android实现记事本app
  7. Learning to Reweight Examples for Robust Deep Learning
  8. 在 Android Studio 里面运行标准 Java 工程
  9. Git报错:another git process seems to be running in this repository
  10. 程序员修炼(一)----剑指天下