คุณทราบ ดีว่ามีคีย์และค่าอยู่ใน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คือการลบรายการและใส่ค่าเดิมด้วยคีย์ใหม่ คุณสามารถทำได้ด้วยวิธีอื่น แต่เกือบจะเป็นเรื่องราวเดียวกันเกี่ยวกับการเพิ่มและลบองค์ประกอบ
GO TO FULL VERSION