0
点赞
收藏
分享

微信扫一扫

4.3总结

i奇异 2022-04-04 阅读 22

一、每日一题

73. 矩阵置零 - 力扣(LeetCode) (leetcode-cn.com)

思路:首先创建一个标记数组,初始值都为0,标记为未访问,从头开始遍历矩阵,遇到值为0的位置并且标记数组的值为0的位置,就将该行以及该列在矩阵中的值都变为0。但是会遇到原本值不为0,但是它所在的行和列的值是0,因而将它变成了0,所以我们要对它进行标记,访问到它的时候就直接判断出它是由不为0的值变过来的。还有原本为0的值,即使它所在的行和列前面已经有0,所以我们需要将它仍然标记为0,将它和原本不为0,但后面变为0的值区分开来。

class Solution {
    public void setZeroes(int[][] matrix) {
        int[][] v=new int[matrix.length][matrix[0].length];//创建标记数组
        for(int i=0;i<matrix.length;i++)
        {
            for(int j=0;j<matrix[0].length;j++)
            {
                if(matrix[i][j]==0&&v[i][j]==0)//如果是前面不是0,但是因为所在行或者所在列有开始的时候值为0的数而变成0的,就不能执行这里
                {
                    for(int l=0;l<matrix[0].length;l++)//将该行全变为0
                    {
                        if(matrix[i][l]!=0)//只要标记原本不为0的位置
                        {
                            matrix[i][l]=0;
                            v[i][l]=1;
                        }
                    }
                    for(int l=0;l<matrix.length;l++)将该列全变为0
                    {
                        if(matrix[l][j]!=0)//只要标记原本的值不为0的位置
                        {
                            matrix[l][j]=0;
                            v[l][j]=1;
                        }
                    }
                }
            }
        }
    }
}

二、Java学习

1.封装类、自动拆箱和自动装箱

自动装箱是把一个基本类型的变量赋给一个包装类变量,或者赋给Object类变量。而自动拆箱则是把一个包装类变量赋给一个基本类型变量。两者都要注意类型匹配。

public class AutoBoxingUnboxing {
    public static void main(String[] args)
    {
        Integer inObj=5;//自动装箱
        Object boolObj=true;//自动装箱
        int it=inObj;//自动拆箱
        if(boolObj instanceof Boolean)
        {
            boolean b=(Boolean)boolObj;
            System.out.println(b);
        }
        System.out.println(inObj);
        System.out.println(it);
    }
}

 

 注意,只是所有的引用类型继承了Object类,而基本数据类型没有。

基本类型与字符串之间的转换

public class Primitive2String {
    public static void main(String[] args)
    {
        String intStr="1019";
        int it1=Integer.parseInt(intStr);//字符串转基本类型
        int it2=new Integer(intStr);
        System.out.println(it1);
        System.out.println(it2);
        String floatStr="10.19";
        float fl1=Float.parseFloat(floatStr);
        float fl2=new Float(floatStr);
        System.out.println(fl1);
        System.out.println(fl2);
        String ftStr=String.valueOf(19.91f);//基本类型转字符串
        System.out.println(ftStr);
        String dbStr=String.valueOf(10.19);
        System.out.println(dbStr);
        String boolStr=String.valueOf(true);
        System.out.println(boolStr);
    }
}

 int类型的数据自动装箱为Integer实例时,如果数据的大小范围在-128~127之间,系统把实例放入一个名为cache的数组里面缓存起来。所以数据大小范围在-128~127的数据创建Integer实例实际上是直接指向数组中对应的元素,所以它们全部相等。如果不在这个范围内的整数自动装箱成Integer实例时,系统会重新创建一个Integer实例,而对于引用类型来说,==是比较地址的,所以会出现false这种情况。

2.toString方法

为了获取的是对象的属性值需要重写toString()方法。

下面重写toString方法,来展示苹果的属性,打印出苹果这个对象的“自我描述”信息。

class Applee
{
    private String color;
    private double weight;
    public Applee(){}
    public Applee(String color,double weight)
    {
        this.color=color;
        this.weight=weight;
    }
    public void colorSet(String co)
    {
        color=co;
    }
    public String colorGet()
    {
        return color;
    }
    public void weightSet(double dd)
    {
        weight=dd;
    }
    public double weightGet()
    {
        return weight;
    }
    public String toString()
    {
        return "有一个苹果,颜色是"+color+",重量是"+weight+"g";
    }
}
public class ToStringTest {
    public static void main(String[] args) {
        Applee a=new Applee("橙色",10.19);
        System.out.println(a);
    }
}

toString方法一般返回的都是字符串,所以上面重写的toString方法可以修改一下。

public String toString()
    {
        //return "有一个苹果,颜色是"+color+",重量是"+weight+"g";
        return "Apple[color="+color+",weight="+weight+"]";
    }

3.==与equals

对于基本类型的变量来说,只要两个变量的值相等,就会输出true,而且这两个的结果是一样的,但对于引用型变量来说,==只有当两个变量同时指向同一个对象时,才会返回true,equals是当两个引用型变量值相同时返回true。

public class EqualTest {
    public static void main(String[] args) {
        int it=65;
        float fl=65.0f;
        System.out.println("it和fl是否相等:"+(it==fl));
        char ch='A';
        System.out.println("it和ch是否相等:"+(it==ch));
        String str1="Hello";
        String str2="Hello";
        System.out.println("str1和str2是否相等:"+(str1==str2));
        System.out.println("str1是否equals str2:"+(str1.equals(str2)));
        String str3=new String("Hello");
        String str4=new String("Hello");
        System.out.println("str3和str4是否相等:"+(str3==str4));
        System.out.println("str3是否equals str4:"+(str3.equals(str4)));
    }
}

JVM使用常量池管理字符串直接量

public class StringCompareTest {
    public static void main(String[] args) {
        String s1="疯狂Java";//s1直接引用常量池中的"疯狂Java"
        String s2="疯狂";
        String s3="Java";
        String s4="疯狂"+"Java";//s4在编译时就可以确定它的值,所以它直接引用常量池中的"疯狂Java"
        String s5="疯"+"狂"+"Java";//s5也是在编译时就可以确定它的值,所以直接引用
        String s6=s2+s3;//s6不能在编译时就确定,所以不能直接引用
        String s7=new String("疯狂Java");//用堆内存创建String对象
        System.out.println(s1==s4);
        System.out.println(s1==s5);
        System.out.println(s1==s6);
        System.out.println(s1==s7);
    }
}

 4.泛型

较大程度是想让集合记住元素类型。因为将元素放进集合时,集合会忘记元素类型,将其当做Object类进行处理(编译时类型变为Object类,运行时类型没变)。

三、SQL学习

查看不同年龄段的用户明细_牛客题霸_牛客网 (nowcoder.com)

SELECT device_id,gender,
CASE
WHEN age<20 THEN "20岁以下"
WHEN age>=20&&age<=24 THEN "20-24岁"
WHEN age>=25 THEN "25岁及以上"
ELSE "其他"
END AS age_cut
FROM user_profile

计算25岁以上和以下的用户数量_牛客题霸_牛客网 (nowcoder.com)

SELECT CASE
WHEN age<25 or age is null THEN "25岁以下"
ELSE "25岁及以上"
end as age_cut,count(*) number
From user_profile
GROUP BY age_cut

截取出年龄_牛客题霸_牛客网 (nowcoder.com)

SELECT
SUBSTRING(profile,12,2) AS age,
COUNT(*) AS number
FROM user_submit
GROUP BY age

统计每种性别的人数_牛客题霸_牛客网 (nowcoder.com)

SELECT SUBSTRING(profile,15) AS gender,
COUNT(*) AS number
FROM user_submit
GROUP BY gender
举报

相关推荐

0 条评论