> For the complete documentation index, see [llms.txt](https://polinema.gitbook.io/jti-modul-praktikum-algoritma-dan-struktur-data/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://polinema.gitbook.io/jti-modul-praktikum-algoritma-dan-struktur-data/struktur-data-non-linear/job-sheet-13-java-collection/praktikum-3.md).

# Praktikum 3

Pada praktikum 3 ini dilakukan uji coba untuk mengimplementasikan sebuah collection untuk menampung objek yang dibuat sesuai kebutuhan. Objek tersebut adalah sebuah objek mahasiswa dengan fungsi-fungsi umum seperti menambahkan, menghapus, mengubah, dan mencari.

## Langkah Praktikum

* Buatlah sebuah class Mahasiswa dengan attribute, kontruktor, dan fungsi sebagai berikut.

{% code overflow="wrap" lineNumbers="true" %}

```java
public class Mahasiswa {
    String nim;
    String nama;
    String notelp;

    public Mahasiswa(){}

    public Mahasiswa(String nim, String nama, String notelp) {
        this.nim = nim;
        this.nama = nama;
        this.notelp = notelp;
    }

    @Override
    public String toString() {
        return "Mahasiswa{" +
                "nim='" + nim + '\'' +
                ", nama='" + nama + '\'' +
                ", notelp='" + notelp + '\'' +
                '}';
    }
}
```

{% endcode %}

* Selanjutnya, buatlah sebuah class ListMahasiswa yang memiliki attribute seperti di bawah ini.

{% code overflow="wrap" lineNumbers="true" %}

```java
List<Mahasiswa> mahasiswas = new ArrayList<>();
```

{% endcode %}

* Method `tambah(),` `hapus()`, `update()`, dan `tampil()` secara berurut dibuat agar bisa melakukan operasi-operasi seperti yang telah disebutkan.

{% code overflow="wrap" lineNumbers="true" %}

```java
public void tambah(Mahasiswa... mahasiswa) {
        mahasiswas.addAll(Arrays.asList(mahasiswa));
    }

public void hapus(int index) {
    mahasiswas.remove(index);
}

public void update(int index, Mahasiswa mahasiswa) {
    mahasiswas.set(index, mahasiswa);
}

public void tampil() {
    mahasiswas.stream().forEach(mhs -> {
        System.out.println("" + mhs.toString());
    });
}
```

{% endcode %}

* Untuk proses hapus, update membutuhkan fungsi pencarian terlebih dahulu yang potongan kode programnya adalah sebagai berikut.

{% code overflow="wrap" lineNumbers="true" %}

```java
private int linearSearch(String nim) {
    for(int i = 0; i < mahasiswas.size(); i++) {
        if(nim.equals(mahasiswas.get(i).nim)) {
            return i;
        }
    }

    return -1;
}
```

{% endcode %}

* Pada class yang sama, tambahkan main method seperti potongan program berikut dan amati hasilnya!

{% code overflow="wrap" lineNumbers="true" %}

```java
ListMahasiswa lm = new ListMahasiswa();

Mahasiswa m = new Mahasiswa("19001", "Noureen", "08123456789");
Mahasiswa m1 = new Mahasiswa("19002", "Akhleema", "08123456789");
Mahasiswa m2 = new Mahasiswa("19003", "Shannum", "08123456789");

lm.tambah(m, m1, m2);

lm.tampil();

lm.update(lm.linearSearch("19002"), new Mahasiswa("19002", "Uwais", "08123456789"));
System.out.println("");
lm.tampil();
```

{% endcode %}

* Verifikasi hasil kompilasi kode program Anda dengan gambar berikut ini.

<figure><img src="/files/1Prnsvj7yj2gNTScnhPH" alt=""><figcaption><p>Contoh Hasil</p></figcaption></figure>

## Pertanyaan

* Pada fungsi `tambah()` yang menggunakan unlimited argument itu menggunakan konsep apa? Dan kelebihannya apa?
* Pada fungsi `linearSearch()` di atas, silakan diganti dengan fungsi `binarySearch()` dari collection!
* Tambahkan fungsi sorting baik secara ascending ataupun descending pada class tersebut!
