Java基础-1

Java基础-1

一、HelloWord

/**
*打印字符串
*@author 01
*@version 1.0 2019-7-15
*/
public class Main {
    public static void main(String[] args){
        System.out.println("Hello world!");//打印
    }
}
  1. 每个文件可以有多个class,但只能有一个public class 其中类名与文件名相同
  2. public 是权限修饰符,所有类都可以访问;private是只有所在的类内可以访问,子类可以继承但是不能访问;protected是子类可以继承也能访问,包外不能访问;默认是define,只有包内可以访问。
  3. import写在package之后
  4. 注释写法和C语言一样
  5. 最好是一个类一个文件
  6. 类名最好大写

  7. 编译后的后缀名是.class 是执行文件,源代码后缀是.java

  8. 源代码编译成.class文件,class文件由JVM解释执行,所以java是半编译,半解释型语言。

二、数据类型

  1. boolean //1位 不能类型转换
  2. byte //1个字节 ASCII编码,和C的char相等,本质其实是整形
  3. char //2个字节 UTF-16即unicode编码
  4. short //2个字节
  5. int //4个字节
  6. long //8个字节  18位以内一定不会溢出
  7. float //4个字节
  8. double //8个字节

数据写法与类型转换

  1. 整数数值默认int,long的写法是加L或l后缀
  2. 浮点默认是double,自动加后缀D,float要加f或F后缀
  3. 数据转换:大内存类型不能转小内存类型、int 不能转float,long不能转double
  4. char可以转int,但不能按d%打印
  5. 0b或0B表示2进制
  6. 0x或0X表示16进制
  7. 浮点16进制科学计数法 0XFF00P2,p后面跟的是2的指数,e后跟的是10的指数,只有16进制浮点有p
  8. 非10进制小数写法只有科学计数法
  9. 数值为了方便看,可以加_分割符,比如0B0100_0100,1_000_000
  10. 0.0d/0=>Double.NaN
  11. 1.0d/0是无穷大,0/0或1/0报错,因为只有double有无穷大无穷小和NaN(not is number)
  12. 2.0-1.1结果为0.8999......

三、变量

  1. final 修饰常量
  2. 变量定义可以有$,其他和C一样,但是$最好不用
  3. java没有逗号表达式
  4. 变量必须初始化才能用,属性会默认初始化
  5. 超过18位的整数用BigInteger类
  6. 复杂数学计算用java.lang.Math类

四、字符串

常用函数

  1. charAt(int index)
  2. codePoinAt(int index)
  3. compareTo(String other)
  4. subSyting(int n)
  5. subString(int n,int m)
  6. equals(String s)
  7. length()
  8. replace()
  9. replaceAll()
  10. toLowerCase()
  11. trim()
  12. String.join(...)
  13. indexOf(String s)
  14. lastIndexOf(String s)
  15. startWith(String s)
  16. endWith(String s)
  17. Integer.toBinaryString(int i)
  18. repeat(int n)  //java12才有
  19. String.format

StringBuilder

  1. insert
  2. delete
  3. append
  4. reverse
  5. setCharAt

五、输入输出

1、格式化输出

System.out.format()

  1. %d
  2. %x
  3. %a  //16进制浮点
  4. %o //8进制
  5. %,3.2f
  6. %e
  7. %g
  8. %s //类型转字符串输出
  9. %c
  10. %b

2、输入输出

用java写PTA的题,如果输入选scanner,很容易发生超时。用缓存流输入效率会高很多。不过代码比较多,没办法,java语言没有像C语言一样的scanf。

下面是一个输入n行矩阵放入整形数组中,然后打印出来的代码。很简单的功能,但是要写这么多,有时候java比C还啰嗦很多。

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.stream.Collectors;

public class Solution {
    
    private static void outputArray(int[] a){
        var s=Arrays.stream(a).mapToObj(x-> x+"").collect(Collectors.joining(" "));
        System.out.println(s);
    }
    
    private static int[] inputArray(BufferedReader br, int n) throws IOException {
        int[] a=new int[n];
        String[] str = br.readLine().split("\\s");
        for (int i = 0; i < n; i++) {
            a[i] = Integer.parseInt(str[i]);
        }
        return a;
    }

    public static void main(String[] args) throws IOException {
        BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
        int n=Integer.parseInt(br.readLine());
        int[][] a=new int[n][n];
        for(int j=0;j<n;j++) {
            a[j]=inputArray(br,n);
        }
        for (int[] i:a)
            outputArray(i);
    }
}

六、数组


        int[] a={1,2,5,4,3,6,1};
        //copy#1
        int[] b=new int[10];
        System.arraycopy(a,0,b,0,a.length);
        System.out.println(Arrays.toString(b));
        //copy#2
        b=Arrays.copyOf(a,9);
        System.out.println(Arrays.toString(b));
        //copy#3
        int[] c=Arrays.copyOfRange(a,0,4);
        System.out.println(Arrays.toString(c));
        //快排
        Arrays.sort(a);
        System.out.println(Arrays.toString(a));
        //二分查找
        int i=Arrays.binarySearch(a,3);
        System.out.println(i);
        //fill
        Arrays.fill(a,3);
        System.out.println(Arrays.toString(a));
    

七、正则表达式

pattern新建方法:调用Pattern.compile

正则符号意思
\\d一个数值
\\wa-zA-Z0-9
\\s空格和会车
\\\\\
\n回车
+{1,}
*{0,}
?{0,1}
.任意字符
$结束
^开始
[^]表示不是括起来的内容
[]表示括起来的内容中选其中一个
|或者
\b单词边界,非捕获
.*?非贪婪
(?=) 

八、数据结构

HashMap根据hashcode进行存储,调用key的equals,hashcode和==判断key是否相等,key只能是唯一的,hash碰撞时,用红黑树存储。

get取值根据equals和hashcode取值。根据hashcode获取数组下标,根据equals查找对应的key。

如果equals和hashcode不一致,就很容易出现错误,造成取不出来的情况。数组下标一样,hashcode不一定一样,但是hashcode不一样,equals又恰好一样,就会产生取不出来的情况。

另外,如果重写hashcode方法,根据属性内容计算hashcode,变量的hash值会根据变量的内容变化,同时数组下标位置不会变,这样也会发生错误。比如本来equals相等,hashcode相等的key是不能同时存在的,但如果放进去的时候不同,经过后来变量的赋值,变的一样了,其中一个值就会取不出来。

但如果不重写呢?不重写是根据内存地址计算hashcode,这样就不能根据内容取数据,只能根据实例取数据。这样的话,最好把equals重写成==。这样万无一失。

LinkedList作为栈的操作是push和pop,队列是offer和poll。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值