Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Effective Java 輪読会 項目69-70追加

447 views

Published on

Effective Java 輪読会 項目69-70追加

Published in: Technology
  • Login to see the comments

  • Be the first to like this

Effective Java 輪読会 項目69-70追加

  1. 1. String.intern() • メモリ上の正規化マップに登録した文字列の 参照を取得できる。 String str1 = "abc"; String str2 = "abc"; System.out.println(str1 == str2); String str3 = new String("abc"); System.out.println(str1 == str3); System.out.println(str1.intern() == str3.intern()); true false true
  2. 2. String.intern()改良版1 • ConcurrentMapを正規化マップとして使う – putIfAbsentメソッド: マップに、キーに紐づく値が 存在しなければ、マッピングを追加してnullを返す。 存在していれば、キーに紐づく値を返す。 private static final ConcurrentMap<String, String> map = new ConcurrentHashMap<String, String>(); public static String intern(String s) { String previousValue = map.putIfAbsent(s, s); return previousValue = null ? s : previousValue; }
  3. 3. String.intern()改良版2 • putIfAbsentを必要なときにだけ使う private static final ConcurrentMap<String, String> map = new ConcurrentHashMap<String, String>(); public static String intern(String s) { String result = map.get(s); if (result == null) { result = map.putIfAvsent(s, s) if (result == null) { result = s; } } }

×