1. 程式人生 > >java易錯易混難記點___1

java易錯易混難記點___1

一、list(陣列)

1.ArrayList LinkedList比較物件時用的都是物件的底層equals方法。

二.HashSet(雜湊表)

1.int hashCode()方法將返回物件的地址,當你複寫了此方法不再返回地址時,程式也可照常執行,因為程式是不會按照你所返回的地址進行運算的。

2.當你自定義一個物件時你通常應該複寫此物件的 int hashCode() boolean equals() 方法,以方便進行定義自己的判斷物件是否相同的方法及方便以後進行HashSet集合的使用。

3.HashSet判斷物件是否相同的方法

1) 如果hashCode值不同,不會呼叫物件的equals

方法

2) 如果hashCode值相同,再呼叫物件的equals方法

所以:當用HashSet儲存物件時,因為HashSet是不允許儲存相同物件的,所以一定要合理地重寫你自定義物件的hashCode方法,因為原方法將直接返回物件的記憶體地址,而物件的記憶體地址是絕對不一樣的,這樣的話HashSet中將儲存到相同的物件!當物件的hashCode方法返回同樣的值時,HashSet將呼叫物件的equals方法以判斷物件是否相同,如果不同才會儲存。

四、TreeSet(二叉樹)

1.TreeSet比較物件的方法為呼叫物件的compareTo()方法,且不能儲存相同的元素。

五、當自定義一個物件時應該做些什麼?

1、覆蓋hashCode()方法

2、覆蓋equals()方法//以便存放到HashSet

3、實現Comparable介面,實現compareTo()方法//以便存放到TreeSet

4、覆蓋toString()方法//便於直接列印物件時顯示有意義的資訊

六、IO

1、位元組流:通用,不僅可以處理圖片還可以處理文字,但當讀取同本機預設編碼表不一致的文字時將會出現亂碼。好像沒有緩衝,當寫資料的時候直接寫入,不需再重新整理。

2、字元流:不通用,不可以處理圖片,但內部融合了編碼表,可以指定檔案按哪種型別的編碼表進行讀取,以防出現亂碼。底部實現的方式任是位元組流,只是有多了自己的緩衝區,所以當寫入資料的時候需要重新整理。

3、當讀取檔案的時候不需要進行重新整理操作,但寫檔案的時候要進行重新整理操作,或者最後關閉流也可以。

8、緩衝區的特點

提高資料的存取效率,要結合流才能使用,在流的基礎上對流的功能進行了增強。

七、型別轉換

    //轉換為數字

       int d=integer.intValue();

       int d2=Integer.parseInt("5");

       //轉換成字串

       String s=String.valueOf(5);

       //編碼

       //1、按照預設字符集編碼

       //String---->byte[]  str.getBytes();

       //               str.getBytes(charsetname);

       //解碼

       //byte[]---->String   new String(byte []);

                           new String(byte[],charsetname);

       //     直接打印出byte[]陣列中的值

                           Arrays.toString(byte[]);

八、鍵盤錄入

當鍵盤錄入結束的條件是(a=in.read())!=-1時,當你錄入幾個字元並回車後,它在將你錄入的字元(包括回車鍵《\r\n》)完全處理完後,還會繼續等待你輸入,因為它迴圈結束的條件還沒有滿足,此時即使你輸入“-1”,程式還不會結束,因為“-1”佔兩個位元組,程式將逐個的讀取每一個位元組,所以得到的並不是“-1”這一位元組,這時只有“ctrl+c”才可以結束程式的執行。

九、File物件

1、getPath():無論檔案是否存在,都直接返回檔案定義時的路徑。

2、getAbsolutePath():無論檔案是否存在,都直接返回檔案實際儲存的位置,如果檔案不存在,則是當前目錄作文檔案的父目錄。

3、getParent():如果檔案定義時是相對路徑,由於檔案的父目錄有可能經常改變,所以將返回空。