के लिए एक जटिल कुंजी मैं एक बिंदु वस्तु है:अमरूद कैश (स्थानांतरण)
class Point {
final int x,y;
...
}
क्योंकि इन बातों का प्रयोग किया जाएगा/मेरी कोड में जगह भर में बनाया है, मैं अमरूद कैश का उपयोग शुरू करना चाहते हैं। असुविधाजनक रूप से कैशलोडर केवल एक पैरामीटर स्वीकार करता है। Another question यहां स्टैक ओवरफ्लो पर एक समान समस्या के लिए एक जोड़ी ऑब्जेक्ट का उपयोग करें। लेकिन मुझे हर कैश अनुरोध के लिए डमी ऑब्जेक्ट बनाने का विचार पसंद नहीं है। तो मैं अपने स्वयं के कामकाज के साथ आया:
क्योंकि ऑब्जेक्ट x और y द्वारा निर्दिष्ट किया गया है, मुझे लगता है कि मैं दोनों मानों को एक लंबे समय में विलय कर सकता हूं, जो मेरी कुंजी होगी।
void test(int x, int y) {
Long key = (long) ((long) (x) << Integer.SIZE | y);
Point point = cache.get(key);
}
CacheLoader<Long, Point> loader = new CacheLoader<Long, Point>() {
public Point load(Long key) throws Exception {
final int x,y;
// shift magic
x = (int) (key >> Integer.SIZE);
y = key.intValue();
return new Point(x, y);
}
};
मैं वास्तव में एक पारी noob हूँ। यह काम करेगा? क्या मैं कुछ भुल गया? क्या यह जोड़ी वर्ग की तुलना में "तेज" है? यह मेरा सवाल है!
हाँ, मैं कोड का परीक्षण करता हूं और यह अब तक काम करता है मैं बता सकता हूं।
उफ़। * कृपया * बिंदु के लिए एक असली वस्तु (दो अच्छी तरह से नामित फ़ील्ड के साथ) बनाएँ! आप पहले से ही 'डमी' ऑब्जेक्ट बना रहे हैं, एक java.lang.Long, बस अधिक obfuscated। –