ys memos
Blog

Javaの学習メモ


java

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じゃないんだね

四則演算

intbooleanは足せない. そのため,以下のような工夫が必要.

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); // 最大値の更新

関連タグを探す