CodeGym /จาวาบล็อก /สุ่ม /วิธีอัปเดตค่าของคีย์ที่มีอยู่ใน HashMap
John Squirrels
ระดับ
San Francisco

วิธีอัปเดตค่าของคีย์ที่มีอยู่ใน HashMap

เผยแพร่ในกลุ่ม
คุณทราบ ดีว่ามีคีย์และค่าอยู่ในHashMap หรือ Mapอื่นๆ เสมอ คีย์ถูกเรียกว่าคีย์ด้วยเหตุผลเพราะคุณเข้าถึงค่าได้ด้วยคีย์ คีย์ไม่ซ้ำกัน แต่ค่าไม่ใช่ ดังนั้นคุณจึงไม่สามารถรับคีย์ตามค่าได้เนื่องจากค่าสามารถทำซ้ำได้ ในบทความนี้ เราจะค้นหาวิธีอัปเดตค่าของคีย์ที่มีอยู่ในHashMapใน Java มาจำไวยากรณ์ของ Java กันเถอะ HashMapใน Java มีการประกาศด้วยวิธีต่อไปนี้:

 HashMap<Key, Value> name
ลองมาเป็นตัวอย่าง สมมติว่า เรามีเพื่อนสี่คน และโดยเฉพาะอย่างยิ่งสำหรับพวกเขา เราสร้างและกรอกชื่อของพวกเขาในHashMapคีย์ของพวกเขาคือตัวเลขจำนวนเต็ม

Map<Integer, String> names = new HashMap<Integer, String>();
       names.put(1, "Stan");
       names.put(2, "Kyle");
       names.put(3, "Kenny");
       names.put(4, "Cartman");
หมายเหตุ: คุณสามารถสร้างและกรอกแผนที่ ของคุณ ได้หลายวิธี ตัวอย่างเช่น การใช้บล็อกการเริ่มต้น นี่คือ:

Map<Integer, String> names = new HashMap<Integer, String>() {
           {
               put(1, "Stan");
               put(2, "Kyle");
               put(3, "Kenny");
               put(4, "Cartman");
           }
       };
หรือการใช้วิธีและ ตัว สร้างHashMap กับอาร์กิวเมนต์แผนที่อื่น วิธีนี้ใช้ได้ตั้งแต่เวอร์ชัน 9 และใหม่กว่า

Map<Integer, String> names = new HashMap<>(Map.of(1, "Stan", 2, "Kyle", 3, "Kenny", 4, "Cartman"));
ดังที่เราได้กล่าวไว้ก่อนหน้านี้ ใน คีย์ HashMap ของเรา คือตัวเลขจำนวนเต็ม และค่าต่างๆ จะมีสตริง ในกรณีของเราคือชื่อของอักขระ สมมติว่ามีสิ่งเลวร้ายเกิดขึ้นกับ Kenny (ผู้อ่านที่รู้จักซีรี่ส์การ์ตูน South Park จะรู้ว่ามีสิ่งเลวร้ายเกิดขึ้นกับ Kenny ค่อนข้างบ่อย) ดังนั้นเมื่อมันเกิดขึ้น เราต้องลบ Kenny ออกจากบริษัทนี้ ( HashMap ของเรา ) และแทนที่เขาด้วยชื่อ Butters สิ่งนี้ทำได้ง่ายมากเพราะเป็นการดำเนินการค่าอัพเดต เด็กชายเคนนี่ของเรามีกุญแจ == 3 เราจำเป็นต้องเปลี่ยนค่าสำหรับคีย์ 3 ซึ่งเป็นที่ตั้งของ Kenny เราสามารถใช้ เมธอด put()เพื่อทำสิ่งนี้:

names.put(3, "Butters");
ในกรณีนี้ หากเราแสดงแผนที่ของเราบนหน้าจอ ผลลัพธ์จะเป็นดังนี้:

{1=Stan, 2=Kyle, 3=Butters, 4=Cartman}
จะเกิดอะไรขึ้นถ้า Kenny ทุกอย่างเรียบร้อยดี และเราต้องการให้เขาอยู่กับบริษัท แต่เรามีเหตุผลที่จะต้องอัปเดตรหัสของเขา พูดสิว่าเขาไม่ใช่หมายเลขสามอีกต่อไป แต่เป็นหมายเลขห้า ลองใส่ Kenny ลงในแผนที่ของเราอีกครั้งด้วยรหัส 5 แล้วพิมพ์ผลลัพธ์ เราสามารถใช้ วิธี ใส่ได้ดี นี่คือรหัสที่สมบูรณ์สำหรับตัวอย่างนี้:

import java.util.HashMap;

public class HashMapUpdKey {
   public static void main(String[] args) {
       Map<Integer, String> names = new HashMap<>(Map.of(1, "Stan", 2, "Kyle", 3, "Kenny", 4, "Cartman"));
       names.put(5, "Kenny");
       System.out.println(names);
   }
}
คุณคงเดาออกแล้วว่าผลลัพธ์จะเป็นอย่างไร:

{1=Stan, 2=Kyle, 3=Kenny, 4=Cartman, 5=Kenny}
นี่คือสิ่งที่เราคาดหวังไว้หรือไม่? ตอนนี้ Kenny มีสองคีย์ในHashMap ของ เรา พูดกันตามตรงแล้ว นี่คือ Kennys สองตัวที่แตกต่างกัน ไม่ว่าเราจะหมายถึงอะไรก็ตาม เนื่องจากวัตถุของเราถูกกำหนดโดยกุญแจโดยเฉพาะ มันเหมือนกับหนังสือเดินทางของบุคคลนั้นควรจะไม่ซ้ำกัน ดังนั้นคุณจึงไม่สามารถเปลี่ยนชื่อหรืออัปเดตคีย์แฮชแมปได้เมื่อเพิ่มเข้าไปโดยตรง การดำเนินการนี้ไม่สามารถใช้งานได้ อย่างไรก็ตาม คุณสามารถทำการหลอกลวงได้: ใส่รายการใหม่ด้วยรหัสใหม่และลบรายการเก่า สามารถทำได้โดยใช้วิธีการลบHashMap remove()ไม่เพียงลบการเชื่อมโยง แต่ยังส่งคืนค่าที่ถูกลบ (หากเคยมีมาก่อน) มาเสริมตัวอย่างของเราด้วยการดำเนินการนี้:

//easy replacement example
import java.util.HashMap;

public class HashMapUpdKey {
   public static void main(String[] args) {
      Map<Integer, String> names = new HashMap<>(Map.of(1, "Stan", 2, "Kyle", 3, "Kenny", 4, "Cartman"));
           
       names.put(5, "Kenny"); //Adding “new” Kenny 
       System.out.println(names.remove(3)); //Update value of the key: Removing “old” Kenny and print out deleted value

       System.out.println(names);
   }
}
ในที่สุดเราก็ได้สิ่งที่ต้องการแล้ว อัปเดตกุญแจซึ่งเราสามารถหา Kenny ได้ นี่คือผลลัพธ์:
เคนนี่ {1=สแตน, 2=ไคล์, 4=คาร์ทแมน, 5=เคนนี่}
แน่นอนเราสามารถดำเนินการลบ Kenny "เก่า" และเพิ่มใหม่ตามลำดับใดก็ได้ พวกเขามีความเป็นอิสระเป็นหลัก หรือย่อรหัสของคุณโดยใช้เพียงบรรทัดเดียว:

names.put(5, names.remove(3));
ผลลัพธ์จะเหมือนกันอย่างแน่นอน ดังนั้น วิธีเดียวที่เหมาะสมในการเปลี่ยนคีย์ใน Java HashMapคือการลบรายการและใส่ค่าเดิมด้วยคีย์ใหม่ คุณสามารถทำได้ด้วยวิธีอื่น แต่เกือบจะเป็นเรื่องราวเดียวกันเกี่ยวกับการเพิ่มและลบองค์ประกอบ
ความคิดเห็น
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION