Tag: collections
34 รายการ
Blog
Java Collections.frequency: เช็กของซ้ำก่อนรับ batch
ใช้ Collections.frequency นับค่าที่เท่ากันตาม equals พร้อม Java assertions และข้อจำกัดเมื่อข้อมูลใหญ่หรือ equality ซับซ้อน
Java removeIf: ล้างสมาชิกใน collection โดยไม่แก้ระหว่าง for-each
ใช้ Collection.removeIf ลบ record หมดอายุแบบ in-place อธิบาย mutability และ side effect พร้อม Java 17 assertions
Python Counter.total: รวมจำนวนคงเหลือโดยยังเห็นค่าติดลบ
ใช้ collections.Counter.total คำนวณผลรวมสุทธิ อธิบายค่าศูนย์/ติดลบและการ normalize พร้อม unittest
Java Collections.disjoint: ตรวจสิทธิ์สองชุดว่าไม่ทับกัน
ใช้ disjoint แสดง intent ของ overlap check พร้อม normalize input และ Java 17 assertions
Java Collections.rotate: หมุนลำดับโดยไม่สร้าง list ใหม่
เข้าใจ distance บวก/ลบ, modulo, mutable list และ edge cases ผ่าน Java 17 assertions
Python deque.copy: ถ่าย snapshot คิวโดยรักษา maxlen
ดู shallow-copy semantics, maxlen และการแยก mutation ของคิวด้วย unittest ที่รันจริงบน Python 3.14
Java Collections.checkedList: กันชน type ตอนรับ List จาก legacy boundary
ใช้ checkedList ตรวจ element ตอนเขียนเข้าคอลเล็กชัน พร้อมทดสอบ raw alias และอธิบายว่ามันไม่แทน validation ของข้อมูลเดิม
Python ChainMap.new_child: ซ้อน scope ใหม่โดยไม่ copy config ทั้งก้อน
ใช้ ChainMap.new_child สร้าง override ชั้นใหม่ พร้อมทดสอบ lookup, mutation และ parents เพื่อจัดการ config หลายระดับอย่างชัดเจน
Rust VecDeque::pop_front_if: หยิบหัวคิวเฉพาะเมื่อพร้อม
ใช้ pop_front_if ตรวจและนำสมาชิกหน้าคิวออกแบบ atomic ต่อการยืม พร้อมเข้าใจ mutation ใน predicate และทางเลือกเมื่อเงื่อนไขล้ม
Java IdentityHashMap: เมื่อ key ต้องเป็น object เดิม ไม่ใช่ object ที่ equals กัน
ใช้ IdentityHashMap เฉพาะงาน topology และ graph traversal พร้อมทดสอบความต่างจาก HashMap และข้อห้ามใน business data
Java BitSet.nextSetBit: เดินเฉพาะตำแหน่งที่เปิดโดยไม่สแกนทุกช่อง
ใช้ BitSet.nextSetBit วน sparse flags พร้อมหลีกเลี่ยง off-by-one และแยก index set จาก business identity
Rust Vec::extract_if: ดึงสมาชิกออกเฉพาะช่วงโดยยังเก็บลำดับที่เหลือ
ใช้ Vec::extract_if แยกสมาชิกที่ผ่านเงื่อนไขจาก range พร้อมเข้าใจ lazy iterator, early drop และต้นทุนการเลื่อนข้อมูล
Rust VecDeque::make_contiguous: เปิด ring buffer เป็น slice ก่อน sort
ทำให้ข้อมูลใน VecDeque ต่อเนื่องในหน่วยความจำเพื่อ sort หรือส่งต่อ API ที่รับ slice พร้อมเข้าใจต้นทุนการย้าย
Java EnumSet.range: สร้างช่วงสถานะแบบ type-safe และประหยัด
ใช้ EnumSet.range เมื่อ enum มีลำดับโดเมนชัด พร้อมระวังการผูก logic กับ ordinal
Java Map.ofEntries: สร้าง immutable map หลายคู่โดยไม่เปิดช่องให้แก้ทีหลัง
ใช้ Map.entry กับ Map.ofEntries สำหรับตารางคงที่ พร้อมข้อจำกัด null, duplicate key และ Java 17 assertions
Java ConcurrentHashMap.compute: อัปเดตค่าต่อคีย์แบบ atomic
ใช้ compute เพื่อนับเคาน์เตอร์โดยไม่แข่ง get+put พร้อมตัวอย่างรันจริง
Python deque(maxlen): คิววงกลมที่ตัดของเก่าให้อัตโนมัติ
ใช้ collections.deque แบบ maxlen เพื่อเก็บหน้าต่างล่าสุด N ชิ้น พร้อม unittest
CopyOnWriteArrayList: อ่าน snapshot ปลอดภัยตอน listener เยอะ
ใช้ CopyOnWriteArrayList เมื่ออ่านบ่อย เขียนน้อย และต้องการ iterator ที่ไม่สะดุดจาก concurrent modification
Java SequencedMap: first/last entry โดยไม่ต้องไล่ iterator เอง
ใช้ SequencedMap ของ LinkedHashMap เพื่อ putFirst/putLast และอ่าน firstEntry/lastEntry อย่างชัดเจน
Java NavigableMap: หาเพดานและพื้นของช่วงเวลาโดยไม่วนทั้งตาราง
ใช้ floorEntry และ ceilingEntry เลือกค่าที่ใกล้ boundary พร้อมจัดการค่าว่างและคีย์ซ้ำ
Java EnumMap: ทำตารางสถานะให้คีย์ครบและไม่รับ null key
ใช้ EnumMap กับคีย์ enum เพื่อเก็บค่ากะทัดรัด พร้อมตรวจ missing state อย่างชัดเจน
Rust Vec::retain_mut: แก้ค่าและกรองสมาชิกในรอบเดียวโดยรักษาลำดับ
ใช้ retain_mut ทำ normalization ก่อนตัดค่าที่ไม่ผ่าน พร้อมเข้าใจ ownership, panic และต้นทุนการเลื่อนข้อมูล
Java ArrayDeque: คิวงานสองด้านโดยไม่ต้องใช้ LinkedList
ใช้ addLast/removeFirst เป็น FIFO และ addFirst/removeFirst เป็น stack พร้อมข้อห้ามเรื่อง null และ thread safety
Java List.copyOf — สแนปช็อตลิสต์แบบอ่านอย่างเดียวในคำสั่งเดียว
ใช้ List.copyOf สร้างสำเนา immutable จาก Collection — กัน caller แก้ลิสต์ต้นทางโดยไม่ตั้งใจ พร้อมตัวอย่าง verified บน JDK 21
Rust HashMap::get_disjoint_mut: แก้หลายค่าใน Map โดยไม่ชนกฎ Borrow
ใช้ get_disjoint_mut ยืมค่าหลาย key พร้อมกันอย่างปลอดภัย พร้อมเข้าใจ duplicate key, key ที่หาย และต้นทุนตรวจความซ้ำ
Python deque(maxlen): เก็บประวัติล่าสุดโดยไม่ปล่อยหน่วยความจำโตไม่จบ
ใช้ collections.deque แบบกำหนด maxlen ทำ rolling window ที่ทิ้งของเก่าอัตโนมัติ พร้อมเทสต์ลำดับและขอบเขต
Java Map.merge: รวม Counter และลบค่าศูนย์ด้วยกฎเดียว
ใช้ Map.merge อัปเดต inventory แบบ atomic ต่อ operation พร้อมเข้าใจความหมายของ null และกรณี concurrent map
Python Counter.total: นับยอดรวม multiset โดยไม่เขียน sum(values) ซ้ำ
ใช้ Counter.total ร่วมกับการบวกและลบ multiset พร้อมทำความเข้าใจ count ศูนย์กับค่าติดลบ
LinkedHashMap แบบ Access Order: ทำ LRU Cache เล็กให้เข้าใจได้
ใช้ accessOrder และ removeEldestEntry สร้าง bounded LRU พร้อมอธิบาย thread safety, null และเหตุผลที่ production cache อาจต้องใช้ library
Stream.toList(): ได้ลิสต์ immutable โดยไม่ต้อง collect
อธิบาย Stream.toList ใน Java ที่คืน List แบบ unmodifiable พร้อมตัวอย่าง java-run เปรียบเทียบกับ Collectors.toList
Java computeIfAbsent: สร้างค่าตอนจำเป็นโดยไม่ซ่อน side effect
ใช้ Map.computeIfAbsent สำหรับ grouping และ lazy cache พร้อมข้อควรระวัง null การแก้ map ซ้อน และ concurrency
Python ChainMap: ซ้อน config หลายชั้นโดยไม่รีบ copy
จัดลำดับ CLI environment และ defaults ด้วย ChainMap พร้อมทดสอบ precedence การเขียน และผลจาก mapping ต้นทาง

SequencedCollection: เข้าถึงหัว-ท้ายและมุมกลับในชุดที่มีลำดับ
แนะนำ SequencedCollection / SequencedSet / SequencedMap ตั้งแต่ Java 21 พร้อมตัวอย่าง public class Main ที่รันได้
Java Map.copyOf คือ Snapshot แต่ unmodifiableMap ยังมองเห็นต้นฉบับเปลี่ยน
แยก immutable copy ออกจาก read-only view พร้อม assertions ที่เผย aliasing ของ map ต้นทาง