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

2022/9/5 1:25:00

本文主要是介绍JAVA进阶--Collection集合之Set系列集合、可变参数、Collections工具类、Map集合体系、集合的嵌套--2022年9月3日,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

第一节  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         大小王: "

	


这篇关于JAVA进阶--Collection集合之Set系列集合、可变参数、Collections工具类、Map集合体系、集合的嵌套--2022年9月3日的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程