আমি একটি হাশম্যাপ কী নামকরণের জন্য একটি উপায় খুঁজছি, তবে জাভাতে এটি সম্ভব কিনা তা আমি জানি না।
আমি একটি হাশম্যাপ কী নামকরণের জন্য একটি উপায় খুঁজছি, তবে জাভাতে এটি সম্ভব কিনা তা আমি জানি না।
উত্তর:
উপাদানটি মুছে ফেলার চেষ্টা করুন এবং নতুন নাম দিয়ে এটি আবার রাখুন। আপনার মানচিত্রের কীগুলি ধরে নিলে এটি String
সেভাবে অর্জন করা যেতে পারে:
Object obj = map.remove("oldKey");
map.put("newKey", obj);
map.put( "newKey", map.remove( "oldKey" ) );
এবং সরবরাহিত রয়েছেoldKey
obj
করার put
এটা ভোটদান বা আরেক ধরনের যেমন প্রকাশক ছাড়া, কিন্তু অবশ্যই ফলাফলের ক্ষণস্থায়ী remove
সরাসরি কাজ করে।
hashMap.put("New_Key", hashMap.remove("Old_Key"));
এটি আপনি যা চান তা করতে পারে তবে আপনি লক্ষ্য করবেন যে কীটির অবস্থান পরিবর্তন হয়েছে।
আপনি key
একবার যুক্ত হয়ে গেলে হ্যাশম্যাপটির নতুন নাম / পরিবর্তন করতে পারবেন না ।
একমাত্র উপায় হ'ল মুছে ফেলা / অপসারণ key
এবং নতুন key
এবং value
জুড়ি দিয়ে সন্নিবেশ করা ।
কারণ : হ্যাশম্যাপ অভ্যন্তরীণ বাস্তবায়নে হ্যাশম্যাপkey
সংশোধক হিসাবে চিহ্নিতfinal
।
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
}
রেফারেন্সের জন্য: হ্যাশম্যাপ
আমি যুক্তি দিয়েছি যে হ্যাশম্যাপ কীগুলির সারমর্মটি সূচক অ্যাক্সেসের উদ্দেশ্যে এবং এর চেয়ে বেশি কিছুই নেই এখানে একটি হ্যাক রয়েছে: কী-র্যাপার বিষয়টিকে কীটির মানকে ঘিরে তৈরি করা যাতে কী-র্যাপার অবজেক্টটি সূচক অ্যাক্সেসের জন্য হ্যাশম্যাপ কী হয়ে যায়, তাই আপনি আপনার নির্দিষ্ট প্রয়োজনের জন্য কী-র্যাপার অবজেক্টের মান অ্যাক্সেস এবং পরিবর্তন করতে পারে:
public class KeyWrapper<T>{
private T key;
public KeyWrapper(T key){
this.key=key;
}
public void rename(T newkey){
this.key=newkey;
}
}
উদাহরণ
HashMap<KeyWrapper,String> hashmap=new HashMap<>();
KeyWrapper key=new KeyWrapper("cool-key");
hashmap.put(key,"value");
key.rename("cool-key-renamed");
যদিও আপনার কোনও অ-বিদ্যমান কী হ্যাশম্যাপ থেকে বিদ্যমান কীটির মান পেতে সক্ষম হতে পারে তবে আমি আশঙ্কা করি এটি যেভাবেই হোক অপরাধী হতে পারে:
public class KeyWrapper<T>{
private T key;
public KeyWrapper(T key){
this.key=key;
}
@Override
public boolean equals(Object o) {
return hashCode()==o.hashCode();
}
@Override
public int hashCode() {
int hash=((String)key).length();//however you want your hash to be computed such that two different objects may share the same at some point
return hash;
}
}
উদাহরণ
HashMap<KeyWrapper,String> hashmap=new HashMap<>();
KeyWrapper cool_key=new KeyWrapper("cool-key");
KeyWrapper fake_key=new KeyWrapper("fake-key");
hashmap.put(cool_key,"cool-value");
System.out.println("I don't believe it but its: "+hashmap.containsKey(fake_key)+" OMG!!!");
আপনি পারেন যদি জাভা নেটিভ হাশম্যাপের পরিবর্তে আপনি একটি বিম্যাপ ব্যবহার করেন ।
এটি theতিহ্যবাহী মানচিত্র বাস্তবায়ন নয় এবং আপনার এটির প্রয়োজন অনুসারে এটি নিশ্চিত করতে হবে।
একটি বিম্যাপ (বা "দ্বি দিকনির্দেশক মানচিত্র") হ'ল একটি মানচিত্র যা এর মানগুলির পাশাপাশি তার কীগুলির স্বতন্ত্রতা সংরক্ষণ করে। এই সীমাবদ্ধতা একটি "বিপরীত ভিউ" সমর্থন করার জন্য বিম্যাপসকে সক্ষম করে, যা এই বিম্যাপের মতো একই প্রবেশকাগুলি সহ বিপরীত কী এবং মান সহ আরও একটি বিম্যাপ।
একটি বিম্যাপ ব্যবহার করে, আপনি ভিউটি বিপরীত করতে এবং কীটি প্রতিস্থাপন করতে পারেন।
অ্যাপাচি কমন্স বিডিম্যাপ এবং পেয়ারা বিম্যাপ উভয়ই চেকআউট করুন ।
আমার ক্ষেত্রে একটি আসল কী -> আসল কীগুলি নয় এমন মানচিত্র ছিল, সুতরাং আমাকে আমার মানচিত্রে বাস্তবগুলির সাথে বাস্তবগুলি প্রতিস্থাপন করতে হবে (ধারণাটি অন্যদের মতো)
getFriendlyFieldsMapping().forEach((friendlyKey, realKey) ->
if (map.containsKey(friendlyKey))
map.put(realKey, map.remove(friendlyKey))
);