月一ペースで怒涛のごとく進化を続けるVisual Studio Code(以下VS Code)だが、最近、Javaのデバッグ実行ができるようになったらしいので、試しにやってみる。 必要なもの Visual Studio Code 今回は1.17.2を使用。 Java Development Kit 今回は1.8を使用。 Javaアプリケーションプロジェクト Maven/Gradle/Eclipseのいずれか。 今回はMavenプロジェクトを使用。 手順 VS Codeを起動 拡張機能Java Extention Packをインストールする 拡張機能ビューを開く(Ctrl+Shift+X or ⇧⌘X) 入力欄にjava packとか入力して、Java Extention Packを探す。 インストールをクリック インストールが終わったら再読み込みをクリック なお、Debugger for
3大Java IDEであるEclipse, IntelliJ, NetBeansを比較した結果をまとめてみました! 調査結果は、個人的な主観も入っていることを認識していただければと思います。 調査実施日は2017年3月26日です。 最新バージョン・次バージョン 調査実施日を基準として、各IDEの最新バージョンは下記の通りです。 Eclipse: Neon (2016.06.22リリース) IntelliJ: 2017.1 (2017.03.22リリース) NetBeans: 8.2 (2016.10.03リリース) 次バージョンは下記の通りです。 Eclipse: Oxygen (2017.06リリース予定) IntelliJ: 未定 NetBeans: 9.0 (2017.08リリース予定) 対応OS Eclipse, IntelliJ, NetBeansは、全てWindows, Lin
Java で使用頻度の高い HashMap について内部動作や注意点などを簡単にまとめました。特に自作クラスをキーに使用したい場合は内部動作が分かっていないと危険ですね。 HashMapの内部動作 HashMap は内部にハッシュテーブル(配列)を保持していて、キーと値をputすると HashMap はキーを内部でハッシュ関数(HashMap#hash)に通します。そしてその出力結果をインデックスとして、キーと値はハッシュテーブルに格納されます。キーが null の場合は 0 がインデックスになります。 値を取得getする場合は、まずキーをハッシュ関数(HashMap#hash)に通して結果を得ます。この結果をハッシュテーブルのインデックス値とみなして、配列から要素を取り出します。この要素はキーと値のペアであり、まず最初にキーのハッシュコードが一致するかを判定して、最後にこのキーとgetで
抽象化の恩恵をあきらめずに、インスタンス化可能なクラスを拡張して、equals 契約を守ったまま、値要素を追加する方法はない。 equals をオーバーライドする時は、常に hashCode をオーバーライドする ゼロではない定数(たとえば17)を result(int型)に保存 意味のあるフィールドに対して、次を行う boolean なら (f?1:0) byte,char,short,int なら、(int)f long なら、(int)(f^(f>>32)) float なら、Float.floatToIntBits(f) double なら、Double.doubleToLongBits(f) を行い、long と同様の変換 参照なら、オブジェクトのhashCode() null なら 0 配列なら、各要素を フィールドとして扱う result = 31 * result + c
こんにちは、andoです。 ついにJava8がリリースされたのでさっそくインストールしてみました。 Java8になってラムダ式を始め、多くの機能が追加されたのですが、既存機能についても性能改善が行われています。 人気がありそうな新機能の紹介は他の人にお任せして、今回はHashMapの変更点について確認したいと思います。 はたして既存のプログラムはJava8で実行するだけで、その恩恵を享受できるのでしょうか。 java.util.HashMap HashMapといえば使用頻度1、2を争うコレクションクラスでデータの検索、追加がO(1)で行え、 辞書的に使える事から簡易的なDTOやキャッシュ、データベースのレコード構造、さらにはListですむところでさえ数値をキーにして使う兵もいるというくらい良くも悪くも色々使えます。 それが速くなるのであれば、既存のプログラムも速くなるはず、ということでさっ
java.lang.Object#hashCode()の性質という記事で書いたのですが、Java の Object#hashCode() の値はただの乱数となっています。 この乱数のアルゴリズムが、Java SE 8 で「線形合同法」から「XORシフト方式」に変更になっていました。 といっても、変更されたのはたった1文字。 VMオプションのデフォルト設定が -XX:hashCode=0 から -XX:hashCode=5 に変わっただけでした。 hotspot-rt Udiff hotspot/src/share/vm/runtime/globals.hpp どういうこと? もともと、Java の以前の実装*1 *2から、Object#hashCode() のアルゴリズムはVMオプション -XX:hashCode=? で選べるようになっていました。 ですが、デフォルトは長いこと 0(=線形
超初歩的な事かもですが…。 Javaで配列オブジェクトをSystem.out.println()等で表示した時の結果についてメモです。 サンプルコード public class Sample { public static void main(String[] args) { String[] str = new String[10]; System.out.println("string[]:" + str); } } 実行結果 string[]:[Ljava.lang.String;@3e25a5 クラス名とハッシュコードが表示されます。 C言語のノリで、なんとなくアドレスだと思っていました。。。 Javaはアドレスを意識しないで良いのが利点なのに、アドレスが表示されるわけがないですよね。 と言ってもアドレスと無関係ではないみたいですが。。。 ☆ハッシュコードとは Objectクラスで
目的 Javaで hashCode 関連のメソッドはいくつかのクラスに分散しているので、整理してみます。 各メソッドの詳細な説明はしません。 hashCode の基本 ハッシュ値を求める。ハッシュテーブル探索などで使われる(HashMap や HashSet など) equals() とセットで、矛盾なく実装する必要がある equals() が true を返すオブジェクトは、同じハッシュ値であること 違うハッシュ値である場合には、equals() は false を返すこと(対偶) equals() が false を返すオブジェクトが、同じハッシュ値であっても構わない(ハッシュ値の衝突)が、衝突が少ないほうが性能が良い メソッド java.lang.Object#hashCode() インスタンスのハッシュ値を計算する。 独自のクラスを HashMap などのキーに使いたいときには自分
環境 Eclipse IDE for Java Developers:Juno Service Release 1 Git:上記Eclipseのプリインストール版 プロジェクト作成~初コミットまで 多くの場合は、どこかしらプロジェクトを取り込んでそこからコーディングかと思われますが、Hello world的なプロジェクトを作成して初めてコミットするまでの手順です。 まずパッケージエクスプローラ上で、右クリック - [New] - [Java Project]を作成し、適当なパッケージとクラスを作成します。そこから、プロジェクト上で右クリック、[Team] - [Share Project]を選択。 次に表示される画面でGitを選択します。Configure Git Repositoryという画面が表示されるので、[Create]ボタンを押下します。
Eclipse から Git 操作を行う、EGit の使い方についてまとめてみました。 この記事は 2014/3/25 にリリースされた EGit 3.3.1 を使い、Ubuntu もしくは Windows で操作しています。(たぶん Mac でも大丈夫です) リポジトリを破壊したり、ファイルが多くあると遅くなっていたりしていたお騒がせな EGit でしたが、現在の所、通常の操作では問題なくなったように思います。 目次 導入 ローカルリポジトリの作成 ファイル操作 リモートリポジトリに接続 ローカルブランチの作成 リベースインタラクティブ ブランチからのマージ1 ブランチからのマージ2 コンフリクトの解消 リベース コミットコメント修正 コミットリセット リバートコミット このページでは、1〜6までを記載しています。(続きは力尽きたので次回…) 導入 EGit は Eclipse 用の G
Javaを勉強し始めた時にまず最初に目にするpublic static void main(String[] args)という一文ですが、何となく決まり事なんだという程度で書いていたと思います。 Javaに慣れてきた段階であらためて考えると、色々見えてくることもありますので少しだけ内容を追ってみます。 Javaの入門書などでまず最初に実行するのが以下のような HelloWorld! を出力するプログラムですね。 public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World!"); } } 実行すると以下のようになります。 $ javac HelloWorld.java $ java HelloWorld Hello World! なぜ HelloWorld
Javaのクラス宣言には5種類ある。 トップレベルクラス・ネストしたクラス・内部クラス・ローカル内部クラス・匿名クラス(無名クラスとも言われる)の5種類だ。 今回はこの5種類のクラス宣言のおさらい。 トップレベルクラス これは普段使っているクラス。拡張子が.javaのファイルを作り、そのファイル名とクラス名を合致させなくてはいけない。そのjavaファイルのトップレベルに位置する。 ネストしたクラス 「ネストしたクラス」(Nested class)とはクラスの中にクラスがネストしている状態。トップレベルクラスの内側にstaticキーワードをつけてクラス宣言を行う。 public class Outer { public static class Nested { } } このネストしたクラスは、トップレベルクラスと同等の機能性を持つ。 クラス名はOuter.Nestedという名前で扱われるが
この記事を簡潔にまとめた記事「ハッシュは二分木(ツリー)より速い」を掲載しました。(2008-08-04) ハッシュと二分木(ツリー)*1では普通はハッシュの方が速いとされる(ハッシュは挿入、参照、削除の時間計算量がO(1)、二分木はO(log N))。しかし、ハッシュは動作が複雑なため、実際はあまり二分木と速度が変わらないとも言われる。 それをC++で検証した記事を見つけた。結論は、二分木よりハッシュの方が遅いというものだ。 ハッシュは本当に速いのか? - S34 http://www.s34.co.jp/cpptechdoc/article/hash/ ハッシュは本当に遅いのか - 山に生きる http://d.hatena.ne.jp/pmoky/20050502/1114966341 では、JavaのHashSetとTreeSet(またはHashMapやTreeMap)でも同じこと
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く