Java刷题过程的一些重要知识点:

知识点1
1.位运算函数,lowbit()函数:这个函数的作用是:lowbit()函数用来取一个二进制最低位的一与后边的0组成的数
例:5(101),lowbit(5)=1(1)
12(1100),lowbit(12)=4(100)
2.原理:其实我知道这个函数就够了,但是还是将原理放在这里方便以后看看:
由于数在计算机里以补码的方式储存,运用位运算可返回只有一个位上有1的数

int lowbit(int x)
{
	return x & -x;
    // return x &(~x+1);
}
//原码最后一位1 —> 其反码那一位是0,后面位全是1 —> 反码转化为补码—> 原码和补码最后一位1的地方相同 —> 进行与运算 —>得出lowbit

知识点2:如果该二叉树是二叉搜索树,直接对该树进行中序遍历便可以得到一个递增序列

知识点3int min1=Integer.MAX_VALUE; 这行代码可以将初值赋值为最大的整数

知识点4Math.abs(); 求某个数的绝对值

知识点5
队列Queue是一个抽象类我们一般使用其子类就可以了:LinkedList
注意Linked也是符合队列的特征先进先出
队列的一些重要方法:
入队列:add()当队列满了以后再入队列会触发异常 offer()当队列满了以后会return false;
出队列:remoe()将元素删除并将该原数返回,如果队列为空会触发异常 poll()不会触发异常
返回队首元素:peek();

知识点6:有关java中基本数据类型和引用数据类型的问题:
1.基本类型:
基本数据类型只有8种,可按照如下分类
①整数类型:long、int、short、byte
②浮点类型:float、double
③字符类型:char
④布尔类型:boolean

2.引用数据类型:
引用数据类型非常多,大致包括:类、 接口类型、 数组类型、 枚举类型、 注解类型、 字符串型
例如,String类型就是引用类型,还有Double,Byte,Long,Float,Char,Boolean,Short(注意这里和基本类型相比首字母是大写)
简单来说,所有的非基本数据类型都是引用数据类型

3.基本数据类型和引用数据类型的区别:
基本变量类型:在方法中定义的非全局基本数据类型变量,调用方法时作为参数是按数值传递的
引用变量类型:引用数据类型变量,调用方法时作为参数是按引用传递的
引用传递指的是修改时会互相影响

注意:字符串虽然是引用数据类型,但它的传递方式为值传递

知识点7:将一维数组初始化为某一固定值

 Arrays.fill(a[i],Integer.MAX_VALUE);

将二维数组初始化为某一固定值

for(int i=0;i<deep;i++){
    Arrays.fill(a[i],Integer.MAX_VALUE);
} 

知识点8:在使用集合宝存数字时如果想要直接或取该具体的对象,list.get(),remove()里面的数字应转化为包装类,不然数字会被认为时索引

       // 将start包装成对象避免其认为为index
            int start=edges[i][0];
            int end=edges[i][1];
            list.get(start).remove(new Integer(end));
            list.get(end).remove(new Integer(start));

知识点9:判断两个数组的数据是否相等可以使用Arrays.eauals(int[],int[]);

知识点10: getOrDefault(Object key, V defaultValue)
意思就是当Map集合中有这个key时,就使用这个key对应的value值,如果没有就使用默认值defaultValue

知识点11:使用java api 将字符串逆序

       //   这里我直接使用java api,判断逆序后的字符串和原来的字符串是否相等
        String temp=s.substring(lp,rp+1);
        String revtemp=new StringBuffer(temp).reverse().toString();

知识点12::如何创建一个散列表:

       // 这里的语法也没怎么使用过,居然还有集合类型的数组,这样就更加方便了
        // 我之前都是使用集合的嵌套完成的散列表
        List<Character>[] force = new List[n];在这里插入代码片

知识点13::如何创建一个新的队列:

LinkedList实现的是Deque接口,Deque继承了Queue

       // 这是一个新的语法,我之前都是用Queue<> queue=new LinkedList<>();
        Deque<Integer> queue = new ArrayDeque<Integer>();

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

知识点14:

  // 因为正则表达式中"+“为特殊符号,是量词,表示{1,},因此,要匹配”+“这个字符,需要转义”\+",java中要"\\+"
    String[] arry1=num1.split("\\+");
    String[] arry2=num2.split("\\+");

知识点15:

Integer.parseInt("00");//0
Integer.parseInt("0012");//12

知识点16:: 将字符数组转化为字符串的方法

char[] arr=[a,b,c,d];
 String key = new String(arr);//abcd(字符串)
 String temp=Arrays.toString(arr);//[a,b,c,d](字符串)

知识点17:java8更新了一个箭头函数:Lambda 允许把函数作为一个方法的参数(函数作为参数传递进方法中)。

       Arrays.sort(words, (a, b) -> {
            if (a.length() != b.length()) {
                return a.length() - b.length();
            }
            // 相同长度下把字典序较大的排在前面
            return b.compareTo(a);
        });

知识点18
在这里插入图片描述
在这里插入图片描述

知识点19
Calendar是java util包下的一个工具类,提供了很方便的不同日期格式的处理。啥也不说了,直接撸代码:

public static void main(String[] args) {
        
        System.out.println("------------Calendar无参构造------------");
        //Calendar对象,不传参数,默认为当前日期
        Calendar calendar =new GregorianCalendar();
        //获取当前年份
        System.out.println(calendar.get(Calendar.YEAR));
        //获取当前月份 从0开始,0代表一月,1代表二月,以此类推
        System.out.println(calendar.get(Calendar.MONTH));
        //获取当前日期 也可以使用DAY_OF_MONTH
        System.out.println(calendar.get(Calendar.DATE));
        //获取当前时 24小时进制
        System.out.println(calendar.get(Calendar.HOUR_OF_DAY));
        //获取当前分
        System.out.println(calendar.get(Calendar.MINUTE));
        //获取当前秒
        System.out.println(calendar.get(Calendar.SECOND));

        //获取今天是这个月的第几个星期
        System.out.println(calendar.get(Calendar.WEEK_OF_MONTH));
        //获取今天是星期几  1表示星期天,2表示星期一,以此类推
        System.out.println(calendar.get(Calendar.DAY_OF_WEEK));


        System.out.println("------------Calendar有参构造------------");
        /**
         * 有参构造 分别代表年月日时分秒,写法简单明了,很符合我们人类的思维
         * 注意月份的设置是从0开始的,这里设置的是月份是6,实际是设置了7月份
         */
        calendar =new GregorianCalendar(2019, 6, 14, 16, 15,30);
        /**
         * 除了在构造方法直接设置之外,也可以通过set方法设置
         * 第一个参数表示设置的参数类型,第二个表示具体值
         */
        calendar.set(Calendar.YEAR, 2000);
        calendar.set(Calendar.MONTH, 0);
        calendar.set(Calendar.DATE, 20);
        //...


        System.out.println("------------Calendar和Date转换------------");
        Date now = calendar.getTime();
        calendar.setTime(now);


        System.out.println("------------Calendar日期计算以及判断------------");
        calendar = new GregorianCalendar();
        Calendar calendar2 = new GregorianCalendar();
        calendar2.set(Calendar.YEAR, 2800);
        //是否在某个时间(calendar2)之后
        System.out.println(calendar.after(calendar2));
        //是否在某个时间(calendar2)之前
        System.out.println(calendar.before(calendar2));
        //增加多少年年,月日以及时分秒同理
        calendar.add(Calendar.YEAR, -10);

    }

Calendar.getInstance()中的getInstance()函数

getInstance()是Calendar提供的一个类方法,它的作用是获得一个Calendar类型的通用对象,getInstance()将返回一个Calendar的对象。

还有一点关于 为什么不用 Calendar c=new Calendar();

原因是:
Calendar类是一个抽象类,在实际使用时实现特定的子类的对象。由于Calendar类是抽象类,且Calendar类的构造方法是protected的,所以无法使用Calendar类的构造方法来创建对象,API中提供了getInstance方法用来创建对象。

所以定义一个Calendar对象就应该为:

Calendar  cal= Calendar.getInstance();

知识点20: 使用BigInteger来处理一些long以及Integer处理不了的值,不过BigInteger没有办法直接进行加减乘除必须使用方法来进行操作,详细的代码如下:

public class BigInteger_ {
    public static void main(String[] args) {
        //当我们编程中,需要处理很大的整数,long 不够用
        //可以使用BigInteger 的类来搞定
        // long l = 23788888899999999999999999999l;
        // System.out.println("l=" + l);
        BigInteger bigInteger = new BigInteger("12138888888888888888888");
        BigInteger bigInteger2 = new BigInteger("12138121383141592653571234531");
        System.out.println(bigInteger);
        //老韩解读
        //1. 在对BigInteger 进行加减乘除的时候,需要使用对应的方法,不能直接进行+ - * /
        //2. 可以创建一个要操作的BigInteger 然后进行相应操作
        BigInteger add = bigInteger.add(bigInteger2);
        System.out.println(add);//
        BigInteger subtract = bigInteger.subtract(bigInteger2);
        System.out.println(subtract);//减
        BigInteger multiply = bigInteger.multiply(bigInteger2);
        System.out.println(multiply);//乘
        BigInteger divide = bigInteger.divide(bigInteger2);
        System.out.println(divide);//除
    }
}

知识点22::日期类Date与日历类的相互转换
Calender转Date


   Calendar c = Calendar.getInstance();
   Date d = c.getTime();
   

Date转化为Calendar


    Date date=new Date();  
    Calendar cal=Calendar.getInstance();  
    cal.setTime(date);  
    

**知识点23 **:对于一些输入量过大的题目使用Scanner会曹处内存心事,我们可以改用

	static BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
	static StreamTokenizer st=new StreamTokenizer(br);
    static int nextInt() throws IOException{
        st.nextToken();
        return (int) st.nval;
    }

知识点20: 在使用map时,因为HashMap是无序的所以迭代时并不会按照我们的输入进行输出,想要迭代时按照我们的输入顺序进行输出可以使用LinkedHashMap

 Map<Integer,Integer> map=new LinkedHashMap<Integer,Integer>();

知识点21:将mao键值对进行输出

	  Set<Integer> set=map.keySet();
	  Iterator<Integer> it = set.iterator();
	  while(it.hasNext()) {
		  Integer key=it.next();
		  Integer result=map.get(key);
		  System.out.println(key+" "+result);
	  }

**知识点21 ** : map的get方法进化版

map.put(nums[i], map.getOrDefault(nums[i], 0)+1);

知识点

知识点
知识点

知识点

知识点

知识点
知识点

知识点

知识点

知识点
知识点

知识点

知识点

知识点
知识点

知识点

知识点

知识点
知识点

知识点

知识点

知识点
知识点

知识点

知识点

知识点
知识点

知识点

知识点

知识点
知识点

知识点

知识点

知识点
知识点

知识点

知识点

知识点
知识点

知识点

知识点

知识点

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值