-
【Java入門】拡張子を指定してディレクトリ内のファイルを検索・一覧表示する方法
Javaで特定の拡張子を持つファイルだけを抽出したい場面は多くあります。例えば、フォルダ内からPDFファイルや画像ファイルだけを取り出して処理したいケースなどが該当します。本記事では、Files.walk()メソッドとStream APIを使った方法、およびFilenameFilterインターフェースを使った方法の2つのアプローチで、指定した拡張子のファイルを検索する方法を解説します。方法1:Files.walk()とStreamのfilter()を使うまずは、NIOのFiles.walk()メソッドでディレクトリ内の全ファイルを走査し、Streamのfilter()で拡張子によって絞り込む例
-
Javaのクラス内に列挙型(enum)を定義できますか?定義方法と実装例を解説
Javaの列挙型(enum)は、曜日や季節など、関連する名前付き定数の集まりを表現するための仕組みです。以下のような構文で列挙型を作成できます。enum Days { SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY }はい、Javaではクラスの中に列挙型を定義することができます。クラスのメンバーとしてenumを宣言すれば、そのクラス専用の定数グループをひとまとめに管理でき、コードの可読性と保守性が向上します。また、列挙型に含まれるすべての定数を取得したい場合は、values()メソッドを使用します。このメソッ
-
Javaのメソッド内に列挙型(enum)は定義できる?エラーの原因と正しい書き方を解説
Javaの列挙型(enum)は、名前付き定数をひとつのグループとしてまとめて扱うための仕組みです。基本的な構文は以下のとおりです。enum Days { SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY }列挙型はクラスの中であれば定義できますが、メソッドの中で定義することはできません。メソッド内にenumを記述すると、コンパイル時に「enum types must not be local(列挙型はローカルにしてはならない)」というコンパイルエラーが発生します。エラーになるコード例次のように、メソッド内に直接
-
Javaでforループを使用して列挙型(enum)の値を反復処理する方法
Javaの列挙型(enum)は、あらかじめ定義された名前付き定数の集まりを表します。曜日や車種など、取りうる値が限定されるデータを扱う際に非常に便利です。列挙型は以下の構文で定義できます。enum Days { SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY }values()メソッドでenumの値を取得する列挙型に用意されている values() メソッドを呼び出すと、そのenumが持つすべての定数を格納した配列を取得できます。この配列を取得できれば、拡張forループ(for-eachループ)を使って各要素
-
Javaでformatメソッドを使ってdouble値を文字列に変換する方法
format()メソッドとはString.format()メソッドは、書式指定文字列と可変長引数(varargs)を受け取り、指定された書式に従って整形された新しい文字列オブジェクトを返すメソッドです。double型の値を文字列に変換したい場合も、このformat()メソッドが利用できます。書式指定文字列として"%f"を渡し、第2引数に変換対象のdouble値を指定するだけでOKです。例1:ユーザー入力したdouble値を変換するScannerクラスでキーボードから入力を受け付け、そのdouble値を文字列に変換するサンプルです。import java.util.Scann
-
Javaのappendメソッドでdouble値を文字列に変換する方法【サンプルコード付き】
StringBuilderおよびStringBufferクラスのappend()メソッドは、boolean・char・char配列・double・float・int・long・Stringなど、さまざまな型の値を引数として受け取り、現在のオブジェクトの末尾に追加します。このメソッドに変換したいdouble値を渡すと、その数値が文字列としてオブジェクト内に格納されます。あとはtoString()メソッドを呼び出すだけで、StringBuffer(またはStringBuilder)オブジェクトから文字列を取得できます。サンプルコード例1:Scannerで入力したdouble値を変換するimport
-
【Java入門】StringクラスのvalueOf()メソッドの使い方をわかりやすく解説
Stringクラスとはjava.langパッケージに属するStringクラスは、文字列を表すためのクラスです。Javaプログラム中に記述されるabcのようなすべての文字列リテラルは、このクラスのインスタンスとして扱われます。また、Stringオブジェクトは不変(イミュータブル)であり、一度生成するとその値を後から変更することはできません。valueOf()メソッドとはStringクラスのvalueOf()メソッドは、引数として渡された値を文字列(String)に変換して返すstaticメソッドです。対応している引数の型は、char型・char配列・double型・float型・int型・lon
-
【Java】サブクラス変数をスーパークラス型に変換する方法を徹底解説
継承とは 継承(インヘリタンス)とは、あるクラスが別のクラスのプロパティ(メンバー)を受け継ぐ、2つのクラス間の関係です。Javaでは extends キーワードを使って、次のように定義します。 public class A extends B{} プロパティを受け継ぐ側のクラスを「サブクラス(子クラス)」、受け継がれる側のクラスを「スーパークラス(親クラス)」と呼びます。 継承を行うと、スーパークラスのメンバーのコピーがサブクラスのオブジェクト内に作成されます。そのため、サブクラスのオブジェクトからは、両方のクラスのメンバーにアクセスできます。 サブクラス変数をスーパークラス型に変換する方
-
Javaでスーパークラスの参照変数をサブクラス型にキャストする方法を解説
継承とは継承(Inheritance)とは、あるクラスが別のクラスの性質(フィールドやメソッド)を受け継ぐ、2つのクラス間の関係です。この関係は extends キーワードを使って次のように定義します。public class A extends B{}このとき、性質を受け継ぐ側のクラスをサブクラス(子クラス)、受け継がれる側のクラスをスーパークラス(親クラス)と呼びます。継承では、スーパークラスのメンバーのコピーがサブクラスのオブジェクト内に作られます。そのため、サブクラスのオブジェクトを使えば、両方のクラスのメンバーにアクセスすることができます。スーパークラスの参照変数をサブクラス型に変換
-
Javaのデフォルトメソッドを使ってダイヤモンド問題を解決する方法
継承(Inheritance)とは 継承とは、あるクラスが別のクラスの性質(プロパティやメソッド)を受け継ぐ、2つのクラス間の関係のことです。この関係は extends キーワードを使って次のように定義します。 public class A extends B{ } 性質を受け継ぐ側のクラスは「サブクラス(子クラス)」、受け継がれる側のクラスは「スーパークラス(親クラス)」と呼ばれます。 継承が行われると、スーパークラスのメンバーのコピーがサブクラスのオブジェクト内に作成されます。そのため、サブクラスのオブジェクトを使えば、親クラスと子クラスの両方のメンバーにアクセスすることが可能です。 多重
-
Javaのデフォルトメソッドとは?defaultキーワードの使い方をサンプル付きで解説
Javaにおけるインターフェースはクラスによく似ていますが、含まれているのは抽象メソッドと、finalかつstaticなフィールドのみです。インターフェースは、メソッドのプロトタイプ(シグネチャ)を定めた仕様書のようなものです。プログラマに実装方針を示したい場合や、ある型のメソッドやフィールドがどのようにあるべきかという契約(コントラクト)を定めたいときに利用します。自作のクラスに特定の仕様へ準拠させたい場合は、対応するインターフェースを実装し、その中のすべての抽象メソッドに本体(処理内容)を記述する必要があります。インターフェースの抽象メソッドを1つでも実装し忘れると、コンパイル時エラーが発
-
【Java】インターフェースのデフォルトメソッドはオーバーライドできる?基本と実例を解説
Javaのインターフェースとは Javaにおけるインターフェース(interface)は、クラスによく似た参照型ですが、原則として抽象メソッドと、staticかつfinalな定数フィールドのみを持つことができます。 Java 8以降では、インターフェース内に「デフォルトメソッド」と「静的メソッド」を定義できるようになりました。このうちデフォルトメソッドには、あらかじめ既定の実装(メソッド本体)を持たせることが可能です。したがって、インターフェースを実装するクラス側で、デフォルトメソッドを必ずしもオーバーライド(上書き実装)する必要はありません。 つまり、実装クラスのオブジェクトを通じて、インタ
-
Javaのデフォルトメソッドで菱形継承問題(ダイアモンド問題)を解決する方法
継承とは継承とは、あるクラスが別のクラスのプロパティやメソッドを受け継ぐ、クラス間の関係のことです。Javaでは「extends」キーワードを使って、次のように定義します。public class A extends B{ }性質を引き継ぐ側のクラスをサブクラス(子クラス)、引き継がれる側のクラスをスーパークラス(親クラス)と呼びます。継承が行われると、スーパークラスのメンバーのコピーがサブクラスのオブジェクト内に作られます。そのため、サブクラスのオブジェクトを使えば、親クラスと子クラスの両方のメンバーにアクセスできます。多重継承とは継承には、単一継承、多段継承、階層継承、多重継承、ハイブリッ
-
Javaで2つの連結リストの交点を見つける方法
連結リスト(Linked List)は、各ノードが2つのブロックで構成される線形データ構造です。一方のブロックにはノードの値(データ)が格納され、もう一方のブロックには次のノードへのアドレス(ポインタ)が格納されます。ここでは、2つの連結リストが交差するノードを見つける問題を扱います。2つのリストが共通のノードを持つ場合、その交点となるノードを特定します。交点が存在しない場合は、NULL(または空)を出力として返します。具体例入力1:出力:2説明: 与えられた連結リストは値「2」のノードで交差しているため、出力として「2」を返します。入力2:出力:NULL説明: 共通のノードが存在しないため、
-
JavaでN番目のアグリーナンバー(醜い数)を求める方法
アグリーナンバー(Ugly Number)とは?素因数が2、3、5のいずれかのみである数を「アグリーナンバー(醜い数)」と呼びます。アグリーナンバーには、1, 2, 3, 4, 5, 6, 8, 10, 12, 15などが含まれます。この問題では、数値Nが与えられ、アグリーナンバーの列の中からN番目の数を求めることが課題となります。入出力例1入力:N = 5出力:5解説:アグリーナンバーの列 [1, 2, 3, 4, 5, 6, 8, 10, 12, 15] のうち、5番目に位置する数は 5 です。入出力例2入力:N = 7出力:8解説:同じ列の中で7番目に位置する数は 8 です。問題を解くた
-
JavaのIteratorとListIteratorの違いを徹底解説
```html Javaのコレクションフレームワークには、要素を順番に処理するための仕組みとして「Iterator」と「ListIterator」が用意されています。名前は似ていますが、対応できるコレクションの種類や実行できる操作に大きな違いがあります。本記事では、それぞれの特徴と相違点をわかりやすく解説します。 Iteratorとは Iteratorは、List・Set・Mapなど幅広いコレクションの要素を走査するための標準的なインターフェースです。主な特徴は以下のとおりです。 List、Set、Mapなど、さまざまなコレクションを走査できる(Mapの場合はentrySet()やkeyS
-
JavaにおけるHashMapとTreeMapの違いを徹底解説
Javaのコレクションフレームワークにおいて、Mapインターフェースを実装する代表的なクラスとして「HashMap」と「TreeMap」があります。どちらもキーと値のペアを管理するためのクラスですが、内部構造やパフォーマンス、機能面で大きな違いがあります。本記事では、それぞれの特徴を詳しく解説し、適切な使い分けのポイントを紹介します。 HashMapとは HashMapは、ハッシュテーブルを基盤としたMap実装です。高速なデータアクセスが特徴で、要素の順序を保持しないシンプルなマップです。 主な特徴 内部構造: ハッシュテーブルを使用し、Mapインターフェースに基づいて実装されています。
-
【Java】IteratorとEnumerationインターフェースの違いを徹底解説
この記事では、Javaにおけるイテレータ(Iterator)インターフェースと列挙型(Enumeration)インターフェースの違いについて、それぞれの特徴を挙げながらわかりやすく解説します。両者はどちらもコレクション内の要素を順番に取り出すための「カーソル」として機能しますが、用途や使える場面が大きく異なります。 イテレータ(Iterator)とは 汎用カーソル(ユニバーサルカーソル)として動作します。 すべてのコレクションクラスに適用できます。 remove()メソッドを持っており、走査中に要素を削除できます。 レガシーインターフェースではなく、Java Collections Fram
-
Javaのsleep()とwait()の違いを徹底解説!マルチスレッドプログラミングの基礎知識
Javaでマルチスレッドプログラミングを行う際、sleep()メソッドとwait()メソッドはどちらもスレッドの実行を一時停止させるために使われますが、その動作や用途には重要な違いがあります。本記事では、それぞれの特徴と相違点をわかりやすく解説します。 wait()メソッドとは 所属クラス: Objectクラスに定義されており、すべてのオブジェクトが持つメソッドです。 ロックの扱い: 同期(synchronized)処理中に呼び出されると、オブジェクトのロックを解放します。これにより、他のスレッドが同じロックを取得できるようになります。 メソッドの種類: インスタンスメソッドであり、静的(
-
JavaにおけるHashMapとLinkedHashMapの違いを徹底解説
この記事では、JavaにおけるHashMapとLinkedHashMapの違いについて解説します。どちらもMapインターフェースを実装するコレクションクラスですが、要素の順序管理や内部構造、パフォーマンスに重要な違いがあります。それぞれの特徴を理解し、適切な場面で使い分けられるようにしましょう。 HashMapの特徴 挿入順序は保持されない: 要素を追加した順序と、取り出される順序は一致しません。 内部構造: ハッシュテーブルを使用してデータを格納します。 継承関係: AbstractMapクラスを継承しています。 実装インターフェース: Mapインターフェースを実装しています。 導入時期: