import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.LinkedHashSet;
import java.util.List;

public class UjungKoleksi {

    public static void main(String[] args) {
        var nama = new ArrayList<>(List.of("Budi", "Sita", "Dewi", "Rina"));

        // Sebelum Java 21: nama.get(nama.size() - 1), rawan salah hitung.
        System.out.println("pertama : " + nama.getFirst());
        System.out.println("terakhir: " + nama.getLast());

        nama.addFirst("Anto");
        nama.addLast("Zaki");
        System.out.println("setelah tambah ujung : " + nama);

        System.out.print("urutan terbalik      : ");
        for (var n : nama.reversed()) {
            System.out.print(n + " ");
        }
        System.out.println();

        nama.removeFirst();
        nama.removeLast();
        System.out.println("setelah potong ujung : " + nama);

        // Set dengan urutan penyisipan: ujungnya kini satu API yang sama.
        var label = new LinkedHashSet<>(List.of("alpha", "beta", "gamma"));
        System.out.println("set pertama: " + label.getFirst() + ", terakhir: " + label.getLast());
        label.addFirst("nol");
        System.out.println("set addFirst: " + label);

        // Map dengan urutan penyisipan: entri ujung dan tampilan terbalik.
        var populasi = new LinkedHashMap<String, Integer>();
        populasi.put("Jakarta", 11);
        populasi.put("Bandung", 6);
        populasi.put("Medan", 5);
        System.out.println("map pertama : " + populasi.firstEntry());
        System.out.println("map terakhir: " + populasi.lastEntry());
        System.out.println("map dibalik : " + populasi.reversed().keySet());
    }
}
