# 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!


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://polinema.gitbook.io/jti-modul-praktikum-algoritma-dan-struktur-data/struktur-data-non-linear/job-sheet-13-java-collection/praktikum-3.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
