Anda di halaman 1dari 40

FRONTPAGE

1
KATA PENGANTAR

2
DAFTAR ISI

3
BAGIAN TEORI

Objektif

❖ Memahami model utility array dan list


❖ Mampu menggunakan uiltiy array dan list dengan benar
❖ Mampu melakukan warapping objek kedalam kelas
❖ Mampu mengunakan Regelar Expresion untuk mempermudah pengolahan
data token
❖ Mampu memahami pemrograman atomic (aman dan konsisten) dengan
menggunakan kelas yang Thread Safe

4
1. Java ArrayList

Kelas ArrayList adalah array yang dapat diubah ukurannya, yang dapat ditemukan
di paket java.util. Perbedaan antara array built-in dan ArrayList di Java, adalah
bahwa ukuran array tidak dapat diubah (jika Anda ingin menambah atau
menghapus elemen ke / dari array, Anda harus membuat yang baru). Sementara
elemen ArrayList dapat ditambahkan dan dihapus kapan pun. Sintaksnya juga
sedikit berbeda:
Contoh : Buat objek ArrayList bernama mobil yang akan menyimpan string:

import java.util.ArrayList; // impor the ArrayList class

ArrayList<String> cars = new ArrayList<String>(); // Buat objek ArrayList

Tambahkan Item
Kelas ArrayList memiliki banyak metode yang berguna. Misalnya, untuk
menambahkan elemen ke ArrayList, gunakan metode add():

Contoh

import java.util.ArrayList;

public class MyClass {


public static void main(String[] args) {
ArrayList<String> cars = new ArrayList<String>();
cars.add("Volvo");
cars.add("BMW");
cars.add("Ford");
cars.add("Mazda");
System.out.println(cars);
}
}

5
Akses Item
Untuk mengakses elemen di ArrayList, gunakan metode get() dan lihat nomor indeks,
Contoh :
cars.get(0);

Ubah Item
Untuk mengubah sebuah elemen, gunakan metode set() dan lihat nomor indeks ,
Contoh :
cars.set(0, "Opel");

Hapus Item
Untuk menghapus elemen, gunakan metode remove() dan merujuk ke nomor indeks,
Contoh :
cars.remove(0);
Untuk menghapus semua elemen di ArrayList, gunakan metode clear(), Contoh :
cars.clear();

Ukuran ArrayList
Untuk mengetahui berapa banyak elemen yang dimiliki ArrayList, gunakan metode
ukuran, Contoh :
cars.size ();

Iterator Melalui ArrayList


Iterator elemen ArrayList dengan loop for, dan gunakan metode size () untuk
menentukan berapa kali loop harus dijalankan , Contoh :

public class MyClass {


public static void main (String[] args) {
ArrayList<String> cars = new ArrayList<String>();
cars.add ("Volvo");
cars.add ("BMW");

6
cars.add("Ford");
cars.add("Mazda");
for (int i = 0; i <cars.size(); i ++) {
System.out.println (cars.get (i));
}
}
}

Anda juga dapat melakukan loop melalui ArrayList dengan for-each loop, contoh :

public class MyClass {


public static void main (String [] args) {
ArrayList<String> cars = new ArrayList<String>();
cars.add("Volvo");
cars.add("BMW");
cars.add("Ford");
cars.add("Mazda");
for (String i: cars) {
System.out.println (i);
}
}
}

Tipe lain
Elemen dalam ArrayList sebenarnya adalah objek. Dalam contoh di atas, kami
membuat elemen (objek) berjenis "String". Ingatlah bahwa String di Java adalah
objek (bukan tipe primitif). Untuk menggunakan tipe lain, seperti int, Anda harus
menentukan kelas wrapper yang setara : Integer. Untuk tipe primitif lainnya,
gunakan: Boolean untuk boolean, Character untuk char, Double untuk double, dll:
Contoh : Buat ArrayList untuk menyimpan angka (tambahkan elemen bertipe
Integer):

import java.util.ArrayList;

7
public class MyClass {
public static void main (String [] args) {
ArrayList<Integer> myNumbers = new ArrayList<Integer>();
myNumbers.add(10);
myNumbers.add(15);
myNumbers.add(20);
myNumbers.add(25);
for (int i: myNumbers) {
System.out.println(i);
}
}
}

Sortir ArrayList
Kelas berguna lainnya dalam paket java.util adalah kelas Koleksi, yang
menyertakan metode sort () untuk menyortir daftar menurut abjad atau numerik ,
contoh : Urutkan ArrayList dari Strings:
import java.util.ArrayList;
import java.util.Collections; // Impor kelas Koleksi

public class MyClass {


public static void main(String[] args) {
ArrayList<String> cars = new ArrayList <String> ();
cars.add("Volvo");
cars.add("BMW");
cars.add("Ford");
cars.add("Mazda");
Collections.sort(cars); // Menyortir mobil
for (String i: cars) {
System.out.println (i);
}
}
}

8
contoh : Sortir ArrayList of Integers :
import java.util.ArrayList;
import java.util.Collections; // Impor kelas Koleksi

public class MyClass {


public static void main(String[] args) {
ArrayList<Integer> myNumbers = new ArrayList<Integer> ();
myNumbers.add(33);
myNumbers.add(15);
myNumbers.add(20);
myNumbers.add(34);
myNumbers.add(8);
myNumbers.add(12);

Collections.sort (myNumbers); // Urutkan nomor saya

for (int i: myNumbers) {


System.out.println (i);
}
}
}

2 Java LinkedList

Di bab sebelumnya, Anda telah mempelajari kelas ArrayList. Kelas LinkedList


hampir identik dengan ArrayList, Contoh :

import java.util.LinkedList; // Import the LinkedList class

public class MyClass {


public static void main(String[] args) {
LinkedList<String> cars = new LinkedList<String>();
cars.add("Volvo");
cars.add interface StringFunction {

9
String run(String str);
}

public class MyClass {


public static void main(String[] args) {
StringFunction exclaim = (s) -> s + "!";
StringFunction ask = (s) -> s + "?";
printFormatted("Hello", exclaim);
printFormatted("Hello", ask);
}
public static void printFormatted(String str, StringFunction format) {
String result = format.run(str);
System.out.println(result);
}
}
("BMW");
cars.add("Ford");
cars.add("Mazda");
System.out.println(cars);
}
}

ArrayList vs LinkedList
Kelas LinkedList adalah kumpulan yang bisa berisi banyak objek dengan tipe yang
sama, seperti ArrayList.

Kelas LinkedList memiliki semua metode yang sama dengan kelas ArrayList
karena keduanya mengimplementasikan antarmuka List. Ini berarti Anda dapat
menambahkan item, mengubah item, menghapus item, dan menghapus daftar
dengan cara yang sama.

Namun, sementara kelas ArrayList dan kelas LinkedList dapat digunakan dengan
cara yang sama, keduanya dibangun dengan sangat berbeda.

10
Bagaimana ArrayList bekerja, Kelas ArrayList memiliki array biasa di dalamnya.
Ketika sebuah elemen ditambahkan, itu ditempatkan ke dalam array. Jika array
tidak cukup besar, array baru yang lebih besar dibuat untuk menggantikan yang
lama dan yang lama dihapus.

Bagaimana LinkedList Bekerja ?


LinkedList menyimpan itemnya dalam "kontainer". Daftar tersebut memiliki tautan
ke penampung pertama dan setiap penampung memiliki tautan ke penampung
berikutnya dalam daftar. Untuk menambahkan elemen ke daftar, elemen
ditempatkan ke dalam penampung baru dan penampung itu ditautkan ke salah satu
penampung lain dalam daftar.
Kapan Menggunakan

Yang terbaik adalah menggunakan ArrayList ketika:


▪ Anda ingin sering mengakses item acak
▪ Anda hanya perlu menambah atau menghapus elemen di akhir daftar

Cara terbaik adalah menggunakan LinkedList ketika:


▪ Anda hanya menggunakan daftar dengan mengulanginya daripada
mengakses item acak
▪ Anda sering kali perlu menambah dan menghapus item dari awal atau
tengah daftar

Metode LinkedList
Untuk banyak kasus, ArrayList lebih efisien karena biasanya memerlukan akses ke
item acak dalam daftar, tetapi LinkedList menyediakan beberapa metode untuk
melakukan operasi tertentu dengan lebih efisien:

11
Method Description
addFirst() Menambahkan item pada awal list
addLast() Menambahkan item pada akhir list
removeFirst() Membuang item diawal list
removeLast() Membuang item di akhir list
getFirst() Dapatkan item di awal list
getLast() Get the item at the end of the list

3 Java HashMap

Di bab ArrayList, Anda mengetahui bahwa Array menyimpan item sebagai koleksi
yang dipesan, dan Anda harus mengaksesnya dengan nomor indeks (tipe int).
Namun, HashMap, menyimpan item dalam pasangan "kunci / nilai", dan Anda
dapat mengaksesnya dengan indeks jenis lain (mis. String).

Satu objek digunakan sebagai kunci (indeks) ke objek lain (nilai). Ini dapat
menyimpan jenis yang berbeda: Kunci string dan nilai Integer, atau jenis yang
sama, seperti: Kunci string dan nilai String:

Contoh : Buat objek HashMap bernama capitalCities yang akan menyimpan kunci
String dan nilai String :

import java.util.HashMap; // import the HashMap class


HashMap<String, String> capitalCities = new HashMap<String, String>();

Tambahkan Item
Kelas HashMap memiliki banyak metode yang berguna. Misalnya, untuk
menambahkan item ke dalamnya, gunakan metode put(), Contoh :

import java.util.HashMap; // Import the HashMap class


public class MyClass {
public static void main(String[] args) {

12
// Create a HashMap object called capitalCities
HashMap<String, String> capitalCities = new HashMap<String, String>();

// Add keys and values (Country, City)


capitalCities.put("England", "London");
capitalCities.put("Germany", "Berlin");
capitalCities.put("Norway", "Oslo");
capitalCities.put("USA", "Washington DC");
System.out.println(capitalCities);
}
}

Akses Item
Untuk mengakses nilai di HashMap, gunakan metode get() dan lihat key-nya:
capitalCities.get("England");

Hapus Item
Untuk menghapus item, gunakan metode remove() dan lihat key-nya :
capitalCities.remove("England");

Untuk menghapus semua item, gunakan metode clear():


capitalCities.clear();

Ukuran HashMap
Untuk mengetahui berapa banyak item yang ada, gunakan metode ukuran:
Contoh

capitalCities.size ();

Loop Melalui HashMap


Ulangi item dari HashMap dengan loop for-each.

13
Catatan: Gunakan metode keySet() jika Anda hanya menginginkan key, dan
gunakan metode values() jika Anda hanya menginginkan nilai, Contoh :
// Cetak kunci
for (String i: capitalCities.keySet()) {
System.out.println(i);
}

Contoh
// Cetak nilai
for (String i: capitalCities.values ()) {
System.out.println (i);
}

Contoh
// Cetak kunci dan nilai
for (String i: capitalCities.keySet()) {
System.out.println ("kunci:" + i + "nilai:" + capitalCities.get(i));
}

Tipe yang lain


Kunci dan nilai dalam HashMap sebenarnya adalah objek. Dalam contoh di atas,
kami menggunakan objek berjenis "String". Ingatlah bahwa String di Java adalah
objek (bukan tipe primitif). Untuk menggunakan tipe lain, seperti int, Anda harus
menentukan kelas wrapper yang setara : Integer. Untuk tipe primitif lainnya,
gunakan: Boolean untuk boolean, Karakter untuk char, Double untuk double, dll:
Contoh : Buat objek HashMap bernama orang yang akan menyimpan String key
dan Integer value :
// Impor kelas HashMap
import java.util.HashMap;

public class MyClass {


public static void main(String[] args) {

14
// Buat objek HashMap yang disebut orang
HashMap <String, Integer> people = new HashMap <String, Integer> ();

// Tambahkan kunci dan nilai (Nama, Usia)


people.put("John", 32);
people.put("Steve", 30);
people.put("Angie", 33);

for (String i: people.keySet ()) {


System.out.println("kunci:" + i + "nilai:" + people.get(i));
}
}
}

4 Java HashSet

HashSet adalah kumpulan item yang setiap itemnya unik, dan ditemukan di paket
java.util:
Contoh, Buat objek HashSet yang disebut mobil yang akan menyimpan string :

import java.util.HashSet; // Impor kelas HashSet

HashSet<String> mobil = HashSet baru<String>();

Tambahkan Item
Kelas HashSet memiliki banyak metode yang berguna. Misalnya, untuk
menambahkan item ke dalamnya, gunakan metode add(), Contoh :

// Impor kelas HashSet


import java.util.HashSet;

public class MyClass {

15
public static void main(String[] args) {
HashSet <String> mobil = HashSet baru <String> ();
cars.add("Volvo");
cars.add("BMW");
cars.add("Ford");
cars.add("BMW");
cars.add("Mazda");
System.out.println (mobil);
}
}

Catatan: Dalam contoh di atas, meskipun BMW ditambahkan dua kali, itu hanya
muncul sekali dalam set karena setiap item dalam satu set harus unik.

Periksa Jika Item Ada


Untuk memeriksa apakah suatu item ada di HashSet, gunakan metode contains():
Contoh

cars.contains("Mazda");

Hapus Item
Untuk menghapus item, gunakan metode remove() , Contoh :

cars.remove("Volvo");

Untuk menghapus semua item, gunakan metode clear(), Contoh :

cars.clear();

Ukuran HashSet
Untuk mengetahui berapa banyak item yang ada, gunakan metode ukuran, Contoh
:

16
cars.size();

Loop Melalui HashSet


Loop item dari HashSet dengan loop for-each, Contoh :

for (String i: cars) {


System.out.println(i);
}

Tipe yang lain


Item dalam HashSet sebenarnya adalah objek. Dalam contoh di atas, kami membuat
item (objek) dengan tipe "String". Ingatlah bahwa String di Java adalah objek
(bukan tipe primitif). Untuk menggunakan tipe lain, seperti int, Anda harus
menentukan kelas pembungkus yang setara: Integer. Untuk tipe primitif lainnya,
gunakan: Boolean untuk boolean, Karakter untuk char, Double untuk double, dll:
Contoh : Gunakan HashSet yang menyimpan objek Integer:

import java.util.HashSet;

public class MyClass {


public static void main (String [] args) {

// Buat objek HashSet yang disebut angka


HashSet <Integer> angka = HashSet baru <Integer> ();

// Tambahkan nilai ke set


numbers.add (4);
numbers.add (7);
numbers.add (8);

// Tunjukkan angka antara 1 dan 10 yang di set


for (int i = 1; i <= 10; i ++) {

17
if (numbers.contains (i)) {
System.out.println (i + "ditemukan di set.");
} else {
System.out.println (i + "tidak ditemukan di set.");
}
}
}
}

5 Iterator Java

Iterator adalah objek yang dapat digunakan untuk mengulang koleksi, seperti
ArrayList dan HashSet. Ini disebut "iterator" karena "iterating" adalah istilah teknis
untuk perulangan.

Untuk menggunakan Iterator, Anda harus mengimpornya dari paket java.util.

Mendapatkan Iterator
Metode iterator() bisa digunakan untuk mendapatkan Iterator untuk koleksi apa pun
:
Contoh

// Impor kelas ArrayList dan kelas Iterator


import java.util.ArrayList;
import java.util.Iterator;

public class MyClass {


public static void main(String[] args) {

// Buatlah koleksi
ArrayList<String> cars = new ArrayList<String> ();
cars.add("Volvo");
cars.add("BMW");

18
cars.add("Ford");
cars.add("Mazda");

// Dapatkan iteratornya
Iterator<String> it = cars.iterator ();

// Cetak item pertama


System.out.println (it.next ());
}
}

Looping Melalui Koleksi


Untuk loop koleksi, gunakan metode hasNext() dan next() dari Iterator , Contoh :

while (it.hasNext()) {
System.out.println (it.next());
}

Menghapus Item dari Koleksi


Iterator dirancang untuk dengan mudah mengubah koleksi yang dilaluinya. Metode
remove() bisa menghapus item dari koleksi saat melakukan perulangan, contoh :

Gunakan iterator untuk menghapus angka kurang dari 10 dari koleksi:

import java.util.ArrayList;
import java.util.Iterator;

public class MyClass {


public static void main (String[] args) {
ArrayList<Integer> numbers = new ArrayList<Integer>();
numbers.add(12);
numbers.add(8);
numbers.add(2);
numbers.add(23);

19
Iterator<Integer> it = numbers.iterator();
while(it.hasNext()) {
Integer i = it.next();
if (i <10) {
it.remove();
}
}
System.out.println(numbers);
}
}

Mencoba menghapus item menggunakan for-loop atau for-each loop tidak akan
berfungsi dengan benar karena koleksi mengubah ukuran pada saat yang sama saat
kode mencoba mengulang

6 Kelas Wrapper Java

Kelas pembungkus / wrapper menyediakan cara untuk menggunakan tipe data


primitif (int, boolean, dll ..) sebagai objek.

Tabel di bawah ini menunjukkan tipe primitif dan kelas pembungkus yang setara:
Tipe Data Primitif Kelas Wrapper
byte Byte
short Short
int Integer
long Long
float Float
double Double
boolean Boolean
char Character

20
Terkadang Anda harus menggunakan kelas pembungkus, misalnya saat bekerja
dengan objek Collection, seperti ArrayList, di mana tipe primitif tidak dapat
digunakan (daftar hanya dapat menyimpan objek), contoh :

ArrayList<int> myNumbers = new ArrayList<int> (); // Tidak valid

ArrayList<Integer> myNumbers = new ArrayList<Integer> (); // Valid

Membuat Objek Wrapper


Untuk membuat objek wrapper, gunakan kelas wrapper sebagai ganti tipe primitif.
Untuk mendapatkan nilainya, Anda cukup mencetak objek, contoh :

public class MyClass {


public static void main(String[] args) {
Integer myInt = 5;
Double myDouble = 5,99;
Karakter myChar = 'A';
System.out.println(myInt);
System.out.println(myDouble);
System.out.println(myChar);
}
}

Karena Anda sekarang bekerja dengan objek, Anda dapat menggunakan metode
tertentu untuk mendapatkan informasi tentang objek tertentu.

Misalnya, metode berikut digunakan untuk mendapatkan nilai yang terkait dengan
objek wrapper yang sesuai: intValue(), byteValue(), shortValue(), longValue(),
floatValue(), doubleValue(), charValue(), booleanValue() .

Contoh ini akan menampilkan hasil yang sama seperti contoh di atas:

public class MyClass {

21
public static void main(String[] args) {
Integer myInt = 5;
Double myDouble = 5,99;
Karakter myChar = 'A';
System.out.println (myInt.intValue());
System.out.println (myDouble.doubleValue());
System.out.println (myChar.charValue());
}
}

Metode berguna lainnya adalah metode toString(), yang digunakan untuk


mengonversi objek pembungkus menjadi string.

Dalam contoh berikut, kami mengonversi Integer menjadi String, dan


menggunakan metode length() dari kelas String untuk menampilkan panjang
"string":

public class MyClass {


public static void main (String[] args) {
Integer myInt = 100;
String myString = myInt.toString();
System.out.println (myString.length());
}
}

7 Exception pada Java

Saat menjalankan kode Java, kesalahan yang berbeda dapat terjadi: kesalahan
pengkodean yang dilakukan oleh programmer, kesalahan karena input yang salah,
atau hal-hal lain yang tidak terduga.

22
Ketika kesalahan terjadi, Java biasanya akan berhenti dan menghasilkan pesan
kesalahan. Istilah teknis untuk ini adalah: Java akan membuat exception (membuat
kesalahan / throw an error).

Try dan Catch pada Java


Pernyataan try memungkinkan Anda untuk menentukan blok kode yang akan diuji
kesalahannya saat sedang dijalankan.

Pernyataan catch memungkinkan Anda untuk menentukan blok kode yang akan
dieksekusi, jika terjadi kesalahan di blok percobaan.

Kata try dan catch datang berpasangan:


Sintaksis

try {
// Blok kode untuk dicoba
}
catch (Exception e) {
// Blok kode untuk menangani kesalahan
}

Perhatikan contoh berikut: Ini akan menghasilkan kesalahan, karena myNumbers


[10] tidak ada.

public class MyClass {


public static void main(String[] args) {
int[] myNumbers = {1, 2, 3};
System.out.println(myNumbers [10]); // kesalahan!
}
}

Outputnya akan seperti ini:

23
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 10
di MyClass.main(MyClass.java:4)

Jika terjadi kesalahan, kita dapat menggunakan try ... catch untuk menangkap
kesalahan tersebut dan menjalankan beberapa kode untuk menanganinya :

public class MyClass {


public static void main(String [] args) {
try {
int [] myNumbers = {1, 2, 3};
System.out.println(myNumbers [10]);
} catch (Exception e) {
System.out.println("Ada yang tidak beres.");
}
}
}

Outputnya adalah:
Something went wrong.
The 'try catch' is finished.

Pernyataan terakhir memungkinkan Anda mengeksekusi kode, setelah try ... catch,
apa pun hasilnya:

public class MyClass {


public static void main(String[] args) {
try {
int[] myNumbers = {1, 2, 3};
System.out.println(myNumbers [10]);
} catch (Exception e) {
System.out.println("Ada yang tidak beres.");
} else {
System.out.println("'Coba menangkap' selesai.");

24
}
}
}

Outputnya adalah:
Something went wrong.
The 'try catch' is finished.

Kata throw keyword


Pernyataan throw memungkinkan Anda membuat pesan kesalahan khusus.
Pernyataan throw digunakan bersama dengan tipe Exception. Ada banyak jenis
Exception yang tersedia di Java: ArithmeticException, FileNotFoundException,
ArrayIndexOutOfBoundsException, SecurityException, dll:
Contoh

Throw Exception jika usia di bawah 18 tahun (cetak "Akses ditolak"). Jika usia 18
tahun atau lebih, cetak "Akses diberikan":

public class MyClass {


static void checkAge(int age) {
if (age <18) {
throw new ArithmeticException("Akses ditolak - Anda harus berusia minimal
18 tahun.");
}
else {
System.out.println ("Akses diberikan - Anda cukup tua!");
}
}

public static void main(String[] args) {


checkAge(15); // Atur usia menjadi 15 (yaitu di bawah 18 ...)
}
}

25
Outputnya adalah:
Exception in thread "main" java.lang.ArithmeticException: Access denied - You must be
at least 18 years old.
at MyClass.checkAge(MyClass.java:4)
at MyClass.main(MyClass.java:12)

Jika usia Anda 20 tahun, Anda tidak akan mendapatkan pengecualian:


Contoh

checkAge(20);

Outputnya adalah:
Akses diberikan - Anda cukup tua!

8 Java RegEx

Apa itu Regular Expression?


Regular Expression adalah urutan karakter yang membentuk pola pencarian. Saat
Anda mencari data dalam teks, Anda dapat menggunakan pola pencarian ini untuk
menjelaskan apa yang Anda cari.

Regular Expression dapat berupa satu karakter, atau pola yang lebih rumit.

Regular Expression dapat digunakan untuk melakukan semua jenis pencarian teks
dan operasi penggantian teks.

Java tidak memiliki kelas Regular Expression bawaan, tetapi kita dapat mengimpor
paket java.util.regex untuk bekerja dengan Regular Expression. Paket tersebut
mencakup kelas-kelas berikut:

Pattern Class - Mendefinisikan pola (untuk digunakan dalam pencarian)


Matcher Class - Digunakan untuk mencari pola

26
PatternSyntaxException Class - Menunjukkan kesalahan sintaks dalam pola
ekspresi reguler

Contoh : Cari tahu apakah ada kemunculan kata "w3schools" dalam sebuah kalimat:

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class MyClass {


public static void main(String[] args) {
Pattern pattern = Pattern.compile("stmi", Pattern.CASE_INSENSITIVE);
Matcher matcher = pattern.matcher ("Kunjungi stmi!");
boolean matchFound = matcher.find();
if (matchFound) {
System.out.println("Cocok ditemukan");
} lain {
System.out.println("pencarian tidak diketemukan");
}
}
}

// Hasil yang cocok ditemukan

Contoh Dijelaskan

Dalam contoh ini, Kata "stmi" sedang dicari dalam sebuah kalimat.

Pertama, pola dibuat menggunakan metode Pattern.compile(). Parameter pertama


menunjukkan pola mana yang sedang dicari dan parameter kedua memiliki tanda
yang menunjukkan bahwa pencarian harus peka huruf besar kecil. Parameter kedua
adalah opsional.

27
Metode matcher() digunakan untuk mencari pola dalam sebuah string. Ini
mengembalikan objek Matcher yang berisi informasi tentang pencarian yang
dilakukan.

Metode find() mengembalikan nilai true jika pola ditemukan dalam string dan false
jika tidak ditemukan.

Flag
Tanda dalam metode compile() mengubah cara pencarian dilakukan. Berikut ini
beberapa di antaranya:

Pattern.CASE_INSENSITIVE - Kapitalisasi huruf akan diabaikan saat


melakukan pencarian.
Pattern.LITERAL - Karakter khusus dalam pola tidak akan memiliki arti khusus
dan akan diperlakukan sebagai karakter biasa saat melakukan pencarian.
Pattern.UNICODE_CASE - Gunakan bersama dengan bendera
CASE_INSENSITIVE untuk juga mengabaikan huruf besar / kecil di luar alfabet
Inggris

9 Threads

Thread Java, Thread memungkinkan program untuk beroperasi lebih efisien dengan
melakukan banyak hal pada waktu yang bersamaan.

Thread dapat digunakan untuk melakukan tugas rumit di latar belakang tanpa
mengganggu program utama.

Membuat Thread
Ada dua cara untuk membuat Thread. Itu bisa dibuat dengan memperluas kelas
Thread dan menimpa metode run():

28
Sintaks lebih lanjut

public class MyClass extends Thread {


public void run() {
System.out.println ("Kode ini berjalan di utas");
}
}

Cara lain untuk membuat utas adalah dengan mengimplementasikan interface


Runnable:
Implementasikan Sintaks

public class MyClass implements Runnable {


public void run() {
System.out.println ("Kode ini berjalan di utas");
}
}

Menjalankan Thread
Jika kelas memperluas kelas Thread, thread dapat dijalankan dengan membuat
instance kelas dan memanggil metode start():

public class MyClass extends Thread {


public static void main (String[] args) {
MyClass thread = new MyClass();
thread.start ();
System.out.println ("Kode ini di luar thread ");
}
public void run() {
System.out.println ("Kode ini berjalan di thread ");
}
}

29
Jika kelas mengimplementasikan antarmuka Runnable, utas dapat dijalankan
dengan meneruskan instance kelas ke konstruktor objek Thread dan kemudian
memanggil metode thread's start():
Menerapkan Contoh

public class MyClass implemets Runnable {


public static void main(String[] args) {
MyClass obj = new MyClass();
Thread thread = new Thread(obj);
thread.start();
System.out.println("Kode ini di luar utas");
}
public void run() {
System.out.println ("Kode ini berjalan di thread");
}
}

Perbedaan antara Thread "extends" dan "implements"

Perbedaan utamanya adalah ketika sebuah kelas memperluas kelas Thread, Anda
tidak dapat memperluas kelas lain, tetapi dengan mengimplementasikan interface
Runnable, dimungkinkan untuk memperluas dari kelas lain juga, seperti: class
MyClass extends OtherClass mengimplementasikan Runnable.

Permasalahan Concurrent
Karena utas berjalan pada waktu yang sama dengan bagian lain dari program, tidak
ada cara untuk mengetahui urutan kode akan dijalankan. Ketika utas dan program
utama membaca dan menulis variabel yang sama, nilainya tidak dapat diprediksi.
Masalah yang dihasilkan dari ini disebut masalah konkurensi, contoh :

Contoh kode di mana nilai jumlah variabel tidak dapat diprediksi:

30
public class MyClass extends Thread {
public static int amount = 0;

public static void main(Strin [] args) {


MyClass thread = new MyClass();
thread.start();
System.out.println(amount);
amount ++;
System.out.println(amount);
}

public void run() {


amount ++;
}
}

Untuk menghindari masalah konkurensi, yang terbaik adalah membagikan atribut


sesedikit mungkin di antara utas. Jika atribut perlu dibagikan, salah satu solusi yang
mungkin adalah menggunakan metode isAlive() dari utas untuk memeriksa apakah
utas telah selesai berjalan sebelum menggunakan atribut apa pun yang dapat diubah
oleh utas.
Contoh

Gunakan isAlive() untuk mencegah masalah konkurensi:

public class MyClass extends Thread {


public int amount = 0;
public static void main(String[] args) {
Thread MyClass = new MyClass();
thread.start();
// Tunggu threadnya selesai
while (thread.isAlive()) {
System.out.println ("Menunggu ...");
}

31
// Perbarui jumlah dan cetak nilainya
System.out.println("Utama:" + amount);
amount++;
System.out.println("Utama:" + amount);
}
public void run() {
amount++;
}
}

10 Lambda

Ekspresi Lambda ditambahkan di Java 8.


Ekspresi lambda adalah blok kode pendek yang mengambil parameter dan
mengembalikan nilai. Ekspresi lambda mirip dengan metode, tetapi tidak
memerlukan nama dan dapat diterapkan langsung di bagian isi metode.
Sintaksis
Ekspresi lambda paling sederhana berisi satu parameter dan ekspresi:

parameter -> ekspresi

Untuk menggunakan lebih dari satu parameter, bungkus dalam tanda kurung:

(parameter1, parameter2) -> ekspresi

Ekspresi terbatas. Mereka harus segera mengembalikan nilai, dan tidak boleh berisi
variabel, tugas, atau pernyataan seperti if atau for. Untuk melakukan operasi yang
lebih kompleks, blok kode dapat digunakan dengan tanda kurung kurawal. Jika
ekspresi lambda perlu mengembalikan nilai, maka blok kode harus memiliki
pernyataan return.

(parameter1, parameter2) -> {blok kode}

32
Menggunakan Lambda Expressions
Ekspresi lambda biasanya diteruskan sebagai parameter ke suatu fungsi:
Contoh : Gunakan ekspresi lamba dalam metode forEach() ArrayList untuk
mencetak setiap item dalam daftar:

import java.util.ArrayList;

public class MyClass {


public static void main(String[] args) {
ArrayList<Integer> numbers = new ArrayList<Integer> ();
numbers.add(5);
numbers.add(9);
numbers.add(8);
numbers.add(1);
numbers.forEach((n) -> {System.out.println(n);});
}
}

Ekspresi lambda dapat disimpan dalam variabel jika jenis variabel adalah interface
yang hanya memiliki satu metode. Ekspresi lambda harus memiliki jumlah
parameter yang sama dan tipe kembalian yang sama dengan metode itu. Java
memiliki banyak jenis interface bawaan, seperti interface Consumer (ditemukan
dalam paket java.util) yang digunakan oleh list. Contoh

Gunakan interface Consumer Java untuk menyimpan ekspresi lambda dalam


variabel:

import java.util.ArrayList;
import java.util.function.Consumer;

public class MyClass {


public static void main(String[] args) {

33
ArrayList<Integer> numbers = new ArrayList<Integer> ();
numbers.add(5);
numbers.add(9);
numbers.add(8);
numbers.add(1);
Consumer<Integer> method = (n) -> { System.out.println(n); };
numbers.forEach(method);
}
}

Untuk menggunakan ekspresi lambda dalam sebuah metode, metode tersebut harus
memiliki parameter dengan antarmuka metode tunggal sebagai tipenya. Memanggil
metode interface akan menjalankan ekspresi lambda, Contoh :

Buat metode yang menggunakan ekspresi lambda sebagai parameter:

interface StringFunction {
String run(String str);
}

public class MyClass {


public static void main(String[] args) {
StringFunction exclaim = (s) -> s + "!";
StringFunction ask = (s) -> s + "?";
printFormatted("Hello", exclaim);
printFormatted("Hello", ask);
}
public static void printFormatted(String str, StringFunction format) {
String result = format.run(str);
System.out.println(result);
}
}

34
PRAKTIKUM

Objektif

❖ Mampu mengimplementasikan dan memanipulasi kelas model array dan


list
❖ Mampu melakukan manajemen kode sumber / source program
❖ Mampu mengimplementasikan pengolahan token pada Java
❖ Mampu mengimplementasikan pemrograman yang stabil dan konsisten
dengan pemrograman atomic / Thread Safe

35
PRAKTEK 1 :

1. Buat Folder dibawah dibawah folder data\oop[nnnnn] dengan nama


lab3[nnnnnn]
2. Aktifkan VSCode, Add Folder, arahkan ke folder lab3[nnnnnn] dan segera
Save Workspace dengan nama lab3[nnnnn]
3.Tekan tombol Ctrl+Shift+P, maka akan muncul menu Palette, kemudian pilih
Java : Create Project > No build tools > Select Folder lab[nnnnn] dengan mouse ,
maka textfield akan tertulis nama folder > Select project location > Input a Java
project name : lab3[nnnnn]

PRAKTEK 2 :

1. Buat struktur folder dibawah lab3[nnnnn]\src\org\stmi\oop\lab3 , dengan


sorot folder src dengan mouse lalu , klik tombol kanan > new Folder dan masukan
teks : org\stmi\oop\lab3 maka (struktur folder akan dibuat otomatis oleh
VSCode)
2. Pindahkan file App.java kebawah folder lab4 , perhatikan untuk melakukan
click pada notifikasi QuickFix atau lakukan manual penambahan manual
package org.stmi.oop.lab3; pada bagian atas kode program. Save dan Press F5 (Run
Program)
3. Mulai saat ini harus malakukan manajemen organisasi source program dengan
pola diatas untuk bab-bab selanjutnya
4. Buat File baru dibawah folder lab3[nnnnn], (Seperti pada bagian ) dengan
nama MyClass[nnnnn].java dan isikan kode sesuai dengan Bagian 1, dengan
memodifikasi : nama kelas dan semua variabel, tapi tidak nama metode
Contoh :

package org.stmi.oop.lab3;

import java.util.ArrayList;

36
import java.util.Collections; // Impor kelas Koleksi

public class MyClass00000 {


public static void main(String[] args) {

/* Kode sebelumnya di comment , untuk semua pekerjaan bila masih dengan


nama kelas yang sama */

// ArrayList<String> cars00000 = new ArrayList<String>();


// cars00000.add("Volvo");
// cars00000.add("BMW");
// cars00000.add("Ford");
// cars00000.add("Mazda");
// System.out.println(cars00000);
// }

ArrayList<String> cars00000 = new ArrayList <String> ();


cars00000.add("Volvo");
cars00000.add("BMW");
cars00000.add("Ford");
cars00000.add("Mazda");
Collections.sort(cars00000); // Menyortir mobil
for (String i: cars00000) {
System.out.println (i);
}
}
}

Dengan demikian semua hasil pekerjaan akan tampak sudah dikerjakan, ini adalah
wajib, kelalaian akan mengurangi nilai.

37
TUGAS 1

Ketik ulang semua kode dibagian teori dengan aturan yang telah dicontohkan
pada praktek nomor 2 untuk semua bagian teori.

38
KATA PENTING

39
DAFTAR PUSTAKA

40

Anda mungkin juga menyukai