# 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="https://3303136777-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FYswnbGm4Ak9kOqe8uURG%2Fuploads%2Fx1UUi5dTrCJaedH70Png%2FScreen%20Shot%202023-12-10%20at%2021.32.56.png?alt=media&#x26;token=2d8e9e15-e3ed-4b06-bf99-34e94d576e48" 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!
