-
GuavaのJoinerクラスを使ってJavaで文字列を結合する方法
Google Guavaライブラリに含まれるJoinerクラスは、文字列やオブジェクトなどを連結(結合)するための便利なメソッドを多数提供しています。区切り文字を指定して要素をつなげたり、null値をスキップしたりと、標準APIでは煩雑になりがちな処理を簡潔に記述できるのが特徴です。 サンプルコード import com.google.common.base.Joiner; import java.util.*; public class Demo{ public static void main(String[] args){ String[] my_arr = {
-
Javaでスレッドを安全に終了する方法|volatileフラグを使った実装例
Javaでは、実行中のスレッドを外部から強制的に即座に停止させる安全な手段は用意されていません。かつて提供されていた Thread.stop() メソッドは、スレッドが保持しているロックやデータの整合性を壊す恐れがあるため、現在では非推奨(deprecated)となっています。 そこで推奨されるのが、volatile 修飾子を付けた boolean 型のフラグを使い、スレッド自身に終了タイミングを判断させる方法です。以下に具体的な実装例を示します。 コード例 public class Main{ static volatile boolean exit = false; pu
-
Javaで文字列の重複しない順列をすべて出力する方法
文字列の個別の順列(重複を除いた順列)をすべて出力するJavaプログラムは、以下の通りです。 サンプルコード import java.util.ArrayList; public class Demo{ static boolean is_present(String my_str, ArrayList<String> rem){ for (String str : rem){ if (str.equals(my_str)) &nb
-
Javaで行列をZ字形に出力するプログラムの書き方
行列(マトリックス)を「Z」の字形に沿って出力するには、1行目を左から右へ → 右端から左下への対角要素 → 最終行を左から右へ の順に要素を表示していきます。本記事では、その処理を実現するJavaプログラムをサンプルコードとともに解説します。 サンプルコード import java.lang.*; import java.io.*; public class Demo{ public static void z_shape(int my_arr[][], int n){ int i = 0, j, k; // 1行目を左から右へ出力 f
-
Java 9インターフェースにおけるプライベートメソッドの使い方を徹底解説
Java 9では、インターフェース内にプライベートメソッド(privateメソッド)を定義できるようになりました。これにより、defaultメソッドやstaticメソッド間で共通処理を再利用できるようになり、インターフェース内のコード重複を大幅に削減できます。以下に、Java 9インターフェースでプライベートメソッドを使用する具体例を示します。サンプルコードinterface my_int{ public abstract void multiply_vals(int a, int b); public
-
【Java】事前条件チェック:リストがnullまたは空でないことを確認する方法
事前条件(Precondition)とは、メソッドが正しく動作するために、渡された引数が満たしているべき条件のことです。ここでは、パラメータとして渡されたリストがnullまたは空(要素数ゼロ)でないことを確認する例を見ていきましょう。 サンプルコード public void my_fun(List<Object> myList){ if (myList == null){ throw new IllegalArgumentException("List is null"); &n
-
Javaで平衡二分探索木(BST)から指定した合計値になるペアを検索する方法
概要 平衡二分探索木(Balanced BST)と目標となる合計値(target sum)が与えられたとき、その合計値に等しくなるノードのペアが木の中に存在するかどうかを判定する関数を作成します。ペアが存在すれば true を返し、存在しなければ false を返します。 この問題では、期待される時間計算量は O(n) であり、使用できる追加の補助記憶域は O(Log n) までとされています。また、二分探索木自体への変更(ノードの追加・削除・構造の書き換えなど)は一切許されない点にも注意が必要です。 ここで重要なポイントとして、平衡BSTの高さは常に O(Log n) であるという性質があ
-
Javaで最長の回文部分列を求めるプログラムの実装方法
最長の回文部分列(Longest Palindromic Subsequence)とは、元の文字列から一部の文字を抜き出して並べたとき、前から読んでも後ろから読んでも同じになる列のうち、最も長いものを指します。これを求めるためのJavaコードは以下の通りです。 サンプルコード public class Demo{ static String longest_seq(String str_1, String str_2){ int str_1_len = str_1.length();
-
【Java】1/1! + 2/2! + 3/3! + … + n/n! の級数の和を求めるプログラム
本記事では、次の級数の合計を求めるJavaプログラムを紹介します。 1/1! + 2/2! + 3/3! + 4/4! +…….+ n/n! 階乗(!)とは 「!」は階乗を表す記号です。nの階乗(n!)は、1からnまでのすべての整数を掛け合わせた値になります。例えば、3! = 3 × 2 × 1 = 6、4! = 4 × 3 × 2 × 1 = 24 です。したがって、この級数の第3項は 3/6 = 0.5、第4項は 4/24 ≒ 0.1667 となります。 サンプルコード import java.io.*; import java.lang.*; public
-
Javaスレッドの優先度とは?マルチスレッドにおける優先順位の基本と設定方法
Javaスレッドの優先度とはマルチスレッド環境では、スレッドスケジューラが各スレッドの優先度に基づいて、どのスレッドにCPUを割り当てるかを決定します。Javaのスレッドにはあらかじめデフォルトの優先度が割り当てられており、JVM(Java仮想マシン)が自動的に設定するほか、プログラマが明示的に指定することも可能です。スレッドの優先度は、1から10までの整数値(両端を含む)で表されます。優先度に関連する静的変数として、以下の3つが定義されています。MAX_PRIORITY:スレッドに設定できる最大の優先度。デフォルト値は10。NORM_PRIORITY:スレッドの標準的な優先度。デフォルト値は
-
Javaのint型で扱える最大値は?Integer.MAX_VALUEの使い方をわかりやすく解説
Javaで整数型(int)が扱える最大値を取得するには、Integer.MAX_VALUEを使用します。この定数は、int型が表現できる上限値を返します。以下に具体的なサンプルコードを示します。サンプルコードpublic class Demo{ public static void main(String[] args){ System.out.println(データ型は); System.out.println(Integer.TYPE); System.out.println(ビットサイズは); System.out.
-
Javaでリストをシャッフル(ランダムに並べ替え)する方法
Javaでリストの要素をランダムに並べ替えたい場合は、java.util.Collectionsクラスが提供するshuffle()メソッドを使うのが最も簡単です。このメソッドは、指定されたリストの要素順序をデフォルトの乱数発生元を使用してランダムにシャッフルします。 サンプルコード import java.util.*; public class Demo{ public static void main(String[] args){ ArrayList<String> my_list = new ArrayList<String>();
-
Javaの型消去(Type Erasure)とは?仕組みとサンプルコードをわかりやすく解説
Javaは、ジェネリックプログラミングをサポートしつつ、より厳密な型チェックを実現するために、「型消去(Type Erasure)」という仕組みを採用しています。 型消去とは、コンパイル時にジェネリック型の型引数に関する情報を取り除き、バイトコードには通常のクラス・メソッド・インターフェースのみが含まれるようにする仕組みです。具体的には、以下のような処理が行われます。 ジェネリック型のすべての型パラメータは、境界型(境界が指定されていない場合はObject型)に置き換えられます。これにより、バイトコードにはクラス、メソッド、インターフェースのみが含まれることになります。 型の整合性を保つため
-
Javaの参照の種類とは?強参照・弱参照・ソフト参照・ファントム参照の違いを解説
Javaでは、ガベージコレクション(GC)によるオブジェクトの回収方法に応じて、参照は4つの種類に分類されます。それぞれの特性を理解しておくことで、メモリリークの防止や効率的なメモリ管理につながります。強参照(Strong Reference)弱参照(Weak Reference)ソフト参照(Soft Reference)ファントム参照(Phantom Reference)強参照(Strong Reference)強参照は、Javaにおける最も基本的な参照の型で、通常の変数への代入によって作成される参照がこれに該当します。強参照が有効な状態にあるオブジェクトは、ガベージコレクションの対象になり
-
Javaのfinal変数と到達不能ステートメント|コンパイルエラーが発生する理由を解説
到達不能ステートメント(Unreachable Statement)とは? 到達不能ステートメントとは、プログラムの実行時に一切実行されない文のことを指します。Javaでは、到達不能なコードが検出されるとコンパイルエラーとなります。文が到達不能になる主な原因は以下の3つです。 return文が先行している場合:メソッドがすでに値を返して終了しているため、後続のコードは実行されません。 無限ループが存在する場合:ループから抜け出せないため、その後のコードに制御が移りません。 処理が強制終了される場合:コードが実行される前にプログラムが終了させられます。 本記事では、finalキーワードを使
-
Javaの非final変数による到達不能ステートメントの挙動をわかりやすく解説
以下は、非final変数を使用した場合に、到達不能ステートメント(到達不能コード)がどのように扱われるかを示すサンプルです。 サンプルコード class Demo_example { int a = 2, b = 3; void display_msg(){ while (a < b){ &
-
Javaのソフト参照とファントム参照とは?違いとコード例でわかりやすく解説
ソフト参照(SoftReference)は、メモリ状況に応じて動作するキャッシュ(メモリセンシティブなキャッシュ)を実装する際によく利用されます。ソフト参照で保持されたオブジェクトは、JVMがメモリ不足に陥ったときにのみガベージコレクションの対象となるため、キャッシュ用途に適しています。 ここでは、Javaにおけるソフト参照の具体的な使用例を見ていきましょう。 ソフト参照の実装例 import java.lang.ref.SoftReference; class Demo{ public void display_msg(){ System.out.println(H
-
Javaに存在しないC++の機能一覧|両言語の主な違いを徹底解説
はじめにC++とJavaはどちらも広く使われているプログラミング言語ですが、設計思想が大きく異なるため、C++に存在する機能の一部はJavaには意図的に取り入れられていません。Javaは安全性・簡潔さ・プラットフォーム非依存性を優先し、複雑さの原因となる機能を削ぎ落とした言語です。本記事では、Javaに存在しない代表的なC++機能を一覧形式でわかりやすく解説します。Javaに存在しないC++の主な機能1. 符号なし整数型(unsigned int)Javaには符号なし整数型が用意されておらず、すべての整数型(byte、short、int、long)は符号付きです。ビット操作などで符号なしの挙動
-
【比較解説】C++とJavaでデフォルトの仮想動作はどう違う?
ポリモーフィズム(多態性)を実現する「仮想関数」の扱いは、C++とJavaで大きく異なります。この違いを理解することは、両言語を使いこなす上で非常に重要です。 C++の場合:デフォルトは非仮想 C++では、クラスのメンバー関数はデフォルトで非仮想(non-virtual)です。これは、動的ディスパッチのオーバーヘッドを避け、パフォーマンスを優先する設計思想によるものです。仮想関数として動作させたい場合は、virtualキーワードを明示的に指定する必要があります。 class Base { public: virtual void display_msg() { //
-
Javaにおける検証(JVM)の仕組みとは?
JVM(Java Virtual Machine)が.classファイルをもとにバイトコードをロードすると、次に検証器(Verifier)によってそのバイトコードの妥当性がチェックされます。検証器はリンクの状態を確認し、各種操作が効率的に実行できるようにします。この仕組みのおかげで、インタプリタはより高速かつ効率的に動作することができます。この一連のプロセスは「検証(Verification)」と呼ばれ、Javaプログラムの安全性と安定性を保つための重要な役割を担っています。サンプルコードpublic class Demo{ private float my_val; floa