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 一個數值
\\w a-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。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章