こんにちは、通常の配列を使用して 2 つのキー値を格納することでオブジェクトの作成を回避しようとしていますが、うまくいかないようです。
その 1 つのオブジェクトの作成を回避するための解決策があることを知っているかもしれません。
追加するのを忘れた:
1) うまくいかない理由はわかっています... そうしないと、キーに equals() と hashcode() を実装しません。
2)基本的に、キーを取得するときに1つのオブジェクトの作成を回避しようとしています。通常、サービスクラスにはメソッドがあります
public void get(String key1, String key2){
return keyMap.get(new Key(key1,key2)); <>>avoiding the new Key()
}
改行
import java.util.HashMap;
import java.util.Map;
public class ArrayMap {
/**
* @param args
*/
public static void main(String[] args) {
/*start A Possible to get this to work? */
Map<String[], String> arrMap = new HashMap<>();
arrMap.put(new String[] { "hello", "hi" }, "hello motto");
System.out.println(arrMap);
System.out.println(arrMap.get(new String[] { "hello", "hi" })); // print
// null
/* end of A */
/*Start of B: Reason: to avoid this */
Map<Key, String> keyMap = new HashMap<Key, String>();
keyMap.put(new Key("hello", "hi"), "hello motto"); // I wish to avoid one object creation
System.out.println(keyMap.get(new Key("hello", "hi"))); // print
// "hello motto"
/*End of B: Reason: to avoid this */
}
}
class Key {
private final String key1;
private final String key2;
public Key(String key1, String key2) {
this.key1 = key1;
this.key2 = key2;
}
public String getKey1() {
return key1;
}
public String getKey2() {
return key2;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((key1 == null) ? 0 : key1.hashCode());
result = prime * result + ((key2 == null) ? 0 : key2.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Key other = (Key) obj;
if (key1 == null) {
if (other.key1 != null)
return false;
} else if (!key1.equals(other.key1))
return false;
if (key2 == null) {
if (other.key2 != null)
return false;
} else if (!key2.equals(other.key2))
return false;
return true;
}
}