คำถามติดแท็ก treeset

13
Hashset กับ Treeset
ฉันชอบต้นไม้ที่ดีO(n*log(n))และเป็นระเบียบเรียบร้อยของพวกเขา TreeSetอย่างไรก็ตามซอฟต์แวร์วิศวกรทุกคนที่ฉันเคยรู้จักได้ถามฉันอย่างชัดเจนว่าทำไมฉันจะใช้ จากแบ็คกราวน์ CS ฉันไม่คิดว่ามันจะสำคัญกับทุกอย่างที่คุณใช้และฉันก็ไม่สนใจที่จะยุ่งกับฟังก์ชั่นแฮชและที่เก็บข้อมูล (ในกรณีของJava) ในกรณีใดบ้างที่ฉันควรใช้HashSeta TreeSet?
496 java  hashset  treeset 

1
เหตุใดจึงไม่ลบ TreeSet ที่มีเครื่องมือเปรียบเทียบที่กำหนดเองเอารายการที่ใหญ่กว่าออก
ใช้ทั้ง Java 8 และ Java 11 ให้พิจารณาสิ่งต่อไปนี้TreeSetกับตัวString::compareToIgnoreCaseเปรียบเทียบ: final Set<String> languages = new TreeSet<>(String::compareToIgnoreCase); languages.add("java"); languages.add("c++"); languages.add("python"); System.out.println(languages); // [c++, java, python] เมื่อฉันพยายามที่จะลบองค์ประกอบที่แน่นอนที่มีอยู่ในTreeSetมันทำงาน: ทั้งหมดที่ระบุจะถูกลบออก: languages.removeAll(Arrays.asList("PYTHON", "C++")); System.out.println(languages); // [java] แต่ถ้าฉันพยายามที่จะเอาแทนมากขึ้นกว่าที่มีอยู่ในTreeSetโทรไม่เอาอะไรเลย (นี้ไม่โทรตามมา แต่เรียกแทนของตัวอย่างด้านบน): languages.removeAll(Arrays.asList("PYTHON", "C++", "LISP")); System.out.println(languages); // [c++, java, python] ผมทำอะไรผิดหรือเปล่า? ทำไมมันทำเช่นนี้? แก้ไข: String::compareToIgnoreCaseเป็นตัวเปรียบเทียบที่ถูกต้อง: (l, r) -> l.compareToIgnoreCase(r)
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.