如何选择数据结构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