首页 > 编程语言 >JAVA进阶--Collection集合之Set系列集合、可变参数、Collections工具类、Map集合体系、集合的嵌套--2022年9月3日

JAVA进阶--Collection集合之Set系列集合、可变参数、Collections工具类、Map集合体系、集合的嵌套--2022年9月3日

时间:2022-09-04 11:23:58浏览次数:63  
标签:Map 10 -- maps 集合 println out

第一节  Set系列集合

  1、Set系列

    

 

 

   2、HashSet集合元素无序的底层原理:哈希表

    a、Set集合的底层原理是什么样的

      JDK8之前,哈希表:底层使用数组+链表组成

      JDK8开始后,哈希表:底层使用数组+链表+红黑树组成

    b、哈希表的详细流程

      创建一个默认长度16,默认加载因 为0.75的数组,数组名table

      根据元素的哈希值根数组的长度计算出应存入的位置

      判断当前位置是否为null,如果是null直接存入,如果位置不为null,表示有元素,则调用equals方法比较属性值,如果一样,则不存,如果不一样,则存入数据。

      当数组存满16*0.75=12时,就自动扩容,每次扩容原先的两倍

    

 

 

     ====================================================================================================

    

 

 

     ==========================================================================================================

    

 

 

     ================================================================================================================

    

 

 

     3、HashSet元素去重复的底层原理

      a、如果希望Set集合认为2个内容相同的对象是重复的应该怎么办

        重写对象的hashCode和equals方法

    

    4、LinkedHashSet

      a、LinkedHaseSet集合的特点和原理是怎么样的

        有序、不重复、无索引

        底层基于哈希表,使用双链表记录添加顺序

      

    5、treeSet

      a、TreeSet集合的特点是怎么样的

        可排序,不重复,无索引

      b、TreeSet集合自定义排序规则有几种方式

        2种

        类实现Comparable接口,重写比较规则

        集合自定义Comparator比较器对象,重写比较规则

    

 

     ==============================================================================================

    

 

     =================================================================================================================

    

 

     

 

 

 1 package com.itheima.d1_collection_set;
 2 
 3 import java.util.Set;
 4 import java.util.TreeSet;
 5 
 6 /**
 7    目标:观察TreeSet对于有值特性的数据如何排序。
 8         学会对自定义类型的对象进行指定规则排序
 9  */
10 public class SetDemo5 {
11     public static void main(String[] args) {
12         Set<Integer> sets = new TreeSet<>(); // 不重复 无索引 可排序
13         sets.add(23);
14         sets.add(24);
15         sets.add(12);
16         sets.add(8);
17         System.out.println(sets);
18 
19         Set<String> sets1 = new TreeSet<>(); // 不重复 无索引 可排序
20         sets1.add("Java");
21         sets1.add("Java");
22         sets1.add("angela");
23         sets1.add("黑马");
24         sets1.add("Java");
25         sets1.add("About");
26         sets1.add("Python");
27         sets1.add("UI");
28         sets1.add("UI");
29         System.out.println(sets1);
30 
31         System.out.println("------------------------------");
32         // 方式二:集合自带比较器对象进行规则定制
33         //
34 //        Set<Apple> apples = new TreeSet<>(new Comparator<Apple>() {
35 //            @Override
36 //            public int compare(Apple o1, Apple o2) {
37 //                // return o1.getWeight() - o2.getWeight(); // 升序
38 //                // return o2.getWeight() - o1.getWeight(); // 降序
39 //                // 注意:浮点型建议直接使用Double.compare进行比较
40 //                // return Double.compare(o1.getPrice() , o2.getPrice()); // 升序
41 //                return Double.compare(o2.getPrice() , o1.getPrice()); // 降序
42 //            }
43 //        });
44 
45         Set<Apple> apples = new TreeSet<>(( o1,  o2) ->  Double.compare(o2.getPrice() , o1.getPrice())  );
46         apples.add(new Apple("红富士", "红色", 9.9, 500));
47         apples.add(new Apple("青苹果", "绿色", 15.9, 300));
48         apples.add(new Apple("绿苹果", "青色", 29.9, 400));
49         apples.add(new Apple("黄苹果", "黄色", 9.8, 500));
50         System.out.println(apples);
51     }
52 }
View Code

 

第二节  Collection体系的特点、使用场景总结

  1、如果希望元素可以重复,又有索引,索引查询要快?

    ArrayList集合,基于数组的(用的最多)

  2、如果希望元素可以重复,又有索引,增删首尾操作快

    LinkedList集合,基于链表的

  3、如果洗完增删改查都快,但是元素不重复、无序、无索引

    HashSet集合,基于哈希表的

  4、如果希望增删改查都快,但是元素不重复,有序,无索引

    LinkedHashSet集合,基于哈希表和双链表的

  5、如果要对对象进行排序

    TreeSet集合,基于红黑树,后续也可以用List集合实现排序

第三节  补充知识:可变参数

  

 1 package com.itheima.d2_params;
 2 
 3 import java.util.Arrays;
 4 
 5 /**
 6     目标:可变参数。
 7 
 8     可变参数用在形参中可以接收多个数据。
 9     可变参数的格式:数据类型...参数名称
10 
11     可变参数的作用:
12          传输参数非常灵活,方便。
13          可以不传输参数。
14          可以传输一个参数。
15          可以传输多个参数。
16          可以传输一个数组。
17 
18      可变参数在方法内部本质上就是一个数组。
19      可变参数的注意事项:
20          1.一个形参列表中可变参数只能有一个!!
21          2.可变参数必须放在形参列表的最后面!!
22      小结:
23         记住。
24  */
25 public class MethodDemo {
26     public static void main(String[] args) {
27 
28         sum(); // 1、不传参数
29         sum(10); // 2、可以传输一个参数
30         sum(10, 20, 30); // 3、可以传输多个参数
31         sum(new int[]{10, 20, 30, 40, 50}); // 4、可以传输一个数组
32     }
33 
34     /**
35        注意:一个形参列表中只能有一个可变参数,可变参数必须放在形参列表的最后面
36      * @param nums
37      */
38     public static void sum(  int...nums){
39         // 注意:可变参数在方法内部其实就是一个数组。 nums
40         System.out.println("元素个数:" + nums.length);
41         System.out.println("元素内容:" + Arrays.toString(nums));
42     }
43 }
View Code

 

第四节  补充知识:集合工具类Collections

  1、

  2、

 

  3、

第五节  Collection体系的综合案例:斗地主小游戏

 1 package com.itheima.d4_collection_test;
 2 
 3 public class Card {
 4     private String size;
 5     private String color;
 6     private int index; // 牌的真正大小
 7 
 8     public Card(){
 9     }
10 
11     public Card(String size, String color, int index) {
12         this.size = size;
13         this.color = color;
14         this.index = index;
15     }
16 
17     public String getSize() {
18         return size;
19     }
20 
21     public void setSize(String size) {
22         this.size = size;
23     }
24 
25     public String getColor() {
26         return color;
27     }
28 
29     public void setColor(String color) {
30         this.color = color;
31     }
32 
33     public int getIndex() {
34         return index;
35     }
36 
37     public void setIndex(int index) {
38         this.index = index;
39     }
40 
41     @Override
42     public String toString() {
43         return size + color;
44     }
45 }
卡牌类
  1 package com.itheima.d4_collection_test;
  2 
  3 import java.util.*;
  4 
  5 /**
  6     目标:斗地主游戏的案例开发。
  7 
  8     业务需求分析:
  9         斗地主的做牌, 洗牌, 发牌, 排序(拓展知识), 看牌。
 10         业务: 总共有54张牌。
 11         点数: "3","4","5","6","7","8","9","10","J","Q","K","A","2"
 12         花色: "♠", "♥", "♣", "♦"
 13         大小王: "

标签:Map,10,--,maps,集合,println,out
From: https://www.cnblogs.com/Flower--Dance/p/16651913.html

相关文章

  • ping命令显示的TTL是什么意思
    ping命令显示的TTL是什么意思_Jack2013tong的博客-CSDN博客_ping设置ttl https://blog.csdn.net/huwei2003/article/details/53113874如下ping的结果C:\>ping192.168......
  • 锦标赛排序(树形选择排序)
    1.介绍树形选择排序(TreeSelectionSort),又称锦标赛排序(TournamentSort),是一种按照锦标赛思想进行选择排序的不稳定排序。2.实现原理如图所示,给定有8个元素的数......
  • 报告分享|2022中国财税数字化转型研究报告
    阅读全文:http://tecdat.cn/?p=28389财税助率化利型是个黄杂金距,作为经济其限的重要“配套服务”和“基础发挥”,财税行业正经历典型的,然震撼大,力世界的结构性负化,晕涉多方......
  • 关于ping以及TTL的分析
    ping[目标]的意思就是向目标发送几个数据包,之后如果目标接受到一个数据包,那么目标就会向发送ping的主机返回一个数据包比如上图,我ping了百度的服务器(windows下默认ping......
  • 报告分享|梅花数据:元宇宙品牌实践洞察报告
    原文链接:http://tecdat.cn/?p=28394 前言“元宇宙”⾃去年起,就成为科技界最热⻔的话题之⼀,科技公司、互联⽹⼤⼚纷纷布局元宇宙,抢占⻛⼝机会。在营销界,元宇宙的概念也......
  • 施工管理—3.施工进度管理
    一、建设工程项目进度控制的目标和任务1.建设工程项目总进度目标1.1总进度目标的内涵(1)建设工程项目的总进度目标指的是整个项目的进度目标。(2)它是在项目决策阶段......
  • HTTP2指纹识别(一种相对不为人知的网络指纹识别方法)
    这是关于网络指纹识别的两部分系列的第二部分上一部分我介绍了有关TLS指纹识别方法(以及在不同客户端的指纹有何区别):https://mp.weixin.qq.com/s/BvotXrFXwYvGWpqHKoj3u......
  • 右击菜单增加IobitUnlocker解锁
    WindowsRegistryEditorVersion5.00[HKEY_CLASSES_ROOT\Folder\shell\2IobitUnlocker]@="IobitUnlocker解锁"[HKEY_CLASSES_ROOT\Folder\shell\2IobitUnlocker\comman......
  • 时序分析9讲 边沿对齐下游PLL
    9讲  边沿对齐的模式下调整PLL使我们的时钟正确,满足建立时间余量,保持时间余量  设置PLL时钟    输出54M时钟,相移为0.  生成XDC文件,生成bit文......
  • 503 高精度乘法
    视频链接:LuoguP1303A*BProblem #include<iostream>#include<cstring>#include<algorithm>usingnamespacestd;constintN=100005;intA[N],B[N],C[N];......