import java.util.NavigableMap;
import java.util.concurrent.ConcurrentSkipListMap;

public class PetaTerurutKonkuren {
    public static void main(String[] args) throws InterruptedException {
        NavigableMap<Integer, String> bukuPenawaran = new ConcurrentSkipListMap<>();

        // Dua penjual memasang penawaran pada rentang kunci yang berselang-seling;
        // peta tetap terurut meski penulisan terjadi bersamaan.
        Thread penjualA = new Thread(() -> {
            for (int harga = 10; harga <= 50; harga += 10) {
                bukuPenawaran.put(harga, "penawaran-A");
            }
        }, "penjual-A");
        Thread penjualB = new Thread(() -> {
            for (int harga = 15; harga <= 55; harga += 10) {
                bukuPenawaran.put(harga, "penawaran-B");
            }
        }, "penjual-B");

        penjualA.start();
        penjualB.start();
        penjualA.join();
        penjualB.join();

        // Setelah join, iterasi dijamin terurut menaik menurut kunci.
        System.out.println("peta terurut     : " + bukuPenawaran);
        System.out.println("kunci terkecil   : " + bukuPenawaran.firstKey());
        System.out.println("kunci terbesar   : " + bukuPenawaran.lastKey());
        System.out.println("jumlah penawaran : " + bukuPenawaran.size());

        // Operasi navigasi khas NavigableMap.
        System.out.println("penawaran <= 22  : " + bukuPenawaran.floorKey(22));
        System.out.println("penawaran >= 22  : " + bukuPenawaran.ceilingKey(22));
    }
}
