タグ

ブックマーク / www.ne.jp (17)

  • Javaマップメモ(Hishidama's Java Map Memo)

    概要 マップのクラス [/2022-09-21] マップの初期化 [/2017-09-24] マップのメソッド [/2023-09-24] ランダムアクセス処理 順次アクセス処理 [/2018-02-04] Listへの変換 [2017-01-19] Streamとの変換 HashMap [/2015-06-20] LinkedHashMap TreeMap [/2016-12-29] Map.ofの不変マップ [2017-09-24] 概要 マップは、キーとなるオブジェクト(よく使われるのは文字列や列挙型)に対し、それに該当する値を保持するコレクション。 →他言語のマップ(ディクショナリー・連想配列) マップは、java.util.Mapインターフェースで表される。 Mapは(ListやSetとは異なり)CollectionやIterableインターフェースを継承していない。 したがって

  • Hadoop Java APIメモ(Hishidama's Hadoop Java API Memo)

    ToolRunner [/2010-03-12] Map/Reduceクラスの指定 [/2010-03-19] Mapper [/2010-03-19] Combiner [/2011-12-25] Reducer [/2010-08-11] InputFormat/OutputFormat [2010-03-12] Writable [/2010-03-23] Counter [/2012-03-27] SequenceFile [/2012-12-08] DistributedCache [2012-12-15] ToolRunner チュートリアルのソースでは使っていないが、@ITのサンプルではToolRunnerというクラスを使って実行している。 ToolRunnerを使うと、Configurationの初期化や汎用(一般)オプション(generic option)の解釈を行ってく

  • Javaファイルロックメモ(Hishidama's Java FileLock Memo)

    概要 ファイルをロックすると、他プロセスがそのファイルをロックできなくなる。 これを利用して、二重起動防止のチェックを行うことが出来る。 なお、FileLockのJavadocによると、このファイルロックはプロセス間での排他に使えるが、プロセス内の複数スレッドに対する排他制御には適していないらしい。 ファイルロックは、FileLockを返すオブジェクト(FileChannel)のtryLockメソッドを使用してロックする。 このメソッドは、他プロセスがそのファイルをロック中だとnullを返すので、ロックされているかどうかを判定できる。 FileLockオブジェクトやその元になったFileChannelをクローズしてしまうとロックは解除される。 ファイルをロック中のプロセス(自分が実行しているJavaアプリケーション)が外部からkillされても、ファイルロックは解除される。 JDK1.4の例

  • Java slf4jメモ(Hishidama's Java slf4j Memo)

    概要 treeさんの『javaのロガーが多すぎて訳が解らないので整理してみました』によると、slf4jは(commons-loggingと同様の)ログ出力のインターフェースを定義しているライブラリーらしい。 ログを実際に出力するライブラリーとして、java.util.loggingやlog4jlogbackがあるらしい。 logbackの例 slf4j+logbackの例。 まず、slf4jとlogback-classicを使ったサンプルプロジェクトを作るgradleスクリプトは以下の通り。 build.gradle: apply plugin: 'java' apply plugin: 'eclipse' defaultTasks 'jar' group = 'com.example' version = '0.1-SNAPSHOT' sourceCompatibility = 1.7

  • Javaアプリケーション メモ(Hishidama's Java-Application Memo)

    JavaアプリケーションはJavaソースを(C言語やC++等と同様に)コンパイルし、コンパイルして出来たファイルを実行するもの。 (実際にはJavaで作った全てのプログラムがコンパイル・実行するものだけれども、ここではJavaアプレットやサーブレットと区別する意味で「Javaアプリケーション」と呼んでいる) javacコマンドでコンパイルし、javaコマンドで実行する。 実行は、クラス内のpublic static void main(String[] args)メソッド(あるいは...)から行われる。 JDK1.5から、main()が実行される前にメソッドpremain()を呼ぶこともやろうと思えば出来るようになった。[2007-11-12] コンパイル方法と実行方法 [/2008-12-20] 単一ファイルソースコードの実行 [2018-10-01] 複数ファイルソースコードの実行 [

  • Javaファイル関連メモ2(Hishidama's Java Files Memo)

    ファイル・ディレクトリ操作2 Javaのファイル操作クラスは、JDK1.7(Java7)で新しいものが導入された。(通称NIO2(New I/O 2)。自分はニオツーって呼んでる) →旧ファイル操作 Filesクラスでファイルのコピーや移動などを行うことが出来る。 また、ファイルやディレクトリーの場所を表すPathというインターフェースが新たに設けられた。 Path java.nio.file.Pathは、ファイルやディレクトリーの場所を表すインターフェース。 従来はjava.io.Fileクラスがその役割だった。 import java.nio.file.FileSystem; import java.nio.file.FileSystems; import java.nio.file.Path; FileSystem fs = FileSystems.getDefault(); Pat

  • Java一意メモ(Hishidama's Java unique-id Memo)

    自分のプログラム内で一意となるIDを振りたいなら、使えるのはUIDやVMIDだろうか。他のは よー分からん(爆) System.out.println(new UID()); System.out.println(new VMID()); File#createTempFile() 例えばUIDやVMIDを使って重複しない一時ファイル名を生成するという使い道も考えられる。 ただしUID#toString()は「1b32f29a:11beb5202b3:-8000」の様にコロン「:」を含むため、Windowsではそのままではファイル名には使えない。String#replace(':', '_')とかで変換してやる必要がある。(VMIDも同様) でも、一時ファイルを生成するにはFile#createTempFile()を使うのが一番素直でしょう。 Thread#getId() Thread#g

  • Java Streamメモ(Hishidama's Java8 Stream Memo)

    概要 Stream系クラス Stream系メソッド Stream生成 [/2018-10-01] メソッド Stream [/2021-03-21] BaseStream プリミティブStream [/2021-03-21] onClose [2015-12-13] Streamの例 [/2021-03-21] 概要 JDK1.8で導入されたStreamは、複数の値(オブジェクト)に対して何らかの処理(変換や集計)を行う事を分かりやすく記述できる。 import java.util.stream.Stream; Streamの値の持ち方はjava.util.Listのようなイメージ。 しかしStreamの操作は一度しか行えないので(ScalaのTraversableOnce相当)、java.util.Iteratorの方が近いかも。 つまり複数の値を保持し、順次処理していく。 なお、Str

  • Java新機能メモ(Hishidama's Java up-to-date)

    S-JIS[2008-07-07/2024-03-23] 変更履歴 Java新機能(Javaの変更点) Javaのバージョンによる変更点。 JDK1.4 [/2013-12-20] JDK1.5 [/2019-12-08] JDK1.6 [/2017-06-10] JDK1.7 [/2017-09-30] JDK1.8 [/2022-10-22] JDK9 [/2021-03-21] JDK10 [/2018-06-02] JDK11 [2018-10-01] JDK12 [/2020-09-29] JDK13 [2019-09-22] JDK14 [/2021-03-16] JDK15 [/2020-11-08] JDK16 [2021-03-21] JDK17 [2021-09-19] JDK18 [2022-03-23] JDK19 [2023-09-23] JDK20 [2023-

  • Java関数型インターフェースメモ(Hishidama's Java8 Functional Interface Memo)

    概要 @FunctionalInterface 標準的な関数 Supplier(get:()->T) [/2014-04-13] Consumer(accept:(T)->void) [/2014-04-13] Predicate(test:(T)->boolean) [/2018-10-01] Function(apply:(T)->R) [/2014-04-13] UnaryOperator(apply:(T)->T) [/2014-04-13] BinaryOperator(apply:(T,T)->T) [/2014-04-13] 関数型インターフェースは、ラムダ式やメソッド参照の代入先になれるインターフェースのこと。 関数型インターフェースの条件は、大雑把に言って、定義されている抽象メソッドが1つだけあるインターフェース。 staticメソッドやデフォルトメソッドは含まれていても

  • Hadoop HBase操作サンプル(Hishidama's Hadoop HBase sample Memo)

    HBaseのテーブルは、qualifierの中はデータ追加で自動的に増やせるが、family(列)はテーブルを一旦使用不可にして項目追加を行わないと増やせない。 したがって変化の無いものを列(family)にする方がいいんじゃないかと思う。 (試験名の方を可変にしておけば、模試とか補習(苦笑)とかにも対応できるし) 準備:テーブルの作成 今回のサンプル用に、HBase Shellからcreateコマンドを実行するか、HBaseのテーブル作成APIを使ってテーブルを作成しておく。 HBase Shellの場合 hbase(main):001:0> create 'student','personal','suugaku','kokugo','rika','shakai','eigo','total5' HBase APIの場合 package jp.hishidama.hadoop.hbas

  • HBase Javaメモ(Hishidama's HBase0.89 Java Memo)

    lib直下のjarファイルを全て入れてしまうのが楽(笑) HBaseアクセスのサンプル 豊月さんのサンプルをベースにしています。 import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.Path; import org.apache.hadoop.hbase.HBaseConfiguration; import org.apache.hadoop.hbase.client.Get; import org.apache.hadoop.hbase.client.HTableInterface; import org.apache.hadoop.hbase.client.Result; import org.apache.hadoop.hbase.util.Bytes; public class HBase

  • HBase Javaテーブル操作メモ(Hishidama's HBase Java table Memo)

    S-JIS[2010-02-27] 変更履歴 HBaseのテーブル操作 HBaseのテーブルをJavaから操作する例。 HBaseのテーブルそのものを扱うにはHBaseAdminクラスを使用する。 テーブル操作の基 import org.apache.hadoop.fs.Path; import org.apache.hadoop.hbase.HBaseConfiguration; import org.apache.hadoop.hbase.HColumnDescriptor; import org.apache.hadoop.hbase.HTableDescriptor; import org.apache.hadoop.hbase.MasterNotRunningException; import org.apache.hadoop.hbase.client.HBaseAdmin;

  • Java書式付き出力メモ(Hishidama's Java Formatter/Formattable Memo)

    第一引数で書式を指定し、その書式に則って第二引数以降の値を編集(変換)して出力する。 (第二引数以降の値は、可変長引数で複数指定できる) System.out.printf("値1=%d 値2=%d", 123, 456); String s = String.format("%04x", 789); 書式には「%」が入った文字列を指定する。「%」の書式指定に従って変換が行われる。 デフォルトでは、複数の%指定がある場合、第二引数以降の値が順番に使われる。 引数が多い分には無視されるだけなので別に構わないが、指定に該当する引数が足りないと例外が発生する。 変換の実体はFormatterクラスにある。 したがってどのような書式があるかについてはFormatterJavadocに載っているが、代表的なのは以下のようなもの。 C言語と同様の書式指定 書式 説明 例

  • バッチメモ(Hishidama's bat-file Memo)

    実行方法 引数の注意点 [2013-03-05] 定石 書き方 @echo off 別バッチの実行方法 [2007-03-07] タイトル変更方法 [2009-11-14] バッチの場所取得 [2009-11-14] 変数 バッチの戻り値 注意点 [/2007-06-15] 標準入力 [2007-10-26] 実行方法 バッチファイルの拡張子をbatにしておく。 このファイルがある場所を環境変数PATHに追加しておくか、ファイルのある場所まで移動して、 コマンドラインからファイル名を入力するか、拡張子を除いた部分を入力することによって バッチを実行する。 またはフルパスでファイル名を入力する。 ディレクトリやファイル名にスペースが入っている場合は、全体をダブルクォーテーションでくくらないと、スペースの所で区切られてしまう。(コマンド用のファイル名にスペースを入れることはあまり無いだろうが…

  • Java列挙型メモ(Hishidama's Java enum Memo)

    列挙型(enum)は、JDK1.5で導入された、一連の値を定義する文法。[2006-07-26] 一番単純な定義方法はC言語の列挙型に似ているが、C言語と違って実態はクラス(と、不変オブジェクト)。 enumはenumerate(イニュームレイトあるいはイヌームレイト)の略なので、発音としては「イニューム」が正しそうだが、自分は「イナム」「エナム」と呼んでいる。 最も単純な定義方法 enum 列挙名 { 列挙子, 列挙子, … } 列挙名は、クラス名(やインターフェース名など)と同様。 (したがって、publicの付いたenumの列挙名は、ソースファイル名と同じでなければならない。また、publicの付いたenumはソースファイル内に1つしか定義できない) 列挙子(enum定数)は、フィールド名の定数(クラス内のstatic final変数)と同様。 (したがって、アルファベット大文字を使

  • Java総称型メモ(Hishidama's Java Generics Memo)

    メソッドの総称型 メソッドのみに総称型を適用した定義を行うことも出来る。[2007-06-12] 戻り値の型の直前に「<仮型引数, 仮型引数…>」を置くだけ。後はクラスの場合と同様。 public static <T> T notNull(T arg1, T arg2) { T ret; if (arg1 != null) { ret = arg1; } else { ret = arg2; } return ret; } このメソッドを呼び出す側は、クラスの場合とは異なり、明示的に型引数を指定する必要は無い。 指定した引数の値に応じて、自動的に型が判断される。 String s = notNull("abc", "def"); //型引数はString Long l = notNull(new Long(1), new Long(2)); //型引数はLong int i = notNu

  • 1