Jumat, 24 Mei 2013

Stack pada Java


Stack adalah salah satu struktur data yang memiliki sistem kerja Last In First Out (LIFO), yang terakhir masuk pertama keluar. Dapat di ilustrasikan seperti sebuah tumpukan buku, ketika mengambil sebuah buku di dalam tumpukan itu maka harus diambil satu persatu dari buku yang paling atas dari tumpukan buku tersebut.  Sebuah stack hanya dapat ditambahkan dan dikurangi elemennya hanya dari satu sisi yakni elemen atasnya atau biasa disebut Top Of Stack.

Fungsi dalam Stack:
  • Fungsi init: fungsi yang digunakan untuk inisialisasi atau membuat stack baru yang masih kosong.
  • Fungsi full: digunakan untuk mengetahui stack penuh atau tidak.
  • Fungsi empty: digunakan untuk mengetahui stack kosong atau tidak.
  • Fungsi clear: digunakan untuk mengosongkan stack. Stack dianggap kosong apabila puncak stack berada pada posisi -1.
  • Fungsi push: digunakan untuk menambahkan data ke dalam stack. Penambahan data tidak bisa dilakukan apabila stack sudah penuh. Urutan perintahnya adalah: menambahkan nilai top dan menambahkan data pada posisi nilai top. Jika dalam Linked List menggunakan method addLast
  • Fungsi pop: digunakan untuk mengeluarkan data teratas stack dengan syarat bahwa stack tidak kosong. Urutan perintahnya adalah : menghapus data pada posisi nilai top dan menurunkan nilai top. Jika dalam Linked List menggunakan method removeLast.

    Penggunaan STACK :
    * Perhitungan ekspresi aritmatika (posfix)
    * algoritma backtraking (runut balik)
    * algoritma rekursif


    (cites from http://id.wikipedia.org/wiki/Stack_%28struktur_data%29)

Ilustrasi :
Misalnya dalam stack ada data A,B,C,D secara berurutan mulai dari bawah (Ascending). >> Jika ingin mengeluarkan data A, maka proses yang dilakukan : POP D –>POP C –> POP B –> POP A
>> Jika ingin memasukkan data E dibawah B, maka proses yang dilakukan adalah : POP D –> POP C –> POP B –> PUSH E


COMMON ERROR :
1. Jika kondisi stack dalam keadaan sudah penuh kemudian di-PUSH, maka akan terjadi Blue Screen
2. Jika kondisi stack dalam keadaan kosong kemudian di-POP, maka akan terjadi looping tanpa henti.


CODE
Ada 2 class yang digunakan untuk program STACK dengan paradigma OOP ini. Yang pertama Main dan Stack

CODE MAIN.JAVA
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
int pilihan;
int data;
Stack result = new Stack();
//looping until false condition
do{
//Displaying Menu
System.out.println(“1. PUSH Item”);
System.out.println(“2. POP Item”);
System.out.println(“3. Lihat Isi Data”);
System.out.println(“0. Keluar”);
Scanner input = new Scanner(System.in);
System.out.println(“Masukkan Pilihan :”);
pilihan = input.nextInt();
//condition for choice
if(pilihan==1){
System.out.println(“Data yang ditambahkan : “);
data = input.nextInt();
result.push(data);
}
else if(pilihan==2){
result.pop();
}
else if(pilihan==3){
result.Display();
}
else if(pilihan==0){
System.exit(0);
}
else{
System.out.println(“Pilihan Tidak Ada!!”);
}//end of condition
} while(pilihan!=0);//end looping
}
}
CODE STACK.java
class Stack {
private boolean empty,full;
private int pos;//menujukkan tempat kosong
private int max_data = 100;
private int item [] = new int[max_data];
public Stack(){
full = false;
empty = true;
pos = 0;
}//end of constructor
//method isFull
public boolean isFull(){
return(full);
}//end of isFull method
//method isEmpty
public boolean isEmpty(){
return(empty);
}//end of isEmptyl method
//method push
public void push(int data){
if(!isFull()){
item[pos++] = data;
empty = false;
if(pos == max_data) full = true;
System.out.println(“Data sudah ditambahkan”);
}
else{
System.out.println(“Stack sudah penuh”);
}
return;
}//end of push method
//method pop
public int pop(){
int x = 0;
if(!isEmpty()){
x = item[--pos];
full = false;
System.out.println(“Data yang di POP adalah :” + item[pos]);
System.out.println(“”);
item[pos]=0;
if(pos==0)empty = true;
else{
System.out.println(“Stack Kosong!”);
}
}else{
System.out.println(“Stack Masih Kosong!\n”);
}
return(x);
}//end of pop method
//method Display
public void Display(){
System.out.println(“Isi Stack Adalah : “);
//printing list item
for(int i=0; i<pos; i++){
System.out.print(item[i]+" ");
}
System.out.println("\n");
}//end of Display
}
IMPLEMENTASI PADA PROGRAM

Bagian progam. 
Tumpukan.java




public class Tumpukan {
     
        public int ukuran;
        public long [] tumpukan;
        public int top;
         
public Tumpukan(int s){
    ukuran = s;
    tumpukan = new long [ukuran];
    top = -1;
}
public void push(long j){
    tumpukan[++top] = j;
}
public long pop(){
    return tumpukan[top--];
}
public long peek(){
    return tumpukan[top];
}
public boolean isEmpty(){
    return (top == ukuran-1);
}
public boolean isFull(){
    return(top == ukuran-1);
     
}
public void baca(){
    int i=top;
    while (i>0){
        System.out.print(tumpukan[i]);
        System.out.print(" ");
        i--;
    }
    System.out.println(" ");
}
}



Program Pemanggil: aplistack.java






public class aplistack{
    public static void main (String [] args){
        Tumpukan tumpukan=new Tumpukan(10);
        tumpukan.push(56);
        tumpukan.baca();
        tumpukan.push(45);
        tumpukan.baca();
        tumpukan.push(67);
        tumpukan.baca();
        long nilai1=tumpukan.pop();
        System.out.println("nilai1 = "+nilai1);
        System.out.println(" ");
        tumpukan.push(83);
        tumpukan.baca();
        tumpukan.push(27); 
        tumpukan.baca();
        long nilai2 = tumpukan.pop();
        System.out.print("nilai2 = "+nilai2);
        System.out.println(" ");
        long nilai3 = tumpukan.pop();
        System.out.println("nilai3 = "+nilai3);
        System.out.println(" ");
        tumpukan.baca();
         
         
    }
}

Referensi:
http://hidayahweb.blogspot.com/2012/05/stack-pada-java.html
http://blog.uin-malang.ac.id/syauqi/2010/06/03/stack-tumpukan/

Array

ARRAY adalah adalah Tipe terstruktur yang terdiri dari sejumlah komponen-komponen yang mempunyai tipe yang sama. Sebelum digunakan, variabel array perlu dideklarasikan terlebih dahulu. Cara mendeklarasikan variabel array sama seperti deklarasi variabel yang lainnya, hanya saja diikuti oleh suatu indek yang menunjukan jumlah maksimum data yang disediakan.

Fungsi Array adalah menampung sejumlah data yang mempunyai tipe data yang sama dengan tipe data Array tersebut.

Array pada pemrogramman Java, dapat dibagi menjadi 2 bagian besar, yaitu Array Berdimensi Satu dan Array Multidimensi.

A. Array Berdimensi Satu

Bentuk pendekarasian Array Berdimensi Satu pada pemrograman Java, seperti dibawah ini:

tipe_data[] nama_var_array;
nama_var_array = new tipe_data[ukuran];

Contoh pendeklarasian :
int[] nilai;
nilai = new int[10];

a. Memasukan Nilai ke Array

Untuk memasukan nilai kedalam elemen array, dengan cara menyebutkan index untuk elemen array tersebut. Index dimulai dari index ke 0, bukan dari index ke 1.

nilai[0] = 70;
nilai[1] = 60;
nilai[2] = 80;

b. Mengambil Nilai dari Array

Untuk mengambil nilai dari dalam elemen array, dengan cara yang sama seperti memasukan kedalam elemen array, yaitu dengan menyebutkan index dari elemen array tersebut.

nilai[0];
nilai[1];
System.out.println("Nilai Elemen : " + nilai[0]);

Berikut contoh program array untuk menghitung total nilai dan nilai rata-rata elemen array.

01./* ----------------------------
02.Nama File : Array_D1_01.java
03.Author    : Frieyadie
04.------------------------------- */
05. 
06.import java.util.*;
07.class Array_D1_01
08.{
09.public static void main(String[] args)
10.{
11.int a, n, jml_nil=0;
12.double nil_rata=0;
13.int[] nilai;         // deklarasi variabel array
14.nilai = new int[10]; // membuat objek array
15. 
16.Scanner input = new Scanner(System.in);
17. 
18.System.out.print("Masukkan Banyak Data = ");
19.n = input.nextInt();
20. 
21.System.out.println("");
22. 
23.//Memasukan Data ke Elemen Array
24.for(a=0; a<n; a++)
25.{
26.System.out.print("Masukkan Array ke " + a + " = ");
27.nilai[a] = input.nextInt();
28.}
29. 
30.//Menampilkan Data ke Elemen Array
31. 
32.System.out.println("\n\nData Yang Diinput ke Elemen Array \n");
33. 
34.for(a=0; a<n; a++)
35.{
36.System.out.print("Nilai ke - " + a );
37.System.out.println(" = " + nilai[a]);
38.jml_nil = jml_nil + nilai[a];
39.}
40. 
41.nil_rata = jml_nil / n;
42. 
43.System.out.println("\n---------------------------------------");
44.System.out.println("Jumlah Array Nilai          = " + jml_nil);
45.System.out.println("Nilai Rata-Rata Array Nilai = " + nil_rata);
46.}
47.}
 
Rumus skrip untuk mengetahui jumlah data dari Array

(nama Array).length
(nama Array)= Nama dari suatu Array
.length= digunakan oleh Java untuk mengambil jumlah data dari Array, jumlah tersebut mempunyai tipe data Integer dan int
Silahkan pelajari skrip dibawah ini yang dicetak tebal
——————^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^——————
package pelajaranjava;
import java.io.*;

public class Main {
public static void main(String[] args) {
String[]hari={“Senin”, “Selasa”, “Rabu”, “Kamis”, “Jumat”,”Sabtu”,”Minggu”};

System.out.println(hari.length);

}
}

Penjelasan skrip

String[]hari={“Senin”, “Selasa”, “Rabu”, “Kamis”, “Jumat”,”Sabtu”,”Minggu”};
Menciptakan Array bertipe String dengan nama hari yang berisi data nama-nama hari yang bertipe data String.
hari.length= akan memberikan jumlah data yang ada didalam Array hari, jumlahnya bertipe Integer dan int
System.out.println(hari.length); =Menampilkan jumlah data yang ada didalam Array hari yang diberikan oleh hari.length
Hasil dari skrip diatas akan menampilkan angka 7 karena Array hari mempunyai 7 data yaitu “Senin”, “Selasa”, “Rabu”, “Kamis”, “Jumat”,”Sabtu”,”Minggu”
 
 
Jika Anda pernah belajar pemograman selain Java, cara pengaksesan Array tidak jauh berbeda dengan Java, untuk mengakses suatu nilai dalam Array kita membutuhkan Index(Urutan isi data dalam suatu Array), sebuah Array mempunyai urutan isi dari nol

Dibawah ini contohnya

String[]hari={“Senin”, “Selasa”, “Rabu”, “Kamis”, “Jumat”,”Sabtu”,”Minggu”};

“Senin”, “Selasa”, “Rabu”, “Kamis”, “Jumat”,”Sabtu”,”Minggu” mempunyai nomor urut, “Senin” adalah isi Array yang pertama dan karena yang pertama maka Senin mempunyai nilai Index sebesar nol, “Selasa” mempunyai nilai index 1, “Rabu” mempunyai nilai index 2,”Kamis” mempunyai nilai index 3 dan berikut seterusnya mempunyai nilai index yang ditambah satu

Untuk mengakses isi dari Array kita membutuhkan nomor indeks dari data didalam Array yang ingin diambil
Rumus skrip untuk mengakses Array

(nama Array)[(nomor index)]

Perhatikan kembali contoh Array dibawah ini

String[]hari={“Senin”, “Selasa”, “Rabu”, “Kamis”, “Jumat”,”Sabtu”,”Minggu”};

Misalnya kita ingin menampilkan tulisan “Rabu” yang ada didalam Array hari, pertama kita hitung dulu nilai index dari data “Rabu”, ternyata “Rabu” mempunyai nilai index sebesar 2, kemudian untuk menampilkan data “Rabu” kita tulis skrip dibawah ini

System.out.println(hari[2]);

hari= Adalah nama dari Array
[2]= Adalah nomor index dari Array hari yang akan mengambil data yang mempunyai nomor urut(index) kedua, yaitu “Rabu”
 
 
 
Array juga seperti variabel yang mempunyai jenis data, sebuah Array hanya bisa memiliki nilai yang bertipe data sama dengan tipe data dari Array tersebut. Sebagai contoh: jika suatu Array bertipe Integer maka Anda tidak bisa mengisi Array tersebut dengan tipe data selain Integer

Dibawah ini adalah rumus skrip untuk membuat Array

(tipe data Array)[ ](nama Array) = {(isi Array),(isi Array),(isi Array),(isi Array),(isi Array)};

Penjelasan rumus
(tipe data Array) = Tipe data berupa boolean, Integer, Double, String atau yang lainnya sesuai kebutuhan Anda
(nama Array)= Berisi nama variabel dari Array;
{(isi Array),(isi Array),(isi Array),(isi Array),(isi Array)};= isi Array dipisahkan dengan tanda koma dan dalam tanda { }, isi Array harus mempunyai tipe data yang sama dengan tipe data dari Array yang dibuat

Dibawah ini ada beberapa contoh Array

String[]hari={“Senin”, “Selasa”, “Rabu”, “Kamis”, “Jumat”,”Sabtu”,”Minggu”};
Integer[]bulan={1,2,3,4,5,6,7,8,9,10,11,12};
Boolean[]benarSalah={true,false,true,false,true,false};
 
 
REFERENSI:
http://belajar-program.ueuo.com/?p=56
http://beenjoy.wordpress.com/tutorial/programming/tutorial-java-programming/

Team Data Stucture SI21

STRUKTUR DATA

Dalam istilah ilmu komputer, sebuah struktur data adalah cara penyimpanan, penyusunan dan pengaturan data di dalam media penyimpanan komputer sehingga data tersebut dapat digunakan secara efisien.

Dalam teknik pemrograman, struktur data berarti tata letak data yang berisi kolom-kolom data, baik itu kolom yang tampak oleh pengguna (user) atau pun kolom yang hanya digunakan untuk keperluan pemrograman yang tidak tampak oleh pengguna. Setiap baris dari kumpulan kolom-kolom tersebut dinamakan catatan (record). Lebar kolom untuk data dapat berubah dan bervariasi. Ada kolom yang lebarnya berubah secara dinamis sesuai masukan dari pengguna, dan juga ada kolom yang lebarnya tetap. Dengan sifatnya ini, sebuah struktur data dapat diterapkan untuk pengolahan database (misalnya untuk keperluan data keuangan) atau untuk pengolah kata (word processor) yang kolomnya berubah secara dinamis. Contoh struktur data dapat dilihat pada berkas-berkas lembar-sebar (spreadsheet), pangkal-data (database), pengolahan kata, citra yang dipampat (dikompres), juga pemampatan berkas dengan teknik tertentu yang memanfaatkan struktur data.


Fakta atau keterangan tentang kenyataan yang disimpan, direkam atau direpresentasikan dalam bentuk tulisan, suara, gambar, sinyal atau simbol

Secara garis besar type data dapat dikategorikan menjadi :

1. Type data sederhana
a. Type data sederhana tunggal, misalnya
Integer, real, boolean dan karakter
b. Type data sederhana majemuk, misalnya
String

2. Struktur Data, meliputi
a. Struktur data sederhana, misalnya array dan record
b. Struktur data majemuk, yang terdiri dari
Linier : Stack, Queue, serta List dan Multilist
Non Linier : Pohon Biner dan Graph

 Materi-materi yang dipelajari pada struktur data dan algoritma pada java :
  1. Analisis algoritma
  2. Abstract data type (ADT) dan Java Collection API
  3. Pemograman secara rekursif
  4. Pengurutan (sorting)
  5. Implementasi struktur data linear, yaitu : list, stack, queue
  6. Struktur data hirarkis, yaitu: tree
  7. Binary search tree, AVL tree, Btree, Binary heap
  8. Hashtable
  9. Graph
Pentingnya belajar struktur data dan algoritma adalah pada pemilihan struktur data maupun algoritma yang tepat dapat membuat program lebih efisien, mudah, dan elegan.

Selain itu alasan lain untuk mempelajari struktur data dan algoritma adalah :
  1. Menganalisa kelebihan dan kekurangan dari masing-masing struktur data.
  2. Cara yang terbaik untuk memahami masing-masing struktur data adalah membuatnya.
  3. Pada industri, bahasa yang digunakan tidaklah selalu Java. Mungkin saja di bahasa tersebut tidak terdapat library untuk struktur data. 
  4. Melatih berpikir tentang efisiensi

Hubungan struktur data dengan algoritma

Dengan pemilihan struktur data yang baik maka masalah yang kompleks dapat diselesaikan sehingga algoritma dapat digunakan secara efisien, operasi-operasi penting dapat dieksekusikan dengan sumber daya yang lebih kecil memory yang lebih kecil dan waktu eksekusi yang lebih cepat.
Ciri algoritma yang baik :
  1. Input : ada minimal 0 input/lebih
  2. Output :ada minimal 1 output/lebih
  3. Define : ada kejelasan apa yang dilakukan
  4. Efective : langkah yang dikerjakan harus efektif.
Terminate : langkah harus dapat berhenti (stop) secara jelas
Bahasa pemograman bisa memiliki tipe data
  1. Built in : sudah tersedia oleh bahasa pemograman tersebut tidak berorientasi pada persoalan yang dihadapi
  2. UDT (User Defined Type) dibuat oleh pembuat program (pemograman) mendekati penyelesaian yang dihadapi. Contoh : record pada pascal, struct pada C dan Class pada Java.
  3. ADT (Abstract Data Type), memperluas konsep UDT dengan menambahkan pengkapsulan/enkapulasi berisi sifat-sifat dan operasi-operasi yang bisa dilakukan terhadap kelas tersebut


referensi:
http://id.wikipedia.org/wiki/Struktur_data
http://sdajava.blogspot.com/
http://agusp3rmana.wordpress.com/modulku/struktur-data/
http://aqwamrosadi.staff.gunadarma.ac.id/

Kamis, 16 Mei 2013

Tampilan Subset dan Submap

Map sebenarnya bukan merupakan Collection, artinya map tidak mengimplementasikan semua operasi yang didefinisikan pada interface Collection, karena map tidak memiliki iterator. Akan tetapi, Java memiliki cara lain untuk melakukan penelusuran item pada map.
Jika map adalah variabel bertipe Map, maka metode

map.keySet()
 
akan mengembalikan semua objek kunci pada map. Karena di dalam map tidak ada kunci yang sama, maka hasilnya akan dikembalikan dalam bentuk Set. Hasil yang dikembalikan oleh map.keySet() disebut tampilan (view) dari objek-objek yang disimpan di dalam map.

"Tampilan" yang dikembalikan metode ini berhubungan langsung dengan map aslinya, artinya jika kita menghapus elemen dari dalam tampilan ini, maka kunci beserta nilai yang ditunjuk di dalam map akan juga dihapus. Tampilan tidak bisa digunakan untuk menambah data, karena fungsinya hanya sebagai tampilan. Karena map.keySet() tidak membuat set baru, maka perintah ini akan cukup efisien untuk digunakan pada map yang sangat besar sekalipun.

Kita bisa menggunakan iterator untuk melakukan penelusuran isi Set. Kita bisa juga menggunakan iterator untuk kunci dari map, kemudian menelusurinya, misalnya :

Set kunci = map.keySet();         // Set kunci dari map
Iterator kunciIter = kunci.iterator();
System.out.println("Map ini memiliki asosiasi sebagai berikut:");
while (kunciIter.hasNext()) {
    Object knc = kunciIter.next();  // Ambil kunci berikut
    Object nilai = map.get(knc);  // Ambil nilai yang ditunjuk oleh kunci
    System.out.println( "   (" + knc + "," + nilai + ")" );
}
 
Jika map adalah suatu TreeMap, maka set kuncinya adalah set yang terurut, dan iteratornya akan mengunjungi kunci-kuncinya dalam urutan menaik.

Interface Map memiliki 2 jenis tampilan lain. Jika map adalah variabel bertipe Map, maka metode :

map.values()
 
mengembalikan Collection yang berisi semua nilai yang disimpan dalam map. Nilai kembaliannya bukan Set karena suatu map bisa berisi nilai yang sama. Metode

map.entrySet()
 
mengembalikan Set yang berisi asosiasi (kunci dan nilainya) di dalam map. Informasi dalam kelas ini sama dengan informasi dalam map itu sendiri, akan tetapi Set yang dikembalikan menampilkan jenis informasi yang berbeda. Setiap elemen dalam set ini adalah objek bertipe Map.Entry (Kelas ini adalah kelas statik bertingkat, sehingga namanya memiliki tanda titik. Akan tetapi tetap bisa digunakan sebagaimana kelas-kelas lainnya).

Objek Map.Entry berisi hanya satu pasangan kunci dan nilai, dan memiliki metode getKey() dan getValue() untuk mengambil kunci dan nilainya. Ada juga metode setValue(nilai) untuk mengisi nilainya. Kita bisa menggunakan set ini untuk mencetak semua pasangan kunci dan nilainya, yang lebih efisien daripada menggunakan kunci kemudian mengambil kembali isinya dari dalam map seperti contoh di atas.
Sehingga kita bisa membuat fungsi yang sama dengan di atas dengan lebih efisien, yaitu

Set entri = map.entrySet();
Iterator entriIter = entri.iterator();
System.out.println("Map ini berisi asosiasi sebagai berikut:");
while (entriIter.hasNext()) {
    Map.Entry pasangan = (Map.Entry)entriIter.next();
    Object kunci = pasangan .getKey();  // Ambil kunci dari pasangan
    Object nilai = pasangan .getValue();  // Ambil nilainya
    System.out.println( "   (" + kunci + "," + nilai + ")" );
}
 
Map bukan satu-satunya tempat di mana tampilan bisa diambil. Misalnya, interface List memiliki sublist yang untuk melihat sebagian isi list. Metode

List subList(int indeksAwal, int indeksAkhir)
 
mengembalikan sebagian list yang terdiri dari elemen pada posisi antara indeksAwal hingga indeksAkhir (termasuk indeksAwal tapi tidak termasuk indeksAkhir.) Tampilan ini memungkinkan kita untuk melakukan operasi apapun seperti pada list biasa, akan tetapi sublist bukan list terpisah. Perubahan yang dilakukan pada sublist akan juga mempengaruhi list aslinya.

Begitu juga dengan set, kita bisa membuat tampilan yang merupakan subset dari suatu set. Jika set adalah suatu TreeSet, maka set.subSet(dariElemen, hinggaElemen) mengembalikan [code]Set yang berisi elemen-elemen set antara dariElemen hingga hinggaElemen (termasuk dariElemen tapi tidak termasuk hinggaElemen).

Misalnya, jika kata adalah suatu TreeSet di mana semua elemennya adalah String berisi huruf kecil, maka kata.subSet("m", "n") akan berisi semua elemen pada kata yang dimulai dari huruf m. Subset ini adalah tampilan yang merupakan bagian dari set aslinya. Artinya membuat subset tidak mengkopi elemen, dan perubahan pada subset (misalnya penambahan dan pengurangan elemen) juga mempengaruhi set aslinya.
Tampilan set.headSet(hinggaElemen) berisi semua elemen dari set yang kurang dari [code]hinggaElemen, dan set.tailSet(dariElemen) adalah tampilan yang berisi semua elemen yang lebih besar atau sama dengan dariElemen.

Kelas TreeMap memiliki tiga tampilan submap. Submap mirip dengan subset. Submat adalah Map yang berisi subset dari kunci dan nilai pada Map aslinya. Jika map suatu variabel bertipe TreeMap, maka map.subMap(dariKunci, hinggaKunci) mengembalikan tampilan yang berisi semua pasangan kunci/nilai dari map yang kuncinya ada di antara dariKunci dan hinggaKunci (termasuk dariKunci tapi tidak termasuk hinggaKunci).

Ada juga tampilan map.headMap(hinggaKunci) dan map.tailMap(dariKunci) seperti aturan pada subset.

Misalnya, bukuHitam adalah suatu TreeMap di mana kuncinya adalah nama dan nilainya adalah nomor telepon. Kita bisa mencetak semua entri pada bukuHitam yang namanya dimulai dengan "M" seperti berikut :

Map ems = bukuHitam.subMap("M","N");
 
// Submap ini berisi semua elemen di mana kuncinya lebih
// besar dari "M" dan kurang dari (tapi tidak termasuk) "N"
if (ems.isEmpty())
    System.out.println("Tidak ada elemen yang dimulai dengan M.");
else {
    Iterator iter = ems.entrySet().iterator();
    // Iterator ini akan menelusuri entri pada submap ems
    while (iter.hasNext()) {
        // Get the next entry and print its key and value.
        Map.Entry entri = iter.next();
        System.out.println( entri.getKey() + ": " + entri.getValue() );
    }
}
 
Subset dan submap mungkin menjadi cara terbaik untuk melakukan pencarian, sehingga kita bisa mencari elemen pada rentang nilai tertentu, bukan hanya pencarian satu nilai saja. Misalnya pada database disimpan jadwal yang disimpan dalam bentuk TreeMap di mana kuncinya adalah waktu, dan misalnya kita ingin mencari semua item yang terjadwal 1 Maret 2009. Kita hanya perlu membuat submap yang berisi semua kunci antara 00:00 1 Maret 2009 hingga 00:00 2 Maret 2009 kemudian mencetak isi submap tersebut. Tipe pencarian seperti ini disebut pencarian rentang (subrange query).

Struktur Data Map pada Java

Suatu array yang berisi N elemen bisa juga dilihat sebagai asosiasi (pemetaan) antara elemennya dengan bilangan 0, 1, ..., N-1 yang merupakan indeksnya. Jika i adalah salah satu bilangan ini, maka kita bisa mengambil elemen yang dipetakan oleh bilangan i, dan juga kita bisa meletakkan elemen baru pada posisi ke-i.

Suatu peta (map) adalah generalisasi dari array. Seperti array, map juga memiliki operasi untuk mengambil dan meletakkan elemen. Akan tetapi pada map, operasi ini tidak dilakukan pada bilangan 0, 1, ... N-1, akan tetapi pada sembarang Object.

Beberapa bahasa pemrograman menggunakan istilah array asosiatif (associative array) karena kesamaan perintah dengan array biasa. Pada bahasa pemrograman tersebut, kita bisa menuliskan A["joko"] yang digunakan untuk memetakan "joko" pada suatu elemen di dalam array.

Java tidak menggunakan perintah yang sama pada map, akan tetapi idenya serupa : Map adalah seperti array yang indeksnya adalah objek sembarang, bukan integer. Pada map, objek yang digunakan sebagai "indeks" disebut kunci (key). Objek yang ditunjuk oleh indeks tersebut disebut nilai (value).

Satu kunci hanya boleh menunjuk pada satu nilai, akan tetapi satu nilai bisa ditunjuk oleh beberapa kunci.
Dalam Java, map didefinisikan dalam interface java.util.Map, yang memiliki beberapa metode untuk bekerja dengan map. Jika map adalah variabel dengan tipe Map, maka berikut ini adalah beberapa metodenya :
  • map.get(kunci) -- mengembalikan Object yang ditunjuk oleh kunci. Jika map tidak memiliki nilai yang ditunjuk oleh kunci, maka nilai null akan dikembalikan. Tapi ingat juga bahwa mungkin saja kuncinya ada akan tetapi memang menunjuk pada nilai null. Menggunakan "map.get(kunci)" sama dengan perintah "A[kunci]" pada array A. (Akan tetapi pada map tidak ada pengecualian IndexOutOfBoundsException)
  • map.put(kunci, nilai) -- Mengisi map dengan pasangan kunci dan nilai. Kedua-dua kunci dan nilai bisa berupa objek apa saja. Jika map tersebut telah memiliki kunci maka nilai yang ditunjuk akan diganti dengan yang baru diberikan. Perintah ini mirip dengan "A[kunci] = nilai" pada array.
  • map.putAll(map2) -- jika map2 adalah map lain, maka perintah ini akan mengkopi semua isi pada map2 ke dalam map.
  • map.remove(kunci) -- Jika map memiliki kunci yang menunjuk pada suatu nilai, perintah ini akan menghapus kunci beserta nilai yang ditunjuknya, atau dengan kata lain menghapus pasangan kunci dan nilai pada map sekaligus.
  • map.containsKey(kunci) -- mengembalikan nilai boolean true jika map memiliki kunci yang merujuk pada suatu nilai
  • map.containsValue(nilai) -- mengembalikan nilai boolean true jika map memiliki nilai yang ditunjuk oleh kunci apapun.
  • map.size() -- mengembalikan int yang berisi jumlah pasangan asosiasi pada map.
  • map.isEmpty() -- mengembalikan boolean true jika map tidak berisi pasangan asosiasi apa-apa.
  • map.clear() -- menghapus semua pasangan asosiasi dalam map.
  • map.clear() -- menghapus semua pasangan asosiasi dalam map.
Metode put dan get jelas merupakan metode yang paling sering digunakan dalam map. Dalam banyak aplikasi, metode ini mungkin hanya metode ini yang kita butuhkan. Artinya, menggunakan map sama mudahnya dengan menggunakan array biasa.

Java memiliki dua kelas yang mengimplementasikan interface Map, yaitu : TreeMap dan HashMap.

Dalam TreeMap, pasangan kunci/nilai disimpan secara berurutan dalam pohon terurut, yaitu diurut berdasarkan kuncinya. Supaya bisa bekerja dengan benar, maka hanya objek yang bisa dibandingkan saja yang bisa digunakan sebagai kunci. Artinya kelas kunci harus berupa kelas yang mengimplementasikan interface Comparable, atau Comparator harus diberikan pada konstruktornya pada saat TreeMap dibuat.
HashMap tidak menyimpan pasangan kunci/nilai dalam urutan tertentu, sehingga tidak ada batasan objek apa yang bisa disimpan di dalamnya. Hampir semua operasi dapat berjalan lebih cepat pada HashMap dibandingkan dengan TreeMap.

Secara umum, lebih baik menggunakan HashMap kecuali kita butuh struktur data dalam urutan tertentu yang hanya bisa dilakukan dengan TreeMap. Atau dengan kata lain, jika kita hanya menggunakan perintah put dan get, gunakan HashMap.

Misalnya progrma direktori telefon, yaitu pada kelas BukuTelepon yang memiliki pasangan nama/nomor telepon. Kelas ini memiliki operasi tambahEntri(nama, nomor) dan ambilNomor(nama), di mana nama dan nomor bertipe String.

Dalam aplikasi pemrograman sebenarnya, kita tidak perlu lagi membuat kelas baru untuk mengimplementasikan BukuTelepon tersebut, artinya kita bisa langsung menggunakan Map. Akan tetapi menggunakan Map mungkin memiliki sedikit kerugian, karena kita dipaksa harus menggunakan Object bukan String.

Jika ini masalahnya, maka kita bisa membuat kelas baru yang menggunakan Map dalam implementasinya, seperti berikut :
import java.util.HashMap;
 
public class BukuTelepon {
 
    // Menyimpan data telepon
    private HashMap info = new HashMap();
 
    public void tambahEntri(String nama, String nomor) {
        // Menyimpan nomor telepon pada nama yang sesuai
        info.put(nama,nomor);
    }
 
    public String ambilNomor(String nama) {
        // Mengambil nomor telepon dari nama
        // Kembalikan null jika tidak ada nomor telepon untuk nama tsb
        return (String)info.get(nama);
    }
 
} // akhir kelas BukuTelepon
 
Dalam metode ambilNomor di atas, nilai kembalian dari info.get(nama) di-type-cast ke dalam String. Karena kembalian dari metode get() bertipe Object maka type cast menjadi penting sebelum nilainya bisa digunakan.

Dengan "membungkus" Map di dalam kelas BukuTelepon, kita menyembunyikan type-cast dalam implementasinya sehingga interaksi kelas ini dengan kelas lain yang menggunakannya menjadi lebih natural.

Selasa, 07 Mei 2013

Cara Membuat Hyperlink Pada Ms PowerPoint 2007


Hyperlink adalah suatu koneksi yang menghubungkan slidesatu dengan slide yang lain (seperti hyperlink ke custom show) atau ke slide dalam presentasi lain, alamat e-mail, halaman Web, atau file.
Anda dapat membuat hyperlink dari teks atau dari objek, seperti gambar, grafik, bentuk, atau WordArt.
Buat hyperlink:
Untuk slide dalam presentasi yang sama
Untuk slide dalam presentasi yang berbeda
Untuk alamat e-mail
Ke halaman atau file di Web
Untuk file baru
Untuk membuatnya anda dapat mengikuti langkah-langkah sebagai berikut ;
1. Buka program Ms PowerPoint
2. Buat Slide Baru ( terserah mau 2 atau 3 ), Tapi saya akan membuatnya 5 slide . ( Untuk lebih jelasnya liat gambar di bawah ini )
3. Kemudian anda tuliskan sebuah kata pada slide pertama , contoh ; Loncat ke slide 5.
Setelah itu blok kata tersebut , terus klik menu Insert ==> Hyperlink( lihat gambar )
 4. Atau anda bisa menggunakan cara langsung klik kanan pada teksnya ( Lihat gambar )
5. Setelah anda mengklik hyperlink , akan muncul tampilan seperti di bawah ini , anda klik saja Bookmark. . . .
6. Pilih slide 5 , Klik OK
Coba anda jalankan , dengan klik menu slide show ==> From Begining / F5