如何選擇數據結構java
Array 讀快改慢數組
Linked改快讀慢緩存
Hash二者之間數據結構
Map 接口編碼
實現Map接口的類用來存儲key-valuespa
Map接口的實現類有HashMap和TreeMap(二叉樹)code
Map類中存儲的key-value對經過鍵來標識,因此鍵值不能重複(equals is too slow, so that hashcode can be used)對象
Object put(Object key, Object value);繼承
Object get(Object key)接口
Object remove(Object key)
Boolean containsKey(Object key)
Boolean containsValue()
Auto-boxing/unboxing
在合適的時機自動打包、解包:
自動將基礎類型轉換爲對象
自動將對象轉換爲基礎類型
JDK 1.5泛型
裝入集合的類型都被看成Object對待,從而失去本身的實際類型
從集合中取出時每每須要轉型
解決辦法:
在定義集合的時候同時定義集合中對象的類型
能夠在定義Collection的時候指定
也能夠在循環時用Iterator制定
好處:加強程序的可讀性和穩定性
Class Name implements Comparable<Name> {
Public String toString() { }
Public Boolean equals(Object obj){}
Public int hashCode(){}
Public int compareTo(Name n){}
}
1136
一個圖
一個類: Collections
三個知識點:
For
Generic
Auto-boxing/ unboxing
六個接口
流
在Java程序中,對於數據的輸入/輸出操做以stream方式進行
Java.io 包中定義了多個流類型來實現輸入/輸出功能;能夠從不一樣的角度進行分類:
按數據流的方向不一樣能夠分爲輸入流和輸出流(站在程序的角度上)
按處理數據單位不一樣能夠分爲字節流和字符流(一個字符兩個字節)
按照功能不一樣能夠分爲節點流和處理流
節點流爲能夠從一個特定的數據源(節點)讀寫數據(如 文件 內存)
處理流是鏈接在已存在的流之上,經過對數據的處理爲程序提供更爲強大的讀寫功能
J2SDK所提供的全部流類型位於包java.io 內都分別繼承自如下四種抽象流類型
|
字節流 |
字符流 |
輸入流 |
InputStream |
Reader |
輸出流 |
OutputStream |
Writer |
InputStream的基本方法:
Int read() throws IOException // 讀取一個字節並以整數的形式返回 0~255;若是返回-1已到輸入流的末尾
Int read (byte [] buffer) throws IOException //讀取一系列字節並存儲到一個數組buffer
//返回實際讀取的字節數,若是讀取前已到輸入流的末尾返回-1
Int read(byte[] buffer, int offset, int length) throws IOException
//讀取length個字節
//並存儲到一個字節數組buffer,從offset位置開始
//返回實際讀取的字節數,若是讀取前以到輸入流的末尾返回-1
Void close () throws IOException // 關閉流釋放內存資源
Long skip(long n) throws IOException //跳過n個字節不讀,返回實際跳過的字節數
OutputStream的基本方法
Void write (int b) throws IOException
Void write (byte[] b) throws IOException
Void write (byte[] b, int off, int len) throws IOException
Void close()throws IOException
Void flush ()throws IOException //將輸出流中緩衝的數據所有寫出目的地
先寫 flush再寫close
Reader
Reader的基本方法和inputStream基本一致 只是讀出是字符
Void write (String string) throws IOException //將一個字符串中的字符寫入到輸出流
(這裏用到String類的toCharArray方法)
節點流
類型 |
字符流 |
字節流 |
File |
FileReader FileWriter |
FileInputStream FileOutputStream |
Memory Array |
CharArrayReader CharArrayWriter |
ByteArrayInputStream ByteArrayOutputStream |
Memory String |
StringReader StringWriter |
|
Pipe |
PipedReader PipedWriter |
PipedInputStream PipedOutputStream |
處理流類型
處理類型 |
字符流 |
字節流 |
Buffering |
BufferedReader BufferedWriter |
BufferedInputStream BufferedOutputStream |
Filtering |
FilterReader FilterWriter |
FilterInputStream FilterOutputStream |
Converting between bytes and character |
InputStreamReader OutputStreamWriter |
|
Object Serialization |
|
ObjectInputStream ObjectOutputStream |
Data conversion |
|
DataInputStream DataOutputStream |
Counting |
LineNumberReader |
LineNumberInputStream |
Peeking ahead |
pushbackReader |
PushbackInputStream |
Printing |
PrintWriter |
PrintStream |
緩衝流
緩衝流要「套接在相應的節點流之上,對讀寫的數據提供了緩衝的功能,提升了讀寫的效率,同時增長了一些新的方法
構造方法:
BufferedReader (Reader in)
BufferedReader(Reader in , int sz) //sz爲自定義緩存區的大小
BufferedWriter(Writer out)
BufferedWriter(Writer out, int sz)
BufferedInputStream(InputStream in)
BufferedInputStream(InputStream in,int size)
BufferedOutputStream(OutputStream out)
BufferedOutputStream( OutputStream out, int size)
l 緩衝輸入流支持其父類mark和reset 方法
l BufferedReader提供了readline方法用於讀取一行字符串(以\r 或 \n 分隔)
l BufferedWriter提供了newLine用於寫入一個行分隔符
l 對於輸出的緩衝流,寫出的數據會先在內存中緩存,使用flush方法將會使內存中的數據馬上寫出
轉換流
inputStreamReader and OutputStreamWriter用於字節數據到字符數據之間的轉換
inputStreamReader 須要和InputStream 套接 把input Stream轉換成reader
OutputStreamWriter 須要和 OutputStream 套接 把outputStream 轉換成 writer
轉換流在構造時能夠指定其編碼集合
FileOutputStream(「address of file」, true) // true的意思是在文件的後面續寫
數據流
l DataInputStream 和 DataOutputStream 分別繼承自InputStream和OutputStream, 它屬於處理流,須要分別套接在InputStream和OutputStream類型的節點流上
l DataInputStream和DataOutputStream提供了能夠存取與機器無關的Java原始類型數據(如:int、double等)的方法
l DataInputStream和DataOutputStream的構造方法爲:
w DataInputStream(InputStream in)
w DataOutputStream( OutputStream out)
PrintWriter 和 PrintStream都屬於輸出流,分別針對字符和字節
PrintWriter和printStream提供了重載的print
Println方法用於多種數據類型的輸出
printWriter和printStream的輸出操做不會拋出異常,用戶經過檢測錯誤狀態獲取錯誤信息
printWriter和PrintStream有自動flush功能
printWriter(Writer out)
PrintWriter(Writer out, Boolean autoFlush)
Printwriter( OutputStream out)
printWriter(OutputStream out,Boolean autoFlush)
printStream(OutputStream out)
printStream(OutputStream out, booleanautoFlush)
Object 流
直接將Object寫入或讀出
Serializable接口 標記性接口,表示能夠對object進行序列化
Transient修飾 把object裏面的成員變量變透明
Externalizable接口裏面的方法 readExternal(ObjectInput in) writerExternal(ObjectOutput out)本身實現序列化的過程
總結
InputStream/OutputStream
Reader/Writer
FIleInputStream/FileOutputStream
FileReader/FileWriter
BufferedInputStream/
BufferedReader/
BytearrayInputStream/
InputStreamReader/
DataInputStream/
PrintStream/Printwriter
ObjectinputStream