首页 > 其他分享 >day14

day14

时间:2024-10-18 21:34:57浏览次数:1  
标签:name int sum 元素 day14 void public

Set

HashSet:Set集合的子类

    底层数据结构是哈希表,查找速度快,且元素唯一
    HashSet中的add方法实际上调用的是HashMap中的put方法
    底层和元素的hashCode方法值有关
    我们发现,底层判断待插入的元素是否已经存在哈希表中的方式是:
    将待插入的元素的哈希值与已经存储在哈希表中元素哈希值进行比较,
    然后再调用待插入的元素的equals方法比较已经存储在哈希表中元素。
    若哈希值一样,且equals结果为true,就表示这两个元素是同一个元素,不做添加

结论:
    若想要使用HashSet对元素进行去重,需要元素类型本身重写hashCode方法和equals方法。

LinkedHashSet:HashSet的子类

底层数据结构是哈希表和双链表。哈希表保证元素唯一,双链表保证元素有序,元素唯一

Collection:

        List:
        Set:
            HashSet:
                - LinkedHashSet:
            TreeSet: 底层数据结构是红黑树(自平衡二叉树),具备了可预测的排序
                - 自然排序
                - 比较器排序

TreeSet中的add方法实际上是调用了TreeMap中的put方法
要想使用TreeSet集合存储自定义对象且使用的是无参构造方法创建TreeSet集合对象的话,
    需要元素类型实现Comparable<元素类型>接口,实现compareTo方法
    compareTo方法根据需求来定制

使用比较器排序

有参构造方法
public static void main(String[] args) {
        //使用比较器排序,按照年龄从小到大排序
        //    public TreeSet(Comparator<? super E> comparator) {
        //        this(new TreeMap<>(comparator));
        //    }
        TreeSet<Cat> set1 = new TreeSet<>(new Comparator<Cat>() {
            @Override
            public int compare(Cat o1, Cat o2) {
                // o1是待插入的元素
                // o2是要比较的根元素
                int i1 = o1.getAge() - o2.getAge();
                return (i1 == 0) ? o1.getName().compareTo(o2.getName()) : i1;
            }  
});

自然排序

无参构造方法需要元素类型实现Comparable<元素类型>接口,实现compareTo方法
compareTo方法根据需求来定制
public class Teacher implements Comparable<Teacher>{
    private String name;
    private int age;

    public Teacher() {
    }

    public Teacher(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "Teacher{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }

    @Override
    public int compareTo(Teacher o) {
        //cmp = k.compareTo(t.key);
        // this - 待插入元素
        // o - 要比较的根元素
        //当姓名和年龄一样的时候去重,年龄需要从小到大排序
//        return this.age - o.getAge();
        //显式条件
        int i1 = this.age - o.getAge();
        //隐式条件
        //当年龄一样的时候,姓名不一定一样
        return (i1==0)?this.name.compareTo(o.name):i1;
    }
}

Map

Map集合:元素是键值对构成的

    Map特点:
        1、在同一个Map集合中,键是唯一的
        2、在同一个Map集合中,值可以发生重复
        3、一对键值,表示Map集合中的一个元素


    Map集合中的方法:
        V put(K key,V value)  向集合中添加一对元素  返回键原本的旧值
        V remove(Object key)  根据键移除一个键值对
        void clear()  清空
        boolean containsKey(Object key)  判断键是否存在
        boolean containsValue(Object value)  判断值是否存在
        boolean isEmpty()  判断Map集合中是否有键值对
        int size()  返回Map集合中键值对的元素个数
        V get(Object key)  根据键获取值
        Set<K> keySet()  获取所有的键
        Collection<V> values()  获取所有的值
        Set<Map.Entry<K,V>> entrySet() 获取所有键值对

增强for循环

/*
    增强for循环:是用来替代迭代器的,只能遍历数组以及Collection集合
    语句定义格式:
        for(元素的类型 变量名 : 数组|Collection集合){
            直接使用变量名相当于使用元素;
        }
 */

遍历

// 方式1:获取所有的键,遍历键,根据键获取值
//        Set<Integer> keySet = map1.keySet();
//        for (Integer key : keySet) {
//            String value = map1.get(key);
//            System.out.println(key + "-" + value);
//        }

        // 方式2:直接获取所有的键值对,遍历每一个键值对得到每一个键和值
        //Set<Map.Entry<K,V>> entrySet()
        Set<Map.Entry<Integer, String>> entries = map1.entrySet();
        for (Map.Entry<Integer, String> entry : entries) {
            Integer key = entry.getKey();
            String value = entry.getValue();
            System.out.println(key + ":" + value);
        }

HashMap

import java.util.HashMap;

/*
    HashMap<Student3,String>

    Map的唯一性指的是键的唯一性,HashMap中需要键的类型要重写hashCode()方法和equals方法

 */
public class HashMapDemo1 {
    public static void main(String[] args) {
        HashMap<Student3, String> map1 = new HashMap<>();

        Student3 s1 = new Student3("李刚", 21);
        Student3 s2 = new Student3("钱志强", 22);
        Student3 s3 = new Student3("江川", 21);
        Student3 s4 = new Student3("李刚", 21);
        Student3 s5 = new Student3("吴问强", 23);

        map1.put(s1, "打羽毛球");
        map1.put(s2, "唱");
        map1.put(s3, "跳");
        map1.put(s4, "看美女");
        map1.put(s5, "打游戏");

        System.out.println("map1: " + map1);


    }
}

可变参数

import java.util.Arrays;
import java.util.List;

public class KeBianCanShuDemo {
    public static void main(String[] args) {
        //需求1:求两个int类型的数之和
        int a = 3;
        int b = 4;
        sum(a, b);

        //需求2:求三个int类型的数之和
        int c = 5;
        sum(a, b, c);

        //需求3:求四个int类型的数之和
        int d = 6;
        sum(a, b, c, d);

        int e = 7;
        sum(a,b,c,d,e);

        //需求:传入一个人的姓名和若干门考试成绩,求这个人的总分
        getSumScoreWithName("李刚",98,99,100);
        getSumScoreWithName("钱志强",78,88);
//        getSumScoreWithName2(78,88,"钱志强");

        //可变参数的应用
        //Arrays工具类中有一个方法是将传入的参数封装成一个List集合
        List<Integer> list = Arrays.asList(11, 22, 33, 44, 55); // ArrayList

    }

    //可变参数只能在最后一个参数定义出来
//    public static void getSumScoreWithName2(int... arr,String name) {
//        int sum = 0;
//        for (int i : arr) {
//            sum+=i;
//        }
//        System.out.println(name+"总分为:"+sum);
//    }


    public static void getSumScoreWithName(String name,int... arr) {
        int sum = 0;
        for (int i : arr) {
            sum+=i;
        }
        System.out.println(name+"总分为:"+sum);
    }

    public static void sum(int... arr) {
        int sum = 0;
        for (int i : arr) {
            sum+=i;
        }
        System.out.println(sum);
    }

//    public static void sum(int a, int b) {
//        System.out.println(a + b);
//    }
//
//    public static void sum(int a, int b, int c) {
//        System.out.println(a + b + c);
//    }
//
//    public static void sum(int a, int b, int c, int d) {
//        System.out.println(a + b + c + d);
//    }

}

标签:name,int,sum,元素,day14,void,public
From: https://www.cnblogs.com/flxf/p/18475086

相关文章

  • java_day14_HashSet、TreeSet、增强for循环、Map、HashMap、TreeMap、可变参数
    一、HashSetSet:HashSet:底层数据结构是哈希表,查找速度快,且元素唯一HashSet中的add方法实际上调用的是HashMap中的put方法底层和元素的hashCode方法值有关我们发现,底层判断待插入的元素是否已经存在哈希表中的方式是:将待插入的元素的哈希值与已经存......
  • day14-单元测试、反射、注解、动态代理
    day14-单元测试、反射恭喜同学们,Java主要的知识我们其实已经学习得差不多了。今天同学们再把单元测试、反射、注解、动态代理学习完。Java的基础知识就算全齐活了。首先,我们进入单元测试的学习。一、单元测试1.1单元测试快速入门所谓单元测试,就是针对最小的功能单元,编写测试......
  • Day14--Dowhile循环
    Day14--Dowhile循环对于while语句而言,如果不满足条件,则不能进入循环。但有时候我们需要即使不满足条件,也至少执行一次。do...while循环和while循环相似,不同的是:do...while循环至少会执行一次。do{//代码语句}while(布尔表达式);While和do-While的区别......
  • Day14--while循环
    Day14--while循环三种循环结构。while循环、do...while循环、for循环。在Java5中引入了一种主要用于数组的增强型for循环。while循环while是最基本的循环,它的结构为:while(布尔表达式){//循环内容}只要布尔表达式为true,循环就会一直执行下去。我们大多数情况......
  • DAY14 二叉树part04
    找树左下角的值513.找树左下角的值迭代法层序遍历classSolution{publicList<List<Integer>>reList=newArrayList<>();publicintfindBottomLeftValue(TreeNoderoot){check(root);intindex=reList.size()-1;......
  • leetcode刷题day14|二叉树Part02(以递归方法为主:226.翻转二叉树、101. 对称二叉树、104
    226.翻转二叉树思路:利用先序遍历递归翻转1、终止条件:节点为空,return2、参数:root3、递归函数逻辑:处理中间节点,交换;递归左孩子,递归右孩子代码如下:classSolution{publicTreeNodeinvertTree(TreeNoderoot){if(root==null)returnroot;swapC......
  • Day14|第六章 二叉树 part02| 226.翻转二叉树| 101. 对称二叉树| 104.二叉树的最大深
    226.翻转二叉树(递归只能前序或者后序,中序不行)classSolution{publicTreeNodeinvertTree(TreeNoderoot){if(root==null)returnnull;swap(root);invertTree(root.left);invertTree(root.right);//swap(root);......
  • day14打卡
    最大二叉树classSolution{public:intgetmax(vector&vec){intindex=0;intmax=INT_MIN;for(inti=0;i<vec.size();++i){if(max<vec[i]){max=vec[i];index=i;}}returnindex;}TreeNode*traversal(vector&nums){if(nums.empt......
  • 【题解】Solution Set - NOIP2024集训Day14 CDQ分治
    【题解】SolutionSet-NOIP2024集训Day14CDQ分治https://www.becoder.com.cn/contest/5482「CF364E」EmptyRectangles*3000摆烂了。「SDOI2011」拦截导弹CDQ的例题,之前做过(现在试图自己再做出来。第二问只用在第一问里面记录每一次是从哪个\(j\)​转移过来的,以及......
  • 代码随想录Day14
    226.翻转二叉树给你一棵二叉树的根节点root,翻转这棵二叉树,并返回其根节点。示例1:输入:root=[4,2,7,1,3,6,9]输出:[4,7,2,9,6,3,1]示例2:输入:root=[2,1,3]输出:[2,3,1]示例3:输入:root=[]输出:[]提示:树中节点数目范围在[0,100]内-100<=Node.val<=100......