Java 8 API学習23-java.lang.Appendable,StringBuilderおよびStringBuffer
4088 ワード
final class StringBuffer extends AbstractStringBuilder
implements java.io.Serializable, CharSequence;
final class StringBuilder extends AbstractStringBuilder
implements java.io.Serializable, CharSequence
多くの文章で述べたように、StringBufferとStringBuilderの違いは、スレッドが安全であるかどうかであり、両クラスはAbstractStringBuilderに継承され、両者に含まれる方法は同じである.
AbstractStringBuilder
この抽象クラスは非publicであり、パラメータとしてStringBufferとStringBuilderを同時に受け入れることはできないという小さな問題をもたらす.どうしてこんなデザインなのか...
abstract class AbstractStringBuilder implements Appendable, CharSequence
Appendableインタフェース
public interface Appendable
AbstractStringBuilderに加えて、このインタフェースの実装クラスにはjavaがある.nio.CharBuffer, java.io.PrintStreamとjava.io.Writerは、このインタフェースが文字/文字ストリームの接合に用いることがわかる.そのうち1つの方法は
append
しかありませんが、3つのリロード方式があります.Appendable append(char c) throws IOException
Appendable append(CharSequence csq) throws IOException
// csq
Appendable append(CharSequence csq, int start, int end) throws IOException
注意2つの点:上記の方法ではIOExceptionが投げ出されます.戻り値はAppendableです.
StringBuilderの方法
実は両者の方法は同じである、ここではStringBuilderを例に説明する.
コンストラクタ
各StringBuilderインスタンスにはchar配列格納文字があります.ArrayListと同様に、長さが足りない場合は新しい配列を作成し、古い要素をコピーします.StringBuilderとStringBufferの構造関数の形式も同じである.
StringBuilder() // capacity=16
StringBuilder(int capacity)
StringBuilder(CharSequence) // CharSequence
StringBuilder(String) // String. ?
StringBuilderの方法(50個)
なお、次のメソッドの戻り値はStringBuilderタイプであればreturnthisを表すので、これらのメソッドを連続的に呼び出すことができる.1.append(13個)
//Appendable 2 ,
StringBuilder append(CharSequence)
StringBuilder append(CharSequence s, int start, int end)
StringBuilder append(String)
StringBuilder append(StringBuffer)
/* , ,
String.valueOf();
short byte, append(int).*/
StringBuilder append(boolean)
StringBuilder append(int)
StringBuilder append(long)
StringBuilder append(float)
StringBuilder append(double)
StringBuilder append(char)
StringBuilder append(char[])
StringBuilder append(char[] str, int offset, int len) //
StringBuilder append(Object) // append(obj.toString())
append
と同様であり、StringBufferへの伝達形式StringBuilder insert(int, char)
StringBuilder insert(int, char[])
StringBuilder insert(int index, char[] str, int offset, int len)
StringBuilder insert(int, CharSequence)
StringBuilder insert(int, CharSequence s, int start, int end)
StringBuilder insert(int, String)
StringBuilder insert(int, boolean)
StringBuilder insert(int, int)
StringBuilder insert(int, long)
StringBuilder insert(int, float)
StringBuilder insert(int, double)
StringBuilder insert(int, Object)
int length()
void setLength(int newLength) // , 0
// length capacity : ,
int capacity()
void ensureCapacity(int)
void trimToSize()
char charAt(int)
void setCharAt(int, char)
// dst[]
void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin)
StringBuilder delete(int start, int end)
StringBuilder deleteCharAt(int index)
int indexOf(String str)
int indexOf(String str, int fromIndex)
int lastIndexOf(String str)
int lastIndexOf(String str, int fromIndex)
// replace [start, end - 1] str , String.replace
StringBuilder replace(int start, int end, String str)
StringBuilder reverse()
// CharSequence
CharSequence subSequence(int start, int end)
//
String substring(int start)
String substring(int start, int end)
String toString()
StringBuilder appendCodePoint(int)
int codePointAt(int)
int codePointBefore(int)
int codePointCount(int beginIndex, int endIndex)
int offsetByCodePoints(int index, int codePointOffset)
まとめ
StringBuilderとStringBufferの実質は1つのchar配列に対する操作でしょう...