2021/03/22
これまでに C/C++,Python,また JavaScript などを触れてきたが,自分にとって今後 Java が必要になると予想して,Java を学習することにした.
Java
基本
変数の宣言・初期化
ベースはほとんど変わらない印象である.少なくともint
型はそのまま.
C++ではauto
を愛用していたが,Java では見当たらない.
int x = 0;
int y = 0, z = 0;
String str = "test";
double dx = 0.1;
boolean bl = false; // 注意! boolじゃないんだね
四則演算
int
とboolean
は足せない.
そのため,以下のような工夫が必要.
int x = 0;
boolean b = true;
if (b) {
x++;
}
条件式
こちらも,基本的には変わらない印象.
しかし,空かどうかを条件にする際,==null
や!=null
が必要なようだ.
ListNode node
if (node != null) {
}
// これはダメ
//if (node) {
//}
配列の操作
驚いたのが,標準的な配列(?)にあたるint[]
がlength
メンバを持っていて,C++におけるvector<int>
と同じように扱える点である.
おそらく,C++は C との互換性を維持するために,int[]
を残したままvector<int>
やarray<int>
のような配列クラスを準備したのでは無いかと思った.
宣言・初期化
int[] v = new int[10];
int[] v = new
ソート
Arrays
で配列のソートができる.
// import java.util.Arrays;
Arrays.sort(v);
直接戻り値とする
return new int[] {0, 0};
コンソール出力
C++のstd::cout
と比較すると,個人的にはかなり面倒に感じた.
System.out.println(0);
関数(メソッド?)について
こちらも基本的には C++と変わらない印象.
デフォルト値
困ったことに,引数のデフォルト値がなさそうである.
そのため,C++や Python におけるデフォルト値のようなものを用いたい場合は,以下のようにオーバーロードを使った工夫が必要.
class Foo {
public int baa(int x, int y) {
return baa(x, y);
}
public int baa(int x, int y, int z) {
return x + y + z;
}
}
文字列型(String)
Java ではString
型として文字列を扱うことができるようだ.
String str = "test";
str.length(); // 文字数 -> 4
str.charAt(0); // 要素アクセス -> 't' (何故`[]`でアクセスできないんだ・・・)
キュー (Queue)
Java ではQueue
型がある.
Queue<int> queue = new LinkedList<int>();
queue.add(0); // C++ std::queue のpush()に相当
int n1 = queue.element(); // C++ std::queueのfront()に相当
queue.remove(); // C++ std::queueのpop()に相当
queue.add(1); // C++ std::queue のpush()に相当
int n = queue.poll(); // C++ std::queue のfront()とpop()を同時に行う
個人的には,Queue<>.poll()
が大好き.C++を使っていた時はstd::queue::front()
とstd::queue::pop()
の両方が必要だった処理が一発でできるのが魅力的だよね.
便利な関数
max()
引数の内大きい方を返す.
longest = Math.max(longest, length); // 最大値の更新