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():如果檔案定義時是相對路徑,由於檔案的父目錄有可能經常改變,所以將返回空。