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()]);
コレクションの配列
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) )