Senin, 26 Januari 2015

CONTOH PENGGUNAAN METHOD atau FUNGSI DALAM STRING dan ARRAY..



Saya akan membahas tentang fungsi yang biasa digunakan dalam program java..
apa sih method itu? Method itu adalah fungsi yang digunakan untuk memodularisasi program pemisah menjadi satu unit tersendiri. Berikut ini ada defini method dalam java:

[modifier1] tipe NamaKembalian namaMethod (parameter input)
{
Method body;
}

Ini dia beberapa fungsi yang digunakan dalam string:


1. length
Syntax: object.length;

Fungsi ini akan mengembalikan nilai total panjang string.

 var str = "Hello World";
 alert('Panjang string adalah ' + str.length);
       toLowerCase and toUpperCase
       Synatx: object.toLowerCase();

Fungsi ini sangat berguna jika ingin semua karakter dalam sebuah string di jadikan huruf kecil atau huruf besar. Contoh jika ingin membandingkan 2 buah string, namun tidak yakin apakah kedua string tersebut huruf besar atau kecil. Pada kasus seperti ini kita hanya perlu melakukan konversi ke huruf kecil atau huruf besar, maka kita bisa melakukan perbandingan tanpa ada masalah.

var str = 'Hello World';
var strL = str.toLowerCase();
var strU = str.toUpperCase();
if (str.toLowerCase() == 'hello world')

2. charAt
Syntax: object.charAt(index);

Dengan fungsi ini kita bisa mengambil sebuah karakter pada posisi tertentu dalam sebuah string. Jika ingin mengambil / membaca karakter per karakter dalam sebuah string bisa menggunakan fungsi charAt dan pengulangan. Lihat contoh:

var str = 'Hello World';
var c   = str.charAt(5);
for (i=0;i<str.length;i++){
 alert(str.charAt(i));
}

Menggabungkan string

kita bisa membuat sebuat string dari gabungan beberapa string secara bersamaan. Hal ini sangat berguna jika kita ingin membuat sebuah string dari hasil sebuah proses logika. Disini ada 2 operator yang bisa di gunakan, yaitu + dan +=. Contoh berikut ini bagaimana cara menggunakan kedua operator tersebut.

var str1 = 'This ' + 'is ' + 'a ' + 'demo!';
var str2 = 'Part 1';
str2 += ' and Part 2';
var str3 = 'Mixed ';
str3 += 'mode ' + 'is possible.';

3. indexOf
Syntax: object.indexOf(searchValue[,index]);

kita dapat menggunakan fungsi indexOf () untuk memeriksa apakah string atau karakter ada dalam string utama. kita dapat menggunakan hanya dengan parameter string saja. Dalam hal ini metode indexOf mengembalikan posisi di mana string ditemukan di dalam string utama. Jika tidak ada sub-string tersebut kemudian kembali dengan -1. Selain itu kita juga dapat menggunakan fungsi dengan 2 parameter. Dalam hal ini yang pertama adalah string seperti sebelumnya dan yang kedua adalah index yang memberitahu fungsi harus darimana memulai melakukan pencarian.

1 var str  = 'Hello World';
2 var pos  = str.indexOf('Wo');
3 var pos2 = str.indexOf('Te',10);

4. split
Syntax: object.split(separator);

Dengan split kita dapat membagi sebuah string ke bagian yang lebih kecil dan bagian-bagian terpisah akan dimuat ke dalam array. Sebagai contoh Anda dapat membagi kalimat menjadi kata-kata dengan menggunakan split dan karakter spasi sebagai pemisah.

var str  = 'Hello World';
var words = new Array();
words = str.split(' ');

biasanya split ini digunakan dalam pemisahan karakter pada autoreply sms gateway.

5. substr 
Syntax: object.substr(start[,length]);

Dengan fungsi substr() kita dapat memotong satu bagian dari sebuah string. Fungsi ini membutuhkan 2 parameter. Yang pertama mendefinisikan di mana kita ingin memulai memotong dan kedua menunjukkan berapa banyak karakter yang Anda ingin potong.

var str  = 'Hello World';
var str1 = str.substr(3,4); Â // lo W

6. substring
Syntax: object.substring(start,end);

Mirip dengan substr tetapi dalam hal ini parameter kedua bukan mendefinisikan panjang tetapi posisi terakhir yang akan dipotong.

var str  = 'Hello World';
var str1 = str.substr(3,4); Â // l

Method substring digunakan untuk mendapatkan bagian string tertentu dari sebuah string. contohnya :

Stringnya="lagi belajar"

jika kita ingin mengambil kata belajar, maka kita gunakan method substring seperti contoh dibawah ini :

Stringnya.substring(5,12);

maka, jika kita tampilkan hasilnya adalah belajar....

keterangan:
angka 5 dan 12 maksudnya adalah, kita mulai mengambil string pada string ke 5 dan berakhir pada string ke 12

contoh pemakaian pada java :

String mystr;
mystr=jTextField1.getText().substring(5, 12);
JOptionPane.showMessageDialog(rootPane, mystr);


Selanjutnya ini beberapa funsi dalam array:


1. Array.join()

Method Array .join() berfungsi untuk menggabungkan elemen array menjadi sebuah string. Sebuah argumen bisa diinputkan kedalam method ini yang akan berfungsi sebagai karakter ’pembatas’ untuk menyatukan array. Berikut adalah contoh penggunaan method join() dalam JavaScript:

var arr1 = [1,2,3,4,5,"a","b","c","d","e"];
console.log(arr1.join());         //hasil: 1,2,3,4,5,a,b,c,d,e
console.log(arr1.join("."));      //hasil: 1.2.3.4.5.a.b.c.d.e
console.log(arr1.join("|"));      //hasil: 1|2|3|4|5|a|b|c|d|e
console.log(arr1.join("_"));      //hasil: 1_2_3_4_5_a_b_c_d_e

Perhatikan bahwa jika argumen tidak ditulis, maka tanda koma ”,” akan digunakan sebagai pembatas string. Fungsi join() ini adalah kebalikan dari fungsi split() dari objek string.

2. Array.reverse()

Method Array.reverse() digunakan untuk membalikkan urutan dari elemen di dalam array. Method ini akan mengubah array asal. Berikut adalah contoh penggunaan method reverse():

var arr1 = [1,2,3,4,5,"a","b","c","d","e"];
console.log(arr1.toString());         //hasil: 1,2,3,4,5,a,b,c,d,e

arr1.reverse();
console.log(arr1.toString());         //hasil: e,d,c,b,a,5,4,3,2,1

3. Array.sort()

Method Array.sort() digunakan untuk mengurutkan elemen dari array. Jika method ini dipanggil tanpa argumen, elemen dari array akan diurutkan berdasarkan abjad. Jika elemen di dalam array bukan huruf, maka akan dikonversi sementara menjadi string, baru kemudian dilakukan proses pengurutan. Jika ditemukan elemen dengan nilai null atau undefined, akan di tempatkan pada urutan akhir.

Berikut adalah contoh penggunaan method sort() dalam array JavaScript:

var arr1 = ["zulkifli","andi","erik","joko","dina"];
arr1.sort();
console.log(arr1.toString());         //hasil: andi,dina,erik,joko,zulkifli

var arr2 = [3,5,2,8,,,1,31,22,44,33,11];
arr2.sort();
console.log(arr2.toString());         //hasil: 1,11,2,22,3,31,33,44,5,8,,

Dari contoh diatas terlihat bahwa method sort() tidak menghasilkan nilai yang seharusnya dalam pengurutan angka. Untuk hal ini, kita bisa menginput fungsi kedalam argumen method sort().

Fungsi yang diinput di dalam argumen method sort() akan memiliki 2 inputan untuk memutuskan elemen mana yang akan ditampilkan terlebih dahulu. Jika elemen pertama seharusnya ditampilkan terlebih dahulu, maka fungsi harus menghasilkan nilai kurang dari 0, dan apabila angka kedua harus tampil terlebih dahulu, maka fungsi harus mengembalikan nilai lebih besar dari 0.

Sebagai contoh, berikut adalah method sort() dengan argumen berupa fungsi untuk mengurutkan angka dalam elemen array.


var arr2 = [3,5,2,8,,,1,31,22,44,33,11];
arr2.sort(function(a,b) {return a-b;});
console.log(arr2.toString());             //hasil: 1,2,3,5,8,11,22,31,33,44,,

4. Array.concat()

Method Array.concat() berfungsi untuk ”penyambungan” array. Hasil akhir dari pemanggilan fungsi ini adalah array baru dengan penambahan dari method concat(). Elemen yang ditambahkan diinput sebagai argumen dari method concat(). Berikut adalah contohnya:

var arr1 = [1,2,3,4,"a","b","c","d"];
console.log(arr1.toString());         //hasil: 1,2,3,4,a,b,c,d

var arr2=arr1.concat(11,22,33,44);
console.log(arr2.toString());         //hasil: 1,2,3,4,a,b,c,d,11,22,33,44

5. Array.slice()

Method Array.slice() digunakan untuk ’memotong’ array menjadi array baru, atau menjadi ’sub-array’ dari array asal. Method slice() ini membutuhkan 2 buah argumen yang berisi posisi index awal dan akhir pemotongan.

Jika hanya diberikan 1 argumen, maka method ini akan mengembalikan array baru dimulai dari posisi argumen sampai dengan akhir array. Jika argumen bernilai negatif, maka perhitungan akan dimulai dari akhir array. Berikut adalah contoh penggunaan method array slice():

var arr1 = [1,2,3,4,"a","b","c","d"];

//slice dari index ke 2 sampai 4
var arr2 = arr1.slice(2,4)
console.log(arr2.toString());         //hasil: 3,4

//slice dari index ke 4 sampai akhir array
var arr3 = arr1.slice(4)
console.log(arr3.toString());         //hasil: a,b,c,d

//slice dari index ke 2 dari akhir array
var arr4 = arr1.slice(-2)
console.log(arr4.toString());         //hasil: c,d

//slice dari index ke 5 dari akhir array sampai
//index ke 2 dari akhir array
var arr5 = arr1.slice(-5,-2)
console.log(arr5.toString());         //hasil: 4,a,b

Dari contoh kode yang kita lakukan, terlihat bahwa index terakhir tidak termasuk ke dalam array baru. arr1.slice(2,4) akan mengembalikan elemen array dari index ke-2, ke-3, namun tidak ke-4.

6. Array.splice()

Walaupun memiliki nama method yang mirip dengan slice(), method splice() sepenuhnya berbeda. Method splice() adalah method ’serba-bisa’ yang bisa digunakan untuk memotong array, menambahkan elemen array, bahkan melakukan keduanya sekaligus.

Tidak seperti method slice() dan concat(), pemanggilan method ini akan mengubah array asal.

Jika hanya diberikan satu buah argumen, method splice() akan berfungsi ’menghapus’ array asal mulai dari index yang diberikan, dan mengembalikan nilai array yang ’dihapus’. Berikut contohnya:

var arr1 = [1,2,3,4,"a","b","c","d"];
console.log(arr1.toString());     // hasil: 1,2,3,4,a,b,c,d

//splice dari index ke 4
var arr2 = arr1.splice(4)

console.log(arr1.toString());     // hasil: 1,2,3,4
console.log(arr2.toString());     // hasil: a,b,c,d

Jika method splice() memiliki 2 argumen, maka argumen kedua berfungsi untuk menentukan seberapa banyak elemen yang akan di ’hapus’. Jika elemen yang dihapus berada ditengah-tengan array asal, maka array asal akan ’tersambung’. Berikut contohnya:

var arr1 = [1,2,3,4,"a","b","c","d"];
console.log(arr1.toString());     // hasil: 1,2,3,4,a,b,c,d

//hapus 3 elemen mulai dari index ke 3
var arr2 = arr1.splice(3,3)

console.log(arr1.toString());     // hasil: 1,2,3,c,d
console.log(arr2.toString());     // hasil: 4,a,b

Method splice() mendukung argumen ke 3, 4, dan seterusnya. Jika disertakan, argumen ini akan berfungsi sebagai elemen yang akan ditambahkan ke array asal dimulai dari posisi argumen pertama. Berikut adalah contoh kode program splice() dengan 3 atau lebih argumen:

var arr1 = [1,2,3,4,"a","b","c","d"];
console.log(arr1.toString());     // hasil: 1,2,3,4,a,b,c,d

// masukkan elemen "x","y","z"
// mulai dari elemen ke 4
var arr2 = arr1.splice(4,0,"x","y","z")

console.log(arr1.toString());     // hasil: 1,2,3,4,x,y,z,a,b,c,d
console.log(arr2.toString());     // hasil: [] (array kosong)

var arr1 = [1,2,3,4,"a","b","c","d"];
console.log(arr1.toString());     // hasil: 1,2,3,4,a,b,c,d

// hapus 4 elemen mulai dari elemen ke 4
// masukkan elemen "x","y","z" pada posisi penghapusan
var arr2 = arr1.splice(4,4,"x","y","z")

console.log(arr1.toString());     // hasil: 1,2,3,4,x,y,z
console.log(arr2.toString());     // hasil: a,b,c,d

Method splice() ini mungkin sedikit sulit dipahami jika dibandingkan dengan method objek array lainnya, namun bisa bermanfaat dalam pembuatan program.


Dalam tutorial kali ini, kita telah membahas 12 method dasar pada string dan array dalam JavaScript. Namun tipe data Array JavaScript masih memiliki method lain yang dikenal dengan ECMAScript 5 array method. Disebut dengan ECMAScript 5 array method karena method ini ditambahkan pada versi ECMAScript 5. Method tersebut contohnya: forEach(), map(), dan filter(). Karena method ini sedikit rumit (hampir setiap argumennya adalah fungsi), maka saya akan ’melompati’ sementara method ini. hehe :-D sampai jumpa.. semoga bermanfaat yaaa..

Sabtu, 17 Januari 2015

Algoritma String, Array dan Implementasinya pada Java



Hai sobat blogger. sekarang saya mau belajar tentang Algoritma yang digunakan pada string dan array nih.. apa aja sih macamnya? dan bagaaimana sih contoh penggunaanya dalam java?
okee... mari kita bahas satu persatu ya..

Algoritma pencarian string atau sering disebut juga pencocokan string adalah algoritma untuk melakukan pencarian semua kemunculan string pendek pattern[0..n-1] yang disebut pattern di string yang lebih panjang teks[0..m-1] yang disebut teks.

Pencocokkan string merupakan permasalahan paling sederhana dari semua permasalahan string lainnya, dan dianggap sebagai bagian dari pemrosesan data, pengkompresian data, analisis leksikal, dan temu balik informasi. Teknik untuk menyelesaikan permasalahan pencocokkan string biasanya akan menghasilkan implikasi langsung ke aplikasi string lainnya.

Contoh algoritma pencocokan string
Algoritma-algoritma pencocokkan string dapat diklasifikasikan menjadi tiga bagian menurut arah pencariannya.
Tiga kategori itu adalah :

1. Dari arah yang paling alami, dari kiri ke kanan, yang merupakan arah untuk membaca, algoritma yang termasuk kategori ini adalah:

  • Algoritma Brute Force
  • Algoritma dari Morris dan Pratt, yang kemudian dikembangkan oleh Knuth, Morris, dan Pratt

2. Dari kanan ke kiri, arah yang biasanya menghasilkan hasil terbaik secara praktikal, contohnya adalah:

  • Algoritma dari Boyer dan Moore, yang kemudian banyak dikembangkan, menjadi Algoritma turbo Boyer-Moore, Algoritma tuned Boyer-Moore, dan Algoritma Zhu-Takaoka;

3. Dan kategori terakhir, dari arah yang ditentukan secara spesifik oleh algoritma tersebut, arah ini menghasilkan hasil terbaik secara teoritis, algoritma yang termasuk kategori ini adalah:

  • Algoritma Colussi
  • Algoritma Crochemore-Perrin
  • salah satunya algoritma SUSAN

A. Algoritma brute force dalam pencarian string.
Algoritma brute force merupakan algoritma pencocokan string yang ditulis tanpa memikirkan peningkatan performa. Algoritma ini sangat jarang dipakai dalam praktik, namun berguna dalam studi pembanding dan studi-studi lainnya.

Cara kerja:
Secara sistematis, langkah-langkah yang dilakukan algoritma brute force pada saat mencocokkan string adalah:

1. Algoritma brute force mulai mencocokkan pattern pada awal teks.
2. Dari kiri ke kanan, algoritma ini akan mencocokkan karakter per karakter pattern dengan karakter di teks yang bersesuaian, sampai salah satu kondisi berikut dipenuhi:

  • Karakter di pattern dan di teks yang dibandingkan tidak cocok (mismatch).
  • Semua karakter di pattern cocok. Kemudian algoritma akan memberitahukan penemuan di posisi ini.

3. Algoritma kemudian terus menggeser pattern sebesar satu ke kanan, dan mengulangi langkah ke-2 sampai pattern berada di ujung teks.

Berikut adalah Algoritma brute force yang sedang bekerja mencari string:

Pseudocode algoritma brute force ini:

procedure BruteForceSearch(
        input m, n : integer,
        input P : array[0..n-1] of char,
        input T : array[0..m-1] of char,
        output ketemu : array[0..m-1] of boolean
       )

Deklarasi:
       i, j: integer 

Algoritma:
        for (i:=0 to  m-n) do
               j:=0
               while (j < n and T[i+j] = P[j]) do    
                        j:=j+1
               endwhile
               if(j >= n) then
                         ketemu[i]:=true;
               endif 
        endfor

B. Algoritma Boyer-Moroe
Algoritma Boyer-Moore adalah salah satu algoritma pencarian string, dipublikasikan oleh Robert S. Boyer, dan J. Strother Moore pada tahun 1977.

Algoritma ini dianggap sebagai algoritma yang paling efisien pada aplikasi umum. Tidak seperti algoritma pencarian string yang ditemukan sebelumnya, algoritma Boyer-Moore mulai mencocokkan karakter dari sebelah kanan pattern. Ide di balik algoritma ini adalah bahwa dengan memulai pencocokan karakter dari kanan, dan bukan dari kiri, maka akan lebih banyak informasi yang didapat.

Cara kerja:
Misalnya ada sebuah usaha pencocokan yang terjadi pada teks[i..i+n-1], dan anggap ketidakcocokan pertama terjadi di antara teks[i+j] dan pattern[j], dengan 0 < j < n. Berarti, teks[i+j+1..i+n-1] = pattern[j+1..n-1] dan  a=teks[i+j] tidak sama dengan b=pattern[j] . Jika u adalah akhiran dari pattern sebelum b dan v adalah sebuah awalan dari pattern, maka penggeseran-penggeseran yang mungkin adalah:

  1.  Penggeseran good-suffix yang terdiri dari menyejajarkan potongan teks[i+j+1..i+n-1] = pattern[j+1..n-1] dengan kemunculannya paling kanan di pattern yang didahului oleh karakter yang berbeda dengan pattern[j]. Jika tidak ada potongan seperti itu, maka algoritma akan menyejajarkan akhiran v dari teks[i+j+1..i+n-1] dengan awalan dari pattern yang sama.
  2.  Penggeseran bad-character yang terdiri dari menyejajarkan teks[i+j] dengan kemunculan paling kanan karakter tersebut di pattern. Bila karakter tersebut tidak ada di pattern, maka pattern akan disejajarkan dengan teks[i+n+1].

Secara sistematis, langkah-langkah yang dilakukan algoritma Boyer-Moore pada saat mencocokkan string adalah:

1. Algoritma Boyer-Moore mulai mencocokkan pattern pada awal teks.
2. Dari kanan ke kiri, algoritma ini akan mencocokkan karakter per karakter pattern dengan karakter di teks yang bersesuaian, sampai salah satu kondisi berikut dipenuhi:
    a. Karakter di pattern dan di teks yang dibandingkan tidak cocok (mismatch).
    b. Semua karakter di pattern cocok. Kemudian algoritma akan memberitahukan penemuan di posisi ini.
3. Algoritma kemudian menggeser pattern dengan memaksimalkan nilai penggeseran good-suffix dan penggeseran bad-character, lalu mengulangi langkah 2 sampai pattern berada di ujung teks.

Berikut adalah pseudocode algoritma Boyer-Moore pada fase pra-pencarian:

procedure preBmBc(
    input P : array[0..n-1] of char,
    input n : integer,
    input/output bmBc : array[0..n-1] of integer
)
Deklarasi:
  i: integer

Algoritma:
  for (i := 0 to ASIZE-1)
     bmBc[i] := m;
  endfor
  for (i := 0 to m - 2)
     bmBc[P[i]] := m - i - 1;
  endfor
procedure preSuffixes(
    input P : array[0..n-1] of char,
    input n : integer,
    input/output suff : array[0..n-1] of integer
)

Deklarasi:
  f, g, i: integer

Algoritma:
  suff[n - 1] := n;
  g := n - 1;
  for (i := n - 2 downto 0) {
     if (i > g and (suff[i + n - 1 - f] < i - g))
        suff[i] := suff[i + n - 1 - f];
     else 
        if (i < g)
           g := i;
        endif
        f := i;
        while (g >= 0 and P[g] = P[g + n - 1 - f])
           --g;
        endwhile
        suff[i] = f - g;
     endif
  endfor
procedure preBmGs(
    input P : array[0..n-1] of char,
    input n : integer,
    input/output bmBc : array[0..n-1] of integer
)
Deklarasi:
  i, j: integer
  suff: array [0..RuangAlpabet] of integer

  preSuffixes(x, n, suff);

  for (i := 0 to m-1)
     bmGs[i] := n
  endfor
  j := 0
  for (i := n - 1 downto 0)
     if (suff[i] = i + 1)
        for (j:=j to n - 2 - i)
           if (bmGs[j] = n)
              bmGs[j] := n - 1 - i
           endif
        endfor
     endif
  endfor 
  for (i = 0 to n - 2)
     bmGs[n - 1 - suff[i]] := n - 1 - i;
  endfor

Dan berikut adalah pseudocode algoritma Boyer-Moore pada fase pencarian:

procedure BoyerMooreSearch(
    input m, n : integer,
    input P : array[0..n-1] of char,
    input T : array[0..m-1] of char,
    output ketemu : array[0..m-1] of boolean
)

Deklarasi:
i, j, shift, bmBcShift, bmGsShift: integer 
BmBc : array[0..255] of interger
BmGs : array[0..n-1] of interger

Algoritma:
preBmBc(n, P, BmBc) 
preBmGs(n, P, BmGs) 
i:=0
while (i<= m-n) do
    j:=n-1
    while (j >=0 n and T[i+j] = P[j]) do 
       j:=j-1
    endwhile
    if(j < 0) then
       ketemu[i]:=true;
    endif
    bmBcShift:= BmBc[chartoint(T[i+j])]-n+j+1
    bmGsShift:= BmGs[j]
    shift:= max(bmBcShift, bmGsShift)
    i:= i+shift

C. Algoritma Divide and Conquer
Algoritma Divide and Conquer merupakan algoritma yang sangat populer di dunia Ilmu Komputer. Divide and Conquer merupakan algoritma yang berprinsip memecah-mecah permasalahan yang terlalu besar menjadi beberapa bagian kecil sehingga lebih mudah untuk diselesaikan.

Langkah-langkah umum algoritma Divide and Conquer :

  • Divide : Membagi masalah menjadi beberapa upa-masalah yang memiliki kemiripan dengan masalah semula namun berukuran lebih kecil ( idealnya berukuran hampir sama ).
  • Conquer : Memecahkan ( menyelesaikan ) masing-masing upa-masalah ( secara rekursif ).
  • Combine : Menggabungkan solusi masing-masing upa-masalah sehingga membentuk solusi masalah semula.


Objek masalah yang di bagi adalah masukan (input) atau instances yang berukuran n: tabel (larik), matriks, dan sebagainya, bergantung pada masalahnya. Tiap-tiap rupa-masalah mempunyai karakteristik yang sama (the same type) dengan karakteristik masalah asal, sehingga metode Divide and Conquer lebih natural diungkapkan dalam skema rekursif.
Sesuai dengan karakteristik pembagian dan pemecahan masalah tersebut, maka algoritma ini dapat berjalan baik pada persoalan yang bertipe rekursif ( perulangan dengan memanggil dirinya sendiri ). Dengan demikian, algoritma ini dapat diimplementasikan dengan cara iteratif ( perulangan biasa ), karena pada prinsipnya iteratif hampir sama dengan rekursif.

Salah satu penggunaan algoritma ini yang paling populer adalah dalam hal pengolahan data yang bertipe array ( elemen larik ). Mengapa ? Karena pengolahan array pada umumnya selalu menggunakan prinsip rekursif atau iteratif. Penggunaan secara spesifik adalah untuk mencari nilai minimal dan maksimal serta untuk mengurutkan elemen array. Dalam hal pengurutan ini ada empat macam algoritma pengurutan yang berdasar pada algoritma Divide and Conquer, yaitu merge sort, insert sort, quick sort, dan selection sort. Merge sort dan Quick sort mempunyai kompleksitas algoritma O(n ²log n). Hal ini lebih baik jika dibandingkan dengan pengurutan biasa dengan menggunakan algoritma brute force.

Contoh penerapannya :
Pemecahan Masalah Convex Hull dengan Algoritma Divide and Conquer, hal ini dapat dipandang
sebagai generalisasi dari algoritma pengurutan merge sort. Berikut ini merupakan garis besar gambaran dari algoritmanya:

  1. Pertama-tama lakukan pengurutan terhadap titik-titik dari himpunan S yang diberikan berdasarkan koordinat absis-X, dengan kompleksitas waktu O(n log n).
  2. Jika |S| ≤ 3, maka lakukan pencarian convex hull secara brute-force dengan kompleksitas waktu O(1). (Basis).
  3. Jika tidak, partisi himpunan titik-titik pada S menjadi 2 buah himpunan A dan B, dimana A terdiri dari setengah jumlah dari |S| dan titik dengan koordinat absix-X yang terendah dan B terdiri dari setengah dari jumlah |S| dan titik dengan koordinat absis-X terbesar.
  4. Secara rekursif lakukan penghitungan terhadap HA = conv(A) dan HB = conv(B).
  5. Lakukan penggabungan (merge) terhadap kedua hull tersebut menjadi convex hull, H, dengan menghitung dan mencari upper dan lower tangents untuk HA dan HB dengan mengabaikan semua titik yang berada diantara dua buah tangen ini.

Pada algoritma di atas, dapat dilihat bahwa terdapat prosedur untuk mencari lower tangen dan upper tangen. Algoritmanya merupakan suatu algoritma berjalan yang biasa. Pada kasus ini, a diinisialisasi sebagai titik paling kanan dari HA dan b merupakan titik paling kiri dari HB. Jika pasangan ab belum merupakan lower tangen untuk HA dan HB , maka “nailkkan” a menjadi suksesor dari a dan “turunkan” b menjadi predesesor dari b, sesuai dengan kaidah arah jarum jam.

Berikut adalah gambaran umum dalam pencarian lower tangen dari HA dan HB : LowerTangen(HA, HB):

  • Misalkan a merupakan titik terkanan dari HA
  • Misalkan b merupakan titik terkanan dari HB
  • While (ab bukan merupakan lower tangen dari HA dan HB)do - While(ab bukan merupakan lower tangen dari HA) do a -> a.predesesor - While(ab bukan merupakan lower tangen dari HA) do b-> b.suksesor
  • Return ab.

Algoritma Divide and Conquer merupakan salah satu solusi dalam penyelesaian masalah convex hull. Algoritma ini ternyata memiliki kompleksitas waktu yang cukup kecil dan efektif dalam menyelesaikan permasalahan ini (jika dibandingkan algoritma lain). Selain itu juga, algoritma ini dapat digeneralisasi untuk permasalahan convex hull yang berdimensi lebih dari 3.

Contoh kasus
Persoalan : Misalnya diketahui table A yang berukuran n elemen sudah berisi nilai integer. Kita ingin menentukan nilai minimum dan nilai maksimum sekaligus di dalam table tersebut.

Misalkan tabel A berisi elemen-elemen sebagai berikut :
3-10-20-5-17-1-31-2-19

Lalu algoritma melakukan divide seperti berikut :
3-10-20-5 & 17-1-31-2-19

Lalu algoritma melakukan solve seperti berikut :
dari 3-10-19-5 diketahui min=3;maks=20 , dan dari 17-1-31-2-20 diketahui min=1;maks=20.

Setelah melakukan solve, algoritma kemudian menggabungkan kedua data tersebut dan menentukan nilai min dan maks berdasarkan dari kedua data yang didapat, sehingga didapatlah min=1 maks=20.

Ilustrasi dari contoh kasus diatas bisa dilihat seperti gambar dibawah ini :


Berikut adalah sourcecode:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Random;

public class DivideConquer
{
        public DivideConquer()
        {
                System.out.println("Divide and Conquer: maximum subarray");
               

                System.out.println("Enter number of elements in the array");
                int array_elements = 2;
                try
                {
                        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
                        array_elements = Integer.parseInt(reader.readLine());
                }
                catch (IOException e)
                {
                        e.printStackTrace();
                }

                if (array_elements < 2)
                {
                        System.out.println("Number of elements in the array should be greater or equal 2");
                }
                else
                {
                        Random random = new Random();

                        int[] A = new int[array_elements];

                        for (int i = 0; i < A.length; i++)
                                A[i] = random.nextInt(1000) - 500;

                        System.out.println("Original array");
                        for (int i : A)
                        {
                                System.out.print(String.format("%5d", i));
                        }
                        System.out.println();

                        int[] result =  find_maximum_subarray(A, 0, A.length-1);

                        System.out.println("Maximum sub-array");
                        System.out.println("Low " + result [0]);
                        System.out.println("High " + result [1]);
                        System.out.println("Sum " + result [2]);
                }
        }
       
        private int[] find_maximum_subarray(int[] A, int low, int high)
        {
                if( high == low)
                {
                        int[] result = {low, high, A[low]}; //base case: only one element
                        return result;
                }
                else
                {
                        int mid = (low + high) /2;
                        
                        int[] result1 = find_maximum_subarray (A, low, mid);
                        int[] result2 = find_maximum_subarray (A, mid+1, high);
                        int[] result3 = find_max_crossing_subarray(A, low, mid, high);
                        
                        if( result1[2] >= result2[2] && result1[2] >= result3[2] )
                        {
                                return result1;
                        }
                        else if (result2[2] >= result1[2] && result2[2] >= result3[2])
                        {
                                return result2;
                        }
                        else
                        {
                                return result3;
                        }
                }
        }
       
        private int[] find_max_crossing_subarray(int[] A, int low, int mid, int high)
        {
                int left_sum = Integer.MIN_VALUE;
               
                int sum = 0;
               
                int max_left = -1;
                int max_right = -1;
               
                for(int i = mid; i > low; i--)
                {
                        sum += A[i];
                       
                        if (sum > left_sum)
                        {
                                left_sum = sum;
                                max_left = i;
                        }
                }
               
                int right_sum = Integer.MIN_VALUE;
               
                sum = 0;
               
                for(int j = mid+1; j < high; j++)
                {
                        sum += A[j];
                       
                        if (sum > right_sum)
                        {
                                right_sum = sum;
                                max_left = j;
                        }
                }
               
               
                int[] result =  {max_left, max_right, left_sum + right_sum};
                return result;
        }
}



okeee Terimakasih sudah membaca blog saya,, semoga bermanfaat ya..
Terimakasi :-D

Rabu, 14 Januari 2015

ALGORITMA SORTING & IMPLEMENTASI DI JAVA


Haii sobat bloger.. sekarang saya akan megulas tentang 3 macam Algoritma sorting..
dan meng-implementasikannya..
Apa sih sorting itu? Awalnya saya juga binggung maksud dari sorting atau pengurutan. Setelah browsing-browsing dan dapat materi diperkuliahan akhirnya saya tau apa yang dimaksud dengan sorting itu....
Sorting adalah proses menyusun elemen – elemen dengan tata urut tertentu dan proses tersebut terimplementasi dalam bermacam aplikasi. Kita ambil contoh pada aplikasi perbankan. Aplikasi tersebut mampu menampilkan daftar account yang aktif. Hampir seluruh pengguna pada sistem akan memilih tampilan daftar berurutan secara ascending demi kenyamanan dalam penelusuran data.
Dalam artian sorting digunakan untuk mengurutkan sesuatu ( misalnya : kata, buku telepon , dll ). Sorting yang kita terapkan menggunakan tipe data array agar pemahaman serta pengimplementasiannya lebih mudah. Pada umumnya terdapat dua jenis pengurutan :
- Ascending (Naik).
- Descending (Turun).

Contoh :
Data  : Array [1..6] of Byte = (22, 10, 15, 3, 8, 2);
Data Acak : 22 10 15 3 8 2
Terurut Ascending : 2 3 8 10 15 22
Terurut Descending : 22 15 10 8 3 2

Untuk melakukan proses pengurutan tersebut dapat digunakan berbagai macam cara/metode:
Saya akan bahas tentang 3 metode yaitu : Insertion sort, Quick sort, dan Linear search.

1. INSERTION SORT
Insertion sort adalah contoh dari algoritma yang dapat melakukan pengurutan data secar tepat,cepat dan akurat.Prinsip dasar dari Insertion sort adalah mengurutkan data yang acak baik dari nilai terbesar ke yang kecil maupun sebaliknya dari yang terkecil ke yang terbesar dengan cara mencari nilai yang diinginkan dan ditukar dengan tempat yang paling kiri atau kanan sesuai dengan perintah sort.
Algoritma insertion sort pada dasarnya memilah data yang akan diurutkan menjadi dua bagian, yang belum diurutkan (meja pertama), dan yang telah diurutkan (meja kedua). Elemen pertama yang diambil dari bagian array yang belum diurutkan dan kemudian diletakkan pada posisinya sesuai dengan bagian lain dari array yang telah diurutkan. langkah ini dilakukan secara berulang hingga tidak ada lagi elemen yang tersisa pada bagian array yang belum diurutkan. Pola dari Insertion Sort menggurutkan n atau 2 elemen dari terdepan dst. Untuk lengkapnya disini.

Pengertian:
Sorting = Pengurutan
Sorted = Terurut menurut kaidah / aturan tertentu
Data pada umumnya disajikan dalam bentuk sorted.

Contoh :
Nama di buku telephone
Kata-kata dalam kamus
File-file di dalam sebuah directory
Indeks sebuah buku
Data mutasi rekening tabungan
CD di toko music

Bayangkan jika diatas tidak terurut….! OMEGATT !

Gambar untuk Insertion Sort:



Insertion Sort :Algoritma

(algoritma ditulis dengan menggunakan bahasa java)
Ini contohnya:

public static void insertionSort (int[] a)
{

for (int ii = 1; ii < a.length; ii++) {

pengambilan elemen pertama dalam unsorted list
int jj = ii;

while (( jj > 0) && (a[jj] < a[jj - 1]))
{
Menyisipkan ke dalam sorted list
int temp = a[jj];
a[jj] = a[jj - 1];
a[jj - 1] = temp;
jj--;
}}
Algoritma Insertion Sort - ascending
Untuk pengurutan secara descending,hanya perlu mengganti pada baris ke 4 dengan perintah sebagai berikut :
while (( jj > 0) && (a[jj] > a[jj – 1]))


2.QUICK SORT
Quick Sort adalah algoritma yang dijalankan sebagai akibat dari terlalu banyaknyadaftar yang diurutkan, dengan menghasilkan lebih banyak daftar yang diurutkan sebagai output. Algoritma merge ini disesuaikan untuk mesin drive tape. Penggunaannya dalam akses memori acak besar yang terkait telah menurun, karena banyak aplikasi algoritma merge yang mempunyai alternatif lebih cepat ketika kamu memiliki akses memori acak yang menjaga semua data. Hal ini disebabkan algoritma ini membutuhkan setidaknya ruang atau memori dua kali lebih besar karena dilakukan secara rekursif dan memakai dua tabel.
Untuk lebih lengkapnya kalian bisa buka disini.

Gambar untuk Quick sort:



 Contoh kodingnya:


ini hasilnya:



3. LINEAR SEARCH
Algoritma ini mencari elemen berdasarkan suatu kunci (key), yang berupa angka atau karakter yang diinginkan. Cara kerjanya dengan mencocokkan tiap-tiap elemen dengan kunci tersebut. Bila ditemukan, maka method akan mengembalikan indeks dari elemen itu, sedangkan bila tidak ditemukan, maka method akan mengembalikan balikan nilai integer -1.
Lebih lengkapnya baca disini.

Ini gambarnya:



Ini contoh nya:

import javax.swing.*;
public class LinearSearch{
     public static void main(String[]args){
 
    int[]data={30,20,50,70,10,60,20};
    boolean a=false;
    String input=JOptionPane.showInputDialog("Data yang dicari");
    int cari=Integer.parseInt(input);
     
    for(int i=0;i<data.length;i++){
       if(data[i]==cari){
        System.out.println(cari+" merupakan data ke : "+(i+1));
        a=true;
                }
    }
    if(a!=true){
        System.out.println("Maaf "+cari+" tidak ditemukan");
        }
    System.exit(0);
    }
}

OUPUTnya seperti ini:



Nahhh.. itu dia tentang 3 algoritma sorting yang bisa saya jelaskan.. semoga bermanfaat yaa.. ^.^




Jumat, 09 Januari 2015

MEMBAHAS TENTANG CONSOL I/O ??


Wah.. Apasih Consol I/O itu.. ini adalah sesuatu yang baru saya dengar..
Ternyata saya belum ada apa-apanya ya.. Bahkan ilmunya masih "CETHEK".
Ya terang saja saya dari SMA yang jauh dari hiruk-pikuk ilmu komputer.... hehe tapi gak masalah,
Ayo kita beljar bareng di Blog sederhana saya ini.. ^_^

 Kita bahaS dulu Pengertian I/O Stream:

 I/O  adalah singkatan dari Input / Output dan mengacu pada transfer data ke atau dari aplikasi.
Stream sendiri merupakan  Keadaan dari sebuah file atau sebuah device yang memungkinkan rangkaian item dapat dibaca atau ditulis.

Stream didefinisikan sebagai sequence data baik dari sumber data atau tujuan data. Pada Java I/O stream terdapat dua buah stream yang digunakan yaitu : stream karakter dan stream byte.
Sesuai dengan namanya, strem byte digunakan untuk menyimpan informasi data dalam bentuk byte. Sedangkan stream karakter digunakan untuk proses I/O yang melibatkan data- data dalam bentuk karakter.
Stream karakter menggunakan karakter Unicode. Dalam Java, stream didefinisikan dengan menggunakan empat kelas abstrak yaitu:  InputStream, OutputStream, Reader, Writer.

InputSream dan OutputStream merupakan kelas abstrak yang dirancang sebagai kelas induk untuk kelas – kelas yang termasuk dalam kategori stream byte. Sedangkan Reader dan Writer merupakan kelas abstrak yang akan diturunkan menjadi kelas baru dalam kategori stream karakter.
Melalui proses pewarisan (inheritance), semua kelas yang diturunkan dari kelas InputStream dan Reader memiliki method read() untuk melakukan pembacaan data. Sedangkan kelas yang diturunkan dari kelas OutputStream dan Writer memiliki method write() yang digunakan untuk melakukan penulisan data.


  • Input atau Stream Sumber

- Dari stream ini dapat membaca
- Superclass dari semua input streams:
* Class InputStream
* Class Reader


  • Output

- Kita dapat menulis pada stream ini
- Class root dari stream ini:
* Class OutputStream
* Class Writer


  • Overview I/O 

         1. Konsep Stream
            Stream adalah suatu abstraksi untuk data input dan output.
            Tidak peduli dari mana input berasal atau kemana output akan pergi
 


Package java.io
• Package java.io berisi kelas yang berhubungan dengan I/O di Java
• Dibagi menjadi beberapa kelas
– Reader/Writer dan turunannya
– InputStream/OutputStream dan turunannya
– I/O Network (socket TCP/IP)
– Exception
   
         2. Kelas Abstrak pada java.io
             Terdapat 4 kelas Abstrak Dasar:
             – Reader
             – Writer
             – InputStream
             – OutputStream
• Reader dan Writer digunakan untuk data Teks
• InputStream dan OutputStream digunakan untuk data biner

         3. Reader/Writer
             Kelas Reader/Writer bekerja pada stream teks (bahasa apapun)
             Disebut juga character stream
             Menangani konversi teks Unicode secara otomatis
             Jangan dipertukarkan dengan InputStream/OutputStream secara sembarangan
             Hasilnya bisa error

Ini dia Diagram kelas Reader dan turunannya:



Ini Diagram kelas Writer dan turunannya:


             Kelas InputStream/OutputStream
             • InputStream dan OutputStream digunakan untuk mengakses informasi non teks (biner)
               – disebut juga sebagai byte stream
               – COntoh data biner: File EXE, file GIF

Diagram Kelas InputStream dan turunannya:


Diagram Kelas OutputStream dan turunannya:




         4. Input dan Output file
             Gunakan FileInputStream dan FileOutputStream untuk membaca/menulis file non teks
             Gunakan FileReader/FileWriter untuk file teks

           

• InputStream/OutputStream Tidak menangani konversi teks Unicode secara otomatis

  • Contoh Membuka file untuk dibaca

         >cara untuk membuka file (untuk dibaca):
           FileInputStream s = new
           FileInputStream(“test.dat”);

         >Cara untuk membaca satu byte: int a = s.read()

         >Tersedia juga method untuk membaca array of byte

         >Prototype read adalah : int read()
           – Perlu dicast ke byte untuk membaca sebagai byte
           – Memakai int supaya cukup merepresentasikan -1


  • Contoh Membuka file untuk ditulis

         >Cara untuk membuka file (untuk ditulisi):
           FileOutputStream out = new
           FileOutputStream(“test.out”);

         >Intruksi untuk menulis satu byte:
           – Out.write(‘a’)

         >Tersedia juga method untuk menulis array of byte


Memakai FileReader/FileWriter
• Sama seperti contoh sebelumnya
– Ganti nama kelas FileInputStream
   dengan FileReader dan FileOutputStream
   dengan FileWriter
– Tetap gunakan read/write

• Perhatikan bahwa
  – Nilai kembalian


         5. Wrapper
             Stream dapat dikomposisi atau difilter atau dibungkus untuk menghasilkan stream yang lebih                kompleks

            • Konsep ini mirip dengan pipe di Unix/Windows

            • Contoh:
              – BufferedReader yang menyediakan readLine()
              – PipedWriter/PipedReader untuk mempipe suatu stream
              – PrintStream/PrintWriter untuk menulis ke stream dengan mudah

Contoh Wrapper: BufferedReader
• Perhatikan potongan kode berikut:

  BufferedReader br = new
  BufferedReader(new
  FileReader(“hello.txt”));
  //membaca 1 baris
  String teks = br.readLine();

• BufferedReader membungkus (wraps) FileReader untuk menyediakan method readLine()

Contoh Wrapper: PrintWriter
• Perhatikan potongan kode berikut:

  PrintWriter pr = new PrintWriter(new FileWriter(“hello.txt”)); //Menulis 1 baris pr.println(“Hello “);

• PrintWriter membungkus (wraps) FileWriter untuk menyediakan method print(), println() untuk           semua tipe data dasar


Membaca dari Console [1]
• Java menyediakan System.in yang class-nya adalah InputStream

• Membaca teks dari console

• Untuk membaca teks, perlu di-wrap dengan BufferedReader

• Tapi BufferedReader hanya bisa mewrap suatu class turunan Reader

• InputStream perlu di-wrap dengan InputStreamReader

Membaca dari console [2]
• Buat BufferedReader yangmembungkus InputStreamReader yang membungkus System.in
BufferedReader br = new BufferedReader(new
InputStreamReader(System.in))

• Untuk membaca:
String s = br.readLine();

• Untuk membaca integer, teks dibaca dengan method yang sama, lalu dikonversi dengan method Integer.parseInt()


NIO (Nonblocking I/O)
• JDK 1.4 (nama Kode: Merlin) ke atas menyediakan NIO
– Ada di package java.nio

• Improvement:
– Non blocking I/O
– Buffer
– Regular Expression

[2] String dan StringBuffer
     *String
       • Merupakan kelas khusus di Java (ditangani secara transparan)
       • Sifatnya immutable (tidak bisa diubah)
       • Memiliki berbagai method untuk memiliki manipulasi String

     *Literal String
       • Harap diingat lagi bahwa:
         – Setiap Literal String adalah sebuah objek
            String. Contoh:
            String teks = “Hello”;
            System.out.println(teks.length());
         – Sama dengan
            System.out.println(“Hello”.length());

     *Sifat Immutable String
      • String sebenarnya tidak dapat diubah, namun Java memungkinkan String seolah-olah diubah,                 Contoh:
        – Jika dilakukan ini:
           String judul = "Judul :";
           judul += "Eyes On Me";
        – Maka sebenarnya yang dilakukan adalah ini
           String judul = "Judul :";
            judul = judul.concat("Eyes On Me");

    *Operasi String Tidak Optimal
       • String baru diciptakan (string yang lama tetap ada di memori, dan dibuang ketika terjadi garbage            collection)
       • Untuk operasi yang banyak melibatkan perubahan string, sebaiknya menggunakan StringBuffer

     *StringBuffer
       • StringBuffer mirip dengan String
       • Sifatnya mutable
       • Tidak ditangani secara transparan oleh Java (harus dilakukan secara manual)
       • Lebih cepat untuk manipulasi string yang memerlukan perubahan pada String.

     *Sifat mutable StringBuffer
       • Untuk mengubah StringBuffer tidak perlu objek baru
         – Contoh :
            StringBuffer nama = new StringBuffer("mataku");
            nama.setCharAt(4, 'm');

       • Untuk mengubah String selalu butuh objek baru (objek lama diubah melalui assignment)

     *Method yang penting
       • Beberapa method String dan StringBuffer yang penting adalah:
         – length(): panjang string
         – replace(): mengganti suatu karakter
         – charAt(): mengakses karakter di posisi tertentu
         – trim(): menghilangkan spasi di awal dan di akhir string

      • Perhatikan bahwa meskipun namanya sama, sifat keduanya berbeda
        – String menciptakan objek baru, sedangkan StringBuffer tidak

     *Membandingkan String
       • Method equals() membandingkan string untuk memeriksa kesamaan
       • Method equalsIngnoreCase() melakukan hal yang sama, tapi besar kecil huruf tidak diperhatikan
       • Method compareTo() menghasilkan 0 jika string sama, >0 jika String1>String2 dan <0 jika                    String1<String2

[3] Kelas Matematik
    *Matematika di Java
      • Fungsi matematika ada di package java.math
      • Meliputi fungsi trigonometri, dan fungsi matematika standar
        – Berisi juga konstanta penting (seperti PI dan e)
        – Sebagian besar hasil method adalah bilangan riil (tipenya double )

    *Memformat Hasil
      • Class math tidak menyediakan cara untuk memformat keluaran (output) sehingga dapat dicetak             dengan rapi
     • Perlu class DecimalFormat untuk melakukan format terhadap output (DecimalFormat ada pada              package java.text)

    *Beberapa fungsi matematika yang penting
      • Method pow() untuk pangkat
      • Fungsi-fungsi trigonometri (sin, cos, tan)
      • Pembulatan hasil, meliputi
        – ke atas : ceil, ke bawah: floor, dan terdekat : round
      • Logaritma

    *Bilangan Acak
      • Bilangan acak sangat penting dalam simulasi, permainan, dan enkripsi
      • Bilangan acak dihasilkan dengan kelas Random
      • Kelas Random tidak berada dalam package java.math, tapi dalam kelas java.util
       – Contoh:
          Random r = new Random();
          int x = r.nextInt(10); //random 0..9

    *BigInteger dan BigDecimal
      • BigInteger
        – Integer presisi tak hingga
        – Berisi semua method untuk operasi integer dan bahkan method untuk mengecek probabilitas                  suatu bilangan adalah prima
      • BigDecimal
        – Bilangan floating point presisi tak hingga
        – Semua method untuk doube/float

[4] Utility 
     *Utility
       • Berbagai macam kelas yang tidak cocokdimasukkan ke package tertentu
       • Beberapa yang akan dibahas
        – Hashtable
        – Stack
        – Vector
        – Calendar
       • Kelas lain yang cukup berguna untukdipelajari: List, Tree

    *Hashtable
      • Digunakan untuk menyimpan data dengan assosiasi tertentu
        – Misal nama panggilan diassosiasikan dengan nama lengkap
     • Memetakan suatu nilai String dengan suatu Objek tertentu (Objek apa saja, termasuk juga Objek            String)
     • Method yang dipakai adalah put dan get

*Contoh
import java.util.Hashtable;
class HashtableDemo {
public static void main(String argv[]) {
Hashtable h = new Hashtable();
h.put("Linux", "Torvalds");
h.put("Windows", "Microsoft");
String nama = (String) h.get("Linux");
if (nama!=null) {
System.out.println(nama);
}
}
}

*Stack
  • Struktur data LIFO (Last In First Out)
    – Data yang masuk pertama akan keluar terakhir

   • Memakai Method push, untuk meletakkan satu item di Stack dan pop untuk mengeluarkan satu item      dari stack
     – Ada juga method peek() untuk mengintip top of stack dan search untuk mencari elemen di                Stack()

*Contoh Stack
import java.util.Stack;
class StackDemo {
public static void main(String argv[]) {
Stack s = new Stack();
s.push("Salamku Kawan");
s.push("Jangan Takut Gelap");
s.push("Gembira berkumpul");
while (!s.empty()) {
System.out.println(s.pop());
}
}
}

*Vector
• Struktur data seperti array

• Sifatnya dinamis (ukurannya tidak tetap), berubah sesuai dengan elemen yang ditambahkan ke (atau dihapus dari) Vector tersebut

• Dapat dimanipulasi dengan mudah (elemen-elemennya dapat di add, remove, atau diubah dengan mudah)

*Contoh Vector
import java.util.Vector;
import java.util.Enumeration;
class VectorDemo {
public static void main(String argv[]) {
Vector v = new Vector();
/* tambahkan elemen */
v.add("Pelangiku");
v.add("Andai Aku Besar Nanti");
v.add("Dua Balerina");
for (int i=0; i<v.size(); i++){
System.out.println(" - " + v.elementAt(i));
}
}
}


*Calendar
• Dipakai untuk menangani perhitungan kalender Masehi (Gregorian)
– Dirancang untuk mendukung kalender lain

• Menyediakan informasi mengenai tanggal, (date) dan waktu (time) saat ini (misalnya hari apa, bulan ke berapa, hari keberapa dalam tahun ini)

• Menyediakan sarana untuk penghitungan waktu

*Contoh Calendar
import java.util.Calendar;
class Kalender {
public static void main(String argv[]) {
Calendar c = Calendar.getInstance();
System.out.println("Hari ini :");
System.out.println("Hari ke“
+c.get(Calendar.DAY_OF_WEEK)+" dalam
minggu ini");
}}

CONTOH PENERAPAN
package testjeni_02;
import java.io.*;

/**
 *
 * @author NieNov
 */
public class FileInfoClass {
public static void main(String args[]) {
String fileName = "C://Price Tag.txt";
File fn = new File(fileName);
System.out.println("Name: " + fn.getName());
if (!fn.exists()) {
System.out.println(fileName + " does not exists.");
/* membuat sebuah temporary directory . */
System.out.println("Creating temp directory...");
fileName = "temp";
fn = new File(fileName);
fn.mkdir();
System.out.println(fileName +
(fn.exists()? "exists": "does not exist"));
System.out.println("Deleting temp directory...");
fn.delete();
System.out.println(fileName +
(fn.exists()? "exists": "does not exist"));
return;
}
System.out.println(fileName + " is a " +
(fn.isFile()? "file." :"directory."));
if (fn.isDirectory()) {
String content[] = fn.list();
System.out.println("The content of this directory:");
for (int i = 0; i < content.length; i++) {
System.out.println(content[i]);
}
}
if (!fn.canRead()) {
System.out.println(fileName + " is not readable.");
return;
}
System.out.println(fileName + " is " + fn.length() +
" bytes long.");
System.out.println(fileName + " is " + fn.lastModified()
+ " bytes long.");
if (!fn.canWrite()) {
System.out.println(fileName + " is not writable.");
}
}
}

dan outputnya seperti ini:



oke.. Sekian materi yang bisa saya jelaskan di blog ini..
sampai ketemu lagi yaa sobat blog, di tugas depan..
hemmmb.. Tetap Seamangat !!! :D