马士兵java note 5
如何選擇數(shù)據(jù)結(jié)構(gòu)
Array 讀快改慢
Linked改快讀慢
Hash兩者之間
?
Map 接口
實(shí)現(xiàn)Map接口的類用來(lái)存儲(chǔ)key-value
Map接口的實(shí)現(xiàn)類有HashMap和TreeMap(二叉樹(shù))
Map類中存儲(chǔ)的key-value對(duì)通過(guò)鍵來(lái)標(biāo)識(shí),所以鍵值不能重復(fù)(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
在合適的時(shí)機(jī)自動(dòng)打包、解包:
自動(dòng)將基礎(chǔ)類型轉(zhuǎn)換為對(duì)象
自動(dòng)將對(duì)象轉(zhuǎn)換為基礎(chǔ)類型
?
JDK 1.5泛型
裝入集合的類型都被當(dāng)作Object對(duì)待,從而失去自己的實(shí)際類型
從集合中取出時(shí)往往需要轉(zhuǎn)型???????????????
解決辦法:
在定義集合的時(shí)候同時(shí)定義集合中對(duì)象的類型
可以在定義Collection的時(shí)候指定
也可以在循環(huán)時(shí)用Iterator制定
?
好處:增強(qiáng)程序的可讀性和穩(wěn)定性
??????????????????????????????
Class Name implements Comparable<Name> {
Public String toString() {? }
Public Boolean equals(Object obj){}
Public int hashCode(){}
Public int compareTo(Name n){}
}
?
1136
一個(gè)圖
一個(gè)類: Collections
三個(gè)知識(shí)點(diǎn):
For
Generic
Auto-boxing/ unboxing
六個(gè)接口
?
流
在Java程序中,對(duì)于數(shù)據(jù)的輸入/輸出操作以stream方式進(jìn)行
Java.io 包中定義了多個(gè)流類型來(lái)實(shí)現(xiàn)輸入/輸出功能;可以從不同的角度進(jìn)行分類:
按數(shù)據(jù)流的方向不同可以分為輸入流和輸出流(站在程序的角度上)
按處理數(shù)據(jù)單位不同可以分為字節(jié)流和字符流(一個(gè)字符兩個(gè)字節(jié))
按照功能不同可以分為節(jié)點(diǎn)流和處理流
節(jié)點(diǎn)流為可以從一個(gè)特定的數(shù)據(jù)源(節(jié)點(diǎn))讀寫數(shù)據(jù)(如 文件 內(nèi)存)
處理流是連接在已存在的流之上,通過(guò)對(duì)數(shù)據(jù)的處理為程序提供更為強(qiáng)大的讀寫功能
?
J2SDK所提供的所有流類型位于包java.io 內(nèi)都分別繼承自以下四種抽象流類型
| ? | 字節(jié)流 | 字符流 |
| 輸入流 | InputStream | Reader |
| 輸出流 | OutputStream | Writer |
?
InputStream的基本方法:
Int read() throws IOException // 讀取一個(gè)字節(jié)并以整數(shù)的形式返回 0~255;如果返回-1已到輸入流的末尾
?
Int read (byte [] buffer) throws IOException //讀取一系列字節(jié)并存儲(chǔ)到一個(gè)數(shù)組buffer
//返回實(shí)際讀取的字節(jié)數(shù),如果讀取前已到輸入流的末尾返回-1
?
Int read(byte[] buffer, int offset, int length) throws IOException
//讀取length個(gè)字節(jié)
//并存儲(chǔ)到一個(gè)字節(jié)數(shù)組buffer,從offset位置開(kāi)始
//返回實(shí)際讀取的字節(jié)數(shù),如果讀取前以到輸入流的末尾返回-1
?
Void close () throws IOException // 關(guān)閉流釋放內(nèi)存資源
Long skip(long n) throws IOException //跳過(guò)n個(gè)字節(jié)不讀,返回實(shí)際跳過(guò)的字節(jié)數(shù)
?
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 //將輸出流中緩沖的數(shù)據(jù)全部寫出目的地
先寫 flush再寫close
?
Reader
?
Reader的基本方法和inputStream基本一致 只是讀出是字符
?
Void write (String string) throws IOException //將一個(gè)字符串中的字符寫入到輸出流
(這里用到String類的toCharArray方法)
?
節(jié)點(diǎn)流
| 類型 | 字符流 | 字節(jié)流 |
| File | FileReader FileWriter | FileInputStream FileOutputStream |
| Memory Array | CharArrayReader CharArrayWriter | ByteArrayInputStream ByteArrayOutputStream |
| Memory String | StringReader StringWriter | ? |
| Pipe | PipedReader PipedWriter | PipedInputStream PipedOutputStream |
處理流類型
| 處理類型 | 字符流 | 字節(jié)流 |
| 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 |
緩沖流
緩沖流要“套接在相應(yīng)的節(jié)點(diǎn)流之上,對(duì)讀寫的數(shù)據(jù)提供了緩沖的功能,提高了讀寫的效率,同時(shí)增加了一些新的方法
構(gòu)造方法:
BufferedReader (Reader in)
BufferedReader(Reader in , int sz) //sz為自定義緩存區(qū)的大小
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用于寫入一個(gè)行分隔符
l? 對(duì)于輸出的緩沖流,寫出的數(shù)據(jù)會(huì)先在內(nèi)存中緩存,使用flush方法將會(huì)使內(nèi)存中的數(shù)據(jù)立刻寫出
??????????????????????????????
轉(zhuǎn)換流
inputStreamReader and OutputStreamWriter用于字節(jié)數(shù)據(jù)到字符數(shù)據(jù)之間的轉(zhuǎn)換
inputStreamReader 需要和InputStream 套接 把input Stream轉(zhuǎn)換成reader
OutputStreamWriter 需要和 OutputStream 套接 把outputStream 轉(zhuǎn)換成 writer
轉(zhuǎn)換流在構(gòu)造時(shí)可以指定其編碼集合
?
FileOutputStream(“address of file”, true) // true的意思是在文件的后面續(xù)寫
?
數(shù)據(jù)流
l? DataInputStream 和 DataOutputStream 分別繼承自InputStream和OutputStream, 它屬于處理流,需要分別套接在InputStream和OutputStream類型的節(jié)點(diǎn)流上
l? DataInputStream和DataOutputStream提供了可以存取與機(jī)器無(wú)關(guān)的Java原始類型數(shù)據(jù)(如:int、double等)的方法
l? DataInputStream和DataOutputStream的構(gòu)造方法為:
w?? DataInputStream(InputStream in)
w?? DataOutputStream( OutputStream out)
?
PrintWriter 和 PrintStream都屬于輸出流,分別針對(duì)字符和字節(jié)
PrintWriter和printStream提供了重載的print
Println方法用于多種數(shù)據(jù)類型的輸出
printWriter和printStream的輸出操作不會(huì)拋出異常,用戶通過(guò)檢測(cè)錯(cuò)誤狀態(tài)獲取錯(cuò)誤信息
printWriter和PrintStream有自動(dòng)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接口 標(biāo)記性接口,表示可以對(duì)object進(jìn)行序列化
Transient修飾 把object里面的成員變量變透明
Externalizable接口里面的方法 readExternal(ObjectInput in) writerExternal(ObjectOutput out)自己實(shí)現(xiàn)序列化的過(guò)程
?
總結(jié)
InputStream/OutputStream
Reader/Writer
FIleInputStream/FileOutputStream
FileReader/FileWriter
BufferedInputStream/
BufferedReader/
BytearrayInputStream/
InputStreamReader/
DataInputStream/
PrintStream/Printwriter
ObjectinputStream
?
轉(zhuǎn)載于:https://www.cnblogs.com/Rebecca-Fan/p/7483583.html
總結(jié)
以上是生活随笔為你收集整理的马士兵java note 5的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: POJ 1279 Art Gallery
- 下一篇: 穷游网:这里有一个包含十二年用户体验妙计