MODUL 7 POHON A. Pembahasan Pratikum 1 : class simpul { public String elemen; simpul kiri; simpul kanan; public void ngisiElemen(String ELEMEN) { elemen = ELEMEN; } } Potongan program dia atas merupakan sebuah kelas dengan nama simpul, didalam kelas tersebut terdapat tipe data String dengan nama elemen, simpul kiri dan simpulkan kanan. Terdapat pula sebuah method dengan nama ngisiElemen yang dikerjakan pada dengan tipe data String yang dengan nama variabelnya ELEMEN. Dan method tersebut bersifat public sehingga dapat diakses semua method yang ada pada program ini. class pohon { public simpul akar; public void deklarasiPohon() { akar = null; } Sedangkan pada potongan program di atas merupakan sebuah kelas dengan nama pohon, yang mana di dalam kelas tersebut hanya terdiri simpulkan akar, dan memiliki method dengan nama deklarasiPohon, yang bersifat public dan menyatakan pula bahwa akar sama dengan null. simpul tambahSimpul(simpul Petunjuk, String ELEMEN) { if (Petunjuk == null) { simpul baru = new simpul(); baru.ngisiElemen(ELEMEN); baru.kiri = null; baru.kanan = null; Petunjuk = baru; return(Petunjuk); } program di atas merupakan sebuah method dengan nama tambahSimpul,dengan variable petunjuk dan ELEMENT. Menggunakan pernyataan if yaitu jika penunjuk sama dengan null, berarti node dalam keadaan kosong. Sehinga sebuah objek baru di ciptakan, yaitu dengan nama baru .Maka simpul baru akan masuk dalam pohon dengan perintah atau method ngisiElemen, sehingga simpul baru masuk maka simpul tersebut akan menjadi ELEMEN atau simpul dalam pohon. Saat elemen atau simpul tersebut sudah masuk dalam pohon, maka terdapat satu simpul/node, dan simpul/elemen tersebut pada sisi kiri dari simpul tersebut bernilai null, dan pada sisi kanannya pula akan bernilai null, dan simpul tersebut akan menjadi penunjuk dalam pohon. else { if (ELEMEN.compareTo(Petunjuk.elemen) < 0) { Petunjuk.kiri = tambahSimpul(Petunjuk.kiri, ELEMEN); return(Petunjuk); Lanjutan dari perintah If di atas, jika penunjuk tidak sama dengan null, maka dihadapkan pula dalam sebuah kondisi. jika ELEMEN dibandingkan dengan petunjuk elemen dan hasilnya lebih kecil dari nol (0), maka akan dikerjakan perintah selanjutnya yiatu petunjuk kekiri sama dengan melakukan tambah simpul, dan simpul penunjuk akan ke kiri dari ELEMEN. Dan akan dilakukan nilai pengembalian penunjuk tersebut sepeti semula. jika elemen atau simpul yang akan masuk dalam pohon dibandingkan dengan petunjuk simpul lebih kecil,maka akan berada pada posisi kiri dari penunjuk tersebut, dan akan dikembalikan lagi nilai penunjuk seperti semula. } else { Petunjuk.kanan = tambahSimpul(Petunjuk.kanan, ELEMEN); return(Petunjuk); } } } Sedangkan jika pernyataan sebelumnya tidak terpenuhi, maka penunjuk ke kanan sama dengan melakukan tambah simpul petunjuk kekanan untuk menjadikan eleman atau simpul dalam pohon, maka setalah perintah tersebut telah dilakukan, akan dikerjakan nilai pengembalian petunjuk seperti semula void preOrder(simpul Penunjuk) { if (Penunjuk != null) { System.out.print(Penunjuk.elemen + ","); preOrder(Penunjuk.kiri); preOrder(Penunjuk.kanan); } } Method dengan nama PreOrder yang merupakan simpul penunjuk. jika simpul penunjuk tidak sama dengan null, maka element pun dicetak. Kemudian preOrder(Penunjuk.kiri); dimulai dari kiri,yang menyatakan bahwa simpul penunjuk akan ke kiri hingga penunjuk bernilai null, maka tidak dikerjakan. Kemudian akan berpindah pada preOrder(Penunjuk.kanan); untuk dikerjakan. void inOrder(simpul Penunjuk) { if (Penunjuk != null) { inOrder(Penunjuk.kiri); System.out.print(Penunjuk.elemen + ","); inOrder(Penunjuk.kanan); } } Merupakan Method inOrder dengan menggunakan simpul penunjuk sebagai penelusuran dalam pohon. Didalam method ini terdapat sebuah kondisi jika penunjuk tidak sama dengan null, maka dikerjakan perintah inOrder(Penunjuk.kiri);,berarti node dibaca dari kiri.Dan kemudian elemen akan dicetak dengan perintah: System.out.print(Penunjuk.elemen + ",");,Dan setelah dicetak, maka yang akan dikerjakan selanjutnaya adalah membaca node pohon ke kanan, dengan perintah inOrder(Penunjuk.kanan);. void postOrder(simpul Penunjuk) { if (Penunjuk != null) { postOrder(Penunjuk.kiri); postOrder(Penunjuk.kanan); System.out.print(Penunjuk.elemen + ","); } } } Method postOrder dengan menggunakan simpul penunjuk juga sebagai penelusuran dalam pohon. postOrder postOrder(Penunjuk.kiri);,membaca node pohon yang dimulai dari kiri, kemudian akan dikerjakan perintah postOrder(Penunjuk.kanan);,yang mana simpul penunjuk akan dibaca dari kanan, setelah dilakukan kunjungan pada node dalam pohon dari kiri, maka selanjutnya pada program ini, akan dilakukan System.out.print(Penunjuk.elemen + ",");,merupakan ke kanan. Setelah itu, perintah untuk mencetak element. public class ProgramPohonBiner { public static void main(String[] args) { pohon PohonBiner = new pohon(); potongan program diatas merupakan class utama/main class dari program Pohon Biner ini. Dengan menciptakan objek pohon yang baru dan aka dihasilkan output dengan perintah dibawah ini : PohonBiner.deklarasiPohon(); PohonBiner.akar =PohonBiner.tambahSimpul(PohonBiner.akar, "M"); PohonBiner.akar =PohonBiner.tambahSimpul(PohonBiner.akar, "P"); PohonBiner.akar =PohonBiner.tambahSimpul(PohonBiner.akar, "D"); PohonBiner.akar =PohonBiner.tambahSimpul(PohonBiner.akar, "A"); PohonBiner.akar =PohonBiner.tambahSimpul(PohonBiner.akar, "S"); PohonBiner.akar =PohonBiner.tambahSimpul(PohonBiner.akar, "K"); PohonBiner.akar =PohonBiner.tambahSimpul(PohonBiner.akar, "N"); PohonBiner.akar =PohonBiner.tambahSimpul(PohonBiner.akar, "G"); PohonBiner.akar =PohonBiner.tambahSimpul(PohonBiner.akar, "O"); PohonBiner.akar =PohonBiner.tambahSimpul(PohonBiner.akar, "L"); PohonBiner.akar =PohonBiner.tambahSimpul(PohonBiner.akar, "W"); PohonBiner.akar =PohonBiner.tambahSimpul(PohonBiner.akar, "F"); PohonBiner.akar =PohonBiner.tambahSimpul(PohonBiner.akar, "J"); PohonBiner.akar =PohonBiner.tambahSimpul(PohonBiner.akar, "T"); PohonBiner.akar =PohonBiner.tambahSimpul(PohonBiner.akar, "H"); PohonBiner.akar =PohonBiner.tambahSimpul(PohonBiner.akar, "U"); Terdapat 16 simpul yang akan masuk ke dalam pohon, dengan simpul pertama akan menjadi root dalam pohon. Dari data atau simpul/elemen di atas, dapat diketahui bahwa yang menjadi root adalah M. Kemuadian semua simpul akan dikerjakan dengan perintah tambah simpul, dan dilihat letak posisinya yang aka dibandingkan dengan penunjuk simpul. Dari perintah simpul/elemen tersebut adalah dapat dicontohkan salah satu : PohonBiner.akar =PohonBiner.tambahSimpul(PohonBiner.akar, "M"); // simpul dalam pohon biner akan menjadi akar sama dengan pohon biner akan melakukan tambah simbul di dalam pohon, dan huruf atau simpul yang ada diantara petik dua akan amsuk ke dalam pohon biner dan akan menjadi akar. Maka dari 16 simpul tersebut akan ada 16 akar yang akan masuk dalam pohon biner. 16 simpul tersebut dapat dikerjakan dengan menggunakan preOrder, seperti berikut : PohonBiner.preOrder(PohonBiner.akar); } } Untuk output program tersebut, dapat dilihat pada listing modul 7. B. Kesimpulan Pohon atau tree adalah kumpulan akar(root), cabang, dan simpul (node) yang saling terhubung secara hirarki. Sedangkan pada modul ini membahas tentnag jenis pohon biner (binary tree), yaitu pohon dimana setiap simpulnya (node) hanya boleh memiliki maksimal 2 anak (cabang kiri dan kanan). Terdapat beberapa istilah dalam tree, yaitu simpul akar, adalah simpul yang tidak memiliki parent. Kemudian ada simpul daun, adalah simpul yang tidak memiliki anak. Sedangkan simpul(node) itu sendiri terbagi atas dua, yaitu simpul anak (children), yang hanya boleh mempunyai 1 oarangtua. Dan simpul orangtua (parent), yang hanya boleh mempunyai maksimal 2 anak, namun boleh juga tidak mempunyai anak. C. Listing Terlampir. MODUL 8 COLLECTION A. Pembahasan Pratikum 1 : import java.util.*; //untuk mengimport class-class yang ada pada java util public class Example { private List list; public List getList() { return list; } Sedangkan pada potongan program di atas merupakan, nama kelas dari program ini, yaitu dengan nama kelasnya adalah kelas Example. Kelas tersebut memiliki tingkat akses private, karena menggunakan akses private, maka data dan method dapat diakses oleh kelas yang memilikinya saja. Dan dengan menggunakan variabel list dari tipe data List. Public List getList(), berarti merupakan konstruktor yang dapat diakses semua bagian atau method dalam program ini, yiatu pada List dengan perintah getList atau mengambil daftar List. Maka nilai list akan dikembalikan kembali. Example() { list = new ArrayList(); list.add(new String("Hello world!")); list.add(new String("Good bye!")); } Dan pada potongan program di atas, merupakan bagian isi dari program dengan nama kelas Example, yiatu list = new ArrayList, merupakan penciptaan list dengan ArrayList, yang teridiri dari, list yang ditambah dengan tipe data String dengan varaibel atau isi dari tipe data tersebut adalah “Hello world!”,kemudian ditambah lagi daftarnya dengan tipe data String pula yang menyatakan pernyataan “Good bye!”. public void printList() { for (Object s:list) { System.out.println(s); } } Pada potongan program di atas adalah sebuah method atau konstruktor dengan nama printList. Dan pada method ini dapat diakses oleh semua method lain yang terdapat dalam program ini. Pada method ini akan membaca dari kels Example dengan perulangan, yang menyatakan objek s adalah list atau daftar yang ditambah dari kelas Example tersebut. Dengan menggunakan perintah System.oyt.println(s), berfungsi untuk memanggil atau menampilkan hasil dari perulangan for tersebut. public static void main(String arrgv[]) { Example e = new Example(); e.printList(); dari potongan program di atas, merupakan suatu method yang mana bersifat public sehingga dapat diakses semua method yang ada pada program ini, perintah tersebut juga merupakan perintah method dengan memulai program dengan method main. Dalam method tersebut, diciptakaannya object dari class example dan akan dibawa ke dalam method printList untuk dieksekusi atau ditampilkan pada outputnya. System.out.println("Data Setelah diurutkan : "); Collections.sort(e.getList()); e.printList(); } } Masih sambungan dari program di atas, yiatu lanjutan program pada method void main tersebut. Namun pada potongan program di atas merupakan pengurutan dari data atau objek e nya pada kelas Example yang penambahan daftar dari tipe data String. Dengan menggunakan perintah sort, yiatu mengumpulkan data e yang ada kemudian di urutkan datanya, yiatu data atau obejk baru (e) diambil kemudian diurutkan dan kemudian hasilnya akan dibawa kepada method printList untuk ditampilkan pada output. Karena mengalamin sort/urutan, maka dilihat dari kedua data tersbeut yiatu data “Hello world!” dan “Good bye!”. Yang memiliki urutan pertaman adalah “Good bye!”, kemudian “Hello world!. Sehingga sort yang dilakukan dengan cara ascending dalam program ini. Pratikum 2 : import java.awt.Graphics; import java.util.LinkedList; import javax.swing.JFrame; Masih kedalam package aplikasisd untuk program pada pratikum 2 ini. Namun pada pratikum 2 ini, menggunakan import declarations nya adalah import java.awt.Graphics; berfungsi untuk menampilkan grafiks dalam program java ini. Kemudian import java.util.LinkedList; berfungsi untuk mengattur data dalam bentuk LinkedList yang ada pada program ini. Kemudian import javax.swing.JFrame; berfungsi untuk menampilkan dan mengatur bnetuk form atau Jframe dalam program tersebut. public class PercobaanLinkedList extends JFrame { public static void main(String[] args) { new PercobaanLinkedList(); } program di atas merupakan suatu kelas dengan nama PercobaanLinkedList. Dengan memulai program dengan method yang void mainnya. New PercobaanLinkedList ini merupakan awal dari kelas dari program ini, dengan bagiannya programnya seperti berikut : LinkedList l1 = new LinkedList(); PercobaanLinkedList() { l1.add("Test LinkedList"); l1.add("Coba lagi"); l1.add(10243); this.setDefaultCloseOperation(this.EXIT_ON_CLOSE); this.setSize(500, 500); this.setVisible(true); setTitle("Test LinkedList"); } Sambungan dari program sebelumnya. Disini akan dilakukan penciptaan objek dari kelas LinkedList nya yaitu dengan nama l1. Disana dari kelas PercobaanLinkedLlist akan melakukan penambahan obek yang dilakukan dari penciptaan objcek tersebut. Seperti melakukan penambahan data pada objek l1 yang memiliki pernyataan “Test LinkedList”, kemuadian dilakukan lagi penambahan data dari penciptaan objek baru l1 dengan pernyataan “Coba lagi”, kemuadian dilakukan lagi penambahan data pada objek l1 dengan pernyataan 10243. Kemudian terdapat kata kunci this, yang berarti menunjuk pada kostruktor atau method yang dituju dalam program ini, yiatu this menyatakan mengatur operasi tutup dari form dekstopnya, yaitu berupa exit_on_close, untuk keluar form atau mutup form tersebut. Sehingga untuk membuat form tersebut dibutuhkan ukuran. Maka diperlukanlah perintah atau pengaturan dengan menggunakan setsize, yang mana kata kunci menunjuk pada perintah setSize untuk mengatur ukuran form dengan ukuran 500 x 500. Kemudian untuk mengatur tampilkan hasil formnya dibutuhkan perintah setvisible yang bernilai true/benar. Dan jika menggunakan setTitle itu merupakan pengaturan untuk judul pada form yang dibuat. Dan pada program ini membuat form dengan judul “Test LinkedList”. public void paint(Graphics g) { g.drawString("Jumlah Elemen : "+String.valueOf(l1.size()),10,50); Potongan program di atas merupakan method dengan nama paint dengan menggunakna bnetuk Graphics bernama g. dan akan menampilkan kata di antara petik dua yiatu Jumlah Elemen, dan disertai dengan isi dari tipe data string yang akan menagmbil data dari data l1 dan memiliki nilai atau value yang memiliki ukuran 10x50. Sehingga dari perintah dibawah ini, dapat diketahui bahwa didalam LinkedList l1 terdapat 3 elemen. g.drawString("Elemen ke-1 : "+l1.get(0), 10, 100); g.drawString("Elemen ke-2 : "+l1.get(1), 10, 150); g.drawString("Elemen ke-3 : "+l1.get(2), 10, 200); kemudian menambahkan perintah yg sama namun dengan element yang berurutan berbeda. g.drawString("Method getFirst() : "+l1.getFirst(),10,250); g.drawString("Method getLast() : "+l1.getLast(),10,300); Dari perintah di atas, merupakan perintah yang akan menampilkan isi dari g yang dibawah ke dalam drawString yang kemudian akan menampilkan kata di antara petik dua, yaituMethod getFirst yag akan disertai dengan data l1 yang diambil dengan menggunakan perintah getFirst dari l1 dengan ukuran 10x250, maka dari data yang ada pada l1, untuk data l1 yang ditambah pertama adalah “Test LinkedList”, maka kan ditampilkan hasil tersebut. Kemudian akan menampilkan pula Method getLast, yiatu akan mengambil data l1 dengan perintah getLast dengan menggunakan ukuran 10x300, dari data l1 yang masuk dalam LinkedList, yang masuk terakhir adalah 10243, maka data tersebut akan ditampikan saat dilakukan pemanggilan dengan getLast. l1.addLast("Terakhir"); g.drawString("Method getLast() : "+l1.getLast(),10,350); Sedangkan di atas akan dilakukan penambahna objek lagi terhadapa l1 LinkedListnya dengan menggunakan perintah addLast, hal tersebut berarti data yang akan masuk dalam LinkedList dengan nama l1, akan dilakukan penambah dari belkangan atau terakhir. Dari data sebelumnya yang berada dalam posisi terakhir adalah 10243, maka saat dilakukan l1.addLast dengan nama “Terakhir”, maka variabel data dengan nama terakhir akan menggantikan posisi 10243 sebagai method terkahir dalam LinkedList l1 ini. l1.remove(); g.drawString("Jumlah Elemen Sekarang : " String.valueOf(l1.size()),10,400); }} Dari bentuk perintah di atas adalah suatu perintah untuk menhapus data dalam LinkedList l1, yiatu menggunakan perintah remove, maka akan ada satu data yang dipilih untuk dihapus. Sehingga saat dilakukan pengecekan jumlah elemen ekarang, dapat diketahui bahwa dengan mengghunakan perintah String.valueOf tersebut utnuk mengetahui jumlha elemen yang ada dalam LinkedList l1, yiatu terdapat 3 elemen dan memiliki ukuran 10x400. Yang mana semulanya saat dilakukan penambahan elemen terakhir, jumlah elemen yang ada dalam l1 adalah 4 elemen, saat dilakukan pemanggilan perintah remove, maka akan ada satu elemn yang keluar atau terhapus dari l1, sehingga 4 – 1 = 3 elemen sekarang dalam l1. B. Tugas 1. Apa perbedaan Vektor dan ArrayList pada packet java.util ? Jawab : a. Arraylist tidak disinkronkan sementara vector disinkronkan. b. Arraylist tidak memiliki ukuran standar sementara vektor memiliki ukuran standar 10. c. Arraylist tidak mendefinisikan ukuran kenaikan sementara vektor tidak. 2. Bagaimana perintah untuk menambah, menghapus dan menampilkan data pada List ? Jawab : Untuk menambha data ke dalam List, maka dapat dilihat pada program di atas, yaitu menggunakan suatu method tambah, yaitu dengan nama PercobaaLinkedList, dengan menggunakan perintah yang melakukan atau menciptakan objek yang mana data akan masuk ke dalam LinkedList tersebut. Dan menggunakan perintah l1.add(sertakan nama data yang ingin dimasukkan dalam data l1 ini). Sedangkan Sedangkan untuk menghapus data yang ada pada List, dari program Pratikum ke-2 ini menggunakan perintah remove, yiatu l1.remove(); maka akan ada satu data yang dipilih untuk dihapus dari List. Dan untuk menampilkan data pada List, dari program di atas menggunakan perintah pemanggilan yang akan menampikja hasilnya data yang ada pada l1. Yaitu dengan perintah g.drawString(menyertai no index yang ingin dipanggil, dan menentukan pula ukurannya). No index dalam l1 mrupakan nomor pemanggilan dari data pada l1, yang dimulai dari 0 atau first dana terakhir jumlah data yang ada atau last. C. Kesimpulan Collection secara umum memiliki arti yaitu sebuah kumpulan. Dalam OOP Colletion dikenal sebagai suatu tempat atau wadah atau objek yang dapat menyimpan objeck lainnya baik yang memiliki tipe data yang sama maupun tidak. Adapun collection dibagi menjadi 2 macam, yiatu collection set yang terdiri dari HastSet, LinkedListHastSet dan TreeSet. Dan kemudian ada collection list, yang terdiri dari ArrayList, LinkedList dan Vector. D. Listing Terlampir.