1
วิธี HashSet <T> .removeAll นั้นช้าอย่างน่าตกใจ
เมื่อเร็ว ๆ นี้ Jon Skeet ได้ยกหัวข้อการเขียนโปรแกรมที่น่าสนใจในบล็อกของเขา: "มีช่องว่างในสิ่งที่เป็นนามธรรมของฉัน Liza ที่รัก Liza ที่รัก" (เน้นเพิ่มเติม): ฉันมีชุด - อันที่HashSetจริง ฉันต้องการลบบางรายการออกจากมัน ... และหลายรายการอาจไม่มีอยู่จริง อันที่จริงในกรณีทดสอบของเราไม่มีรายการใดในคอลเล็กชัน "การลบ" ที่จะอยู่ในชุดเดิม ฟังดู - และเป็นรหัสที่ง่ายมาก ท้ายที่สุดเราต้องSet<T>.removeAllช่วยเราใช่มั้ย? เราระบุขนาดของชุด "แหล่งที่มา" และขนาดของคอลเล็กชัน "การลบ" ในบรรทัดคำสั่งและสร้างทั้งสองชุด ชุดแหล่งที่มามีเฉพาะจำนวนเต็มที่ไม่เป็นลบ ชุดการลบมีเฉพาะจำนวนเต็มลบ เราวัดว่าต้องใช้เวลานานแค่ไหนในการลบองค์ประกอบทั้งหมดโดยใช้System.currentTimeMillis()ซึ่งไม่ใช่นาฬิกาจับเวลาที่แม่นยำที่สุดในโลก แต่เพียงพอแล้วในกรณีนี้อย่างที่คุณเห็น นี่คือรหัส: import java.util.*; public class Test { public static void main(String[] args) { int sourceSize = …