kanetaiの二次記憶装置

プログラミングに関するやってみた、調べた系のものをQitaに移して、それ以外をはてブでやる運用にしようと思います。http://qiita.com/kanetai

Javaいろいろメモ

なんかよく忘れるのでメモ

ソート

  • ファンクタ(無名クラス)
Arrays.sort(array, fromIndex, toIndex, new Comparator<T>(){
	@Override public int compare(T o1, T o2){
		return o2 - o1; //降順
	}
});
  • Comparableインターフェース実装
class T implements Comparable<T>{
	int a, b;
	@Override public int compareTo(T o2) { return a != o2.a ? a - o2.a : b - o2.b; }
}

配列⇄コレクション 変換

  • 配列→コレクション
List<T> list = Arrays.asList(array);
  • コレクション→配列
T[] array = (T[]) list.toArray(new T[list.size()]);

配列コピー

System.arraycopy(Object src, int srcPos, Object dest, int destPos, int length)

コレクションの配列

ArrayList使うと記述が長くなるので、配列を使いたいときもあるんだけど、

TreeMap<Double, Integer>[] in = new TreeMap<Double, Integer>[4]; //コレじゃ駄目

てな感じでコレクションの配列を作ろうとすると、総称配列を作成できないとおこられる。
ジェネリクスは単なるシンタックスシュガーで、コンパイル後にはTreeMapの型情報が無くなるけど、
配列は実行時に型情報を必要とするから困るということっぽい。多分。
型安全ではなくなるので、あんまやらないほうがいいかもしれないが、どうしてもやりたいなら↓

@SuppressWarnings("unchecked")
TreeMap<Double, Integer>[] in = new TreeMap[4];
for(int i = 0; i < 4; ++i) in[i] = new TreeMap<Double, Integer>(); //これも忘れがち

空コレクション

Collections.<T>emptyList();
Collections.<K,V>emptyMap();
Collections.<T>emptySet();

コレクション初期化

リストだとこんな感じ

List<String> list = Arrays.asList("d", "b");

static イニシャライザを使ってもいいが、static finalならこういうのもある。

public static final List<String> LIST = Collections.unmodifiableList(new LinkedList<String>(){{
    add("a");add("b");
}});

正規表現

いっぱいメモることがあるので別のエントリーにした方がいいかも。
参考ページ: http://www.javadrive.jp/regex/
パターン生成→マッチャにあてる→操作

Pattern
  • "()" グループ化 ※インデクスが振られる。
  • "\n" 後方参照 ※nはグループインデクス
  • "+" 直前1回以上繰り返し
Matcher
  • find()
  • group() マッチした部分文字列取得
//aoj0139
import java.util.regex.*;
Pattern A = Pattern.compile(">\'(=+)#\\1~");
Matcher AM = A.matcher(s), BM = B.matcher(s);
if( AM.find() && AM.group().equals(s) )