2012-05-26 13 views
61

मैं हैशमैप कुंजी का नाम बदलने का एक तरीका ढूंढ रहा हूं, लेकिन मुझे नहीं पता कि जावा में यह संभव है या नहीं।क्या हैशमैप कुंजी का नाम बदलना संभव है?

+8

गोश, मुझे उम्मीद नहीं है। कुंजी/मूल्य जोड़ी को हटाने और पुन: प्रस्तुत करने के तरीके की तरह लगता है। ध्यान दें कि आप सामान्य रूप से मानचित्र में वैसे भी संदर्भों को संभालते हैं। –

+3

कृपया हैश प्रविष्टि की कुंजी को संशोधित न करें! यदि आप भाग्यशाली हैं, तो आप इसे उसी हैशकोड के साथ बदल देंगे और आप कुछ हद तक पागल हो जाएंगे कि क्या हुआ; यदि आप दुर्भाग्यपूर्ण हैं, तो आप एक प्रविष्टि के साथ समाप्त हो जाएंगे जो नहीं मिल सकता है (ठीक है, पूरी तालिका के अगले पुनर्निर्माण तक नहीं)। निकालें/पुन: सम्मिलित करना बहुत अधिक है, और बहुत सस्ता होना चाहिए (यह सब संदर्भ है, सब के बाद)। –

उत्तर

86

तत्व को हटाने का प्रयास करें और इसे नए नाम से दोबारा डालें।

Object obj = map.remove("oldKey"); 
map.put("newKey", obj); 
+34

+1। और पढ़ने के लिए सबसे सरल है 'map.put ("newKey", map.remove ("oldKey")); और प्रदान किया गया है' oldKey' –

+6

जहां तक ​​पठनीयता का सवाल है, मैं असहमत हूं, मैं व्यक्तिगत रूप से स्पष्ट रूप से देखना पसंद करता हूं मानचित्र से एक वस्तु हटा दी जाती है, और फिर जोड़ा जाता है। और चूंकि ओपी जावा के लिए काफी नया प्रतीत होता है, इसलिए मैंने इसे इस तरह से रखने का फैसला किया। प्रदर्शन के लिए हालांकि, आपका संस्करण बिल्कुल पसंद किया गया है (क्योंकि मुझे नहीं लगता कि संकलक मेरे संस्करण को आपके तरीके से अनुकूलित करेगा)। –

+2

जावैक 1.8.0_45 के लिए, एक-पंक्ति संस्करण दो बाइटकोड छोटा है, जो मुझे आश्चर्यचकित करता है। जेनेरिकों के साथ अधिक परेशानियों से आप इसे 'ओबीजे' को 'रख' के बिना पास नहीं कर सकते हैं या इसे किसी अन्य प्रकार के रूप में घोषित नहीं कर सकते हैं, लेकिन निश्चित रूप से सीधे 'निकालें' के परिणाम को पारित कर सकते हैं। –

4

आप हैशपैप कुंजी का नाम नहीं बदलते हैं, आपको नई कुंजी के साथ एक नई प्रविष्टि डालना होगा और पुराने को हटा देना होगा।

11

कुंजी है, जो एक नया कुंजी के लिए, नाम बदलने की आवश्यकता के मान असाइन करें: अपने नक्शे में कुंजी String कर रहे हैं मान लिया जाये, इसे उस तरह से प्राप्त किया जा सकता है। और पुरानी कुंजी को हटा दें।

hashMap.put("New_Key", hashMap.get("Old_Key")); 
hashMap.remove("Old_Key"); 
4

आप नाम नहीं बदल सकते/hashmap कुंजी एक बार जोड़ा संशोधित करते हैं।

कुंजी को हटाने/हटाने और नई कुंजी और मूल्य जोड़ी डालने का एकमात्र तरीका है।

कारण: hashmap आंतरिक कार्यान्वयन में HashMap कुंजी संशोधक अंतिम के रूप में चिह्नित।

static class Entry<K ,V> implements Map.Entry<K ,V> 
{ 
final K key; 
V value; 
Entry<K ,V> next; 
final int hash; 
...//More code goes here 
} 

संदर्भ के लिए: HashMap

6
hashMap.put("New_Key", hashMap.remove("Old_Key")); 

यह तुम क्या चाहते हो जाएगा लेकिन, आप उस कुंजी का स्थान बदल गया है देखेंगे।

+0

@Vins दस्तावेजों को फिर से कृपया यह नेतृत्व wiil (उदाहरण के लिए map.entrySet() का उपयोग करें) –

+0

मेरी बुरा जांचें, मैंने अपनी टिप्पणी हटा दी है और इसके लिए वोट दिया है। उसके लिए माफ़ करना। – Vins

संबंधित मुद्दे