Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article?

もう遠い昔の話だし、今さらどうでもいいことだけど、日本語資料が見当たらなかったので、まとめておく。 実は Java2 (1.2) 以降とそれより前で String.hashCode() のアルゴリズムが異なっている。 現在の hashCode 現在 (1.2 以降) のアルゴリズムは単純にすべての文字に適当な係数をかけて算出する。 public int hashCode() この文字列のハッシュコードを返します。String のハッシュコードは、次の方法で計算します。 s[0]*31^(n-1) + s[1]*31^(n-2) + ... + s[n-1] int 算術を使います。s[i] は文字列の i 番目の文字、n は文字列の長さ、^ は、べき乗を示します。空の文字列のハッシュ値は 0 です。 ちなみに Java で書くと以下のようになる。*1 public int hashCode
ラムダ式とStream APIで学ぶモダンJava ― 関数型を取り入れて変化するJava言語の現在 20年以上の歴史を持つJava言語ですが、近年は関数型を取り入れるなど大きく変化し、リリースサイクルも格段に短くなってますます進化しています。モダンなJavaプログラミングで必要となるラムダ式とStream APIについて、谷本心(cero_t)さんによる詳細な解説です。 1996年にJava 1.0が登場して、もう20年以上がたちました。この間、Javaにはさまざまな言語機能やAPIが追加され、変化し続けています。 これだけ長い歴史を持つプログラミング言語ですから、利用者が多かったり、フレームワークやライブラリが充実していたりする一方で、書籍やWebに掲載されている情報が少し古かったり、研修で学ぶJavaが最新の動向を踏まえていなかったりするなど、長い歴史を持つが故の問題もあります。 特
この記事には複数の問題があります。 改善やノートページでの議論にご協力ください。 脚注による出典や参考文献の参照が不十分です。脚注を追加してください。(2024年3月) 古い情報を更新する必要があります。(2018年12月) 独自研究が含まれているおそれがあります。(2018年12月) 雑多な内容を羅列した節があります。(2018年12月) C++とJavaとの違いは、それら言語の歴史から辿ることができる。 C++はC言語の派生規格であり、手続き型プログラミング言語にクラス(抽象データ型)を導入し、静的型付けオブジェクト指向プログラミングを実現するために開発された。C言語の設計思想を維持・継承し、C言語の利点(機械語やアセンブラに準ずる高速性やハードウェア操作性など)を一切損なわないようにしているため、他のオブジェクト指向言語に比べてコードの実行効率や柔軟性を重視している反面、安全性は犠牲
Java初心者だった新入社員の頃、先輩にコードレビューで指摘された事を思い出してまとめてみた。 追記:本記事に関しては賛否含め、多くの有益なコメントを頂いています。本記事をお読みになる際は、是非コメント欄も併せてご覧下さい。 2018/04/26 コメントを参考に「何でも定数にしようとする」の見出し・本文を修正しました。@kagilinn さん、ありがとうございました。 2018/04/30 サンプルコードの判定バグってたので修正しました。@y_miz さん、ご指摘ありがとうございました。 コメントの誤記、用語誤りを修正しました。@scivola さん、編集リクエストありがとうございました。 不要なインスタンス変数を作ってしまう インスタンス変数は状態が保持されるので、バグを作り込みやすい。 「これローカル変数でよくない?」ってよく指摘された。 インスタンス変数を作る前に、ローカル変数で実
Javaは歴史が古いので、各種ライブラリ、ツールを選択するのにも様々な選択肢があります。それがJavaのいいところでもあります。 しかし、しかしです。ココでは、あえて、それらの中から項目別に選ぶべきモノを一度してみます。また、何を選ぶべきかと共に、何を選ぶ出来でないかも記載しています。完全に主観で、ネタでありポエムです。面白半分に読んで下さい。 バージョン Java 8 Java 9 がリリースされましたが、Jigsaw の各種ライブラリの対応の遅れから、本格導入はまだされないでしょう。その代わり、Java 8の関数パラダイム がより多くのソフトウェアに反映され、ソースコードが洗練されていくことでしょう。 次点 Java 10(18) Javaのバージョン番号が西暦と連動され ます。 なくなったそうです。勉強になるな!アドベントカレンダー! Javaにもvarが導入されます。さぁ、こい。
一時期はメソッド名は動詞で始まらなければならないと言われていましたが、昨今ではJava標準APIでも動詞ではないメソッド名が散見されます。本エントリではその傾向をまとめます。 of, from(from, of, valueOf, fromString, fromNullable etc.) fromやofはEffective Javaでも触れられているように、ファクトリメソッドとして利用されることが多いようです。例えばJAX-RSでは valueOf(), fromString() といった名前のファクトリメソッドを利用します。 EnumSet.of Integer.valueOf to, as(toList, asList, toArray etc.) 主に自分自身を別の形に変換するインスタンスを返すメソッドに使います。 IntStream.toArray Arrays.asList
はじめに 驚き最小の原則(法則)という言葉があります。 Wikipediaの記事を引用すると http://ja.wikipedia.org/wiki/%E9%A9%9A%E3%81%8D%E6%9C%80%E5%B0%8F%E3%81%AE%E5%8E%9F%E5%89%87 ユーザインタフェースやプログラミング言語の設計および人間工学において、インタフェースの2つの要素が互いに矛盾あるいは不明瞭だったときに、その動作としては人間のユーザやプログラマが最も自然に思える(驚きが少ない)ものを選択すべきだとする考え方である。 要するに、使うときに「おやっ?」という驚きが少ないほうが良いプログラムであるといえます[1]。 [1]: どっちが驚きが少ないか迷う場面もかなり多いですが・・・ この記事では敢えて驚きの多いプログラムの書き方を紹介します。驚きの多いプログラムを読むとどんな気分になるか、
Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article? Clean Code アジャイルソフトウェア達人の技 の読書メモ。 本書は、Clean Code――すなわち、綺麗で読みやすいコードを書くための様々なテクニックや考え方を紹介している。 本書は、大きく以下の3つのパートに分かれている。 Clean Code を書くための原則・パターンの紹介・解説(第2~13章) 実際のコードをリファクタリングしながら Clean Code にしていく様子を説明したケーススタディ(第14~16章) コードのにおい、経験則をまとめたカタログ(第17章) ここでは、パート1と3の内容をメモする。 パート2につ
関数の名前の付け方は人それぞれですが、使う単語が同じなら、関数の名前はほぼ同じものになると思います。例えば、サイズをセットする関数の名前を、「set」と「size」という単語を使って考えると、ほぼ全員が「SetSize」と答えるでしょう。「SizeSet」「SizeToSet」「SizeSetted」「SettingSize」といった名前を考える人は、ほとんどいないと思います。 ところが、真か偽かのブール値を返す関数の名前は、混乱することが多いようです。 ここでは、Java言語で採用されている命名規則と、その解釈の仕方を紹介します。 関数名が混乱する例 ブール値を返す関数では、「Is○○」という名前を良く見かけます。例えば、中身が空っぽかどうか、の判定をする関数には、IsEmptyという名前が良く使われます。MFCのCStringクラスや、JavaのListインターフェースなどにも、IsE
同じ結果を提供するプログラムであっても、プログラミング上の実現方法は一通りではありません。 プログラマは、それらの中から最適な方法を選択すべく考慮しなければなりません。 そのときのひとつの判断基準に「性能(処理速度,消費資源)」があります。 ここでは、Javaのプログラミングにおいて「性能」を意識したときに、いくつかの考慮すべき事項について、書籍「Javaの鉄則」から参考になると思ったものを紹介したいと思います。 Contents オブジェクトの作成のコスト 出来るだけ継承の少ないクラスを使う,作る オブジェクト生成時の処理を軽くする オブジェクトは必要なときに作成する そのオブジェクトが再利用可能な場合は再利用する 変数の処理性能 頻繁にアクセスする変数にはスタック変数を使用する 変数は出来るだけプリミティブ型を使う インスタンス変数の無駄な初期化はしない Javaコンパイラ,JITによ
Immutableって‥ AndroidでBitmapにグラデーション等のフィルタを適用しようと思ったところ、ImmutableなBitmapを変換する箇所でメモリの問題にぶち当たったので調べてみました。 まずは例外を。BitmapFactory でオプションを与えずにデコードした場合、生成されるBitmapはImmutable(不変)になっています。 これを… Canvas canvas = new Canvas(bitmap); canvas.drawRect(...); なんかした場合、java.lang.IllegalStateException: Immutable bitmap passed to Canvas constructor と言われChaiMaxx ImmutableなBitmapがCanvasのコンストラクタ引数に設定されている(Canvasに設定=編集するのにI
Androidアプリのデータ保存方法の「プリファレンス」の使い方は? Androidアプリでは、いくつかのデータ保存方法が用意されていますが、最も簡単に扱える方法が、この「プリファレンス(Preference)」であると思います。 プリファレンスは、データを、キー名と値の組み合わせで保存する形をとります。 JavaでいうHashTableや、VB等のDictionaryのような感じですね。 データの量や保存したい形にもよりますが、数個の設定値を保持させておきたいぐらいであれば、このプリファレンスで事足りると思います。 それでは、サンプルコードとともに、プリファレンスの使い方をみていきましょう。 プリファレンスの保存方法 まずは保存時の処理の説明です。 保存するデータの型は、boolean型、float型、int型、long型、String型が使えます。 String型のデータを保存するとき
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く