You are on page 1of 12

MODUL PERTEMUAN 9 dan 10

HASH TABLE

1.

Tujuan

Mengimplementasikan konsep Hash pada Java


Memahami Enumeration, Iterator dan Interface Iterable
Mengimplementasikan penggunaan Iterator untuk Penelusuran Table Hash
2.

Dasar Teori

Hash Table adalah struktur data yang sering digunakan untuk


mengimplementasikan ADT Dictionary, yaitu ADT yang hanya
mengizinkan pencarian, penyisipan, dan penghapusan elemen-elemen
yang ada didalamnya

3.

Tugas Pendahuluan

1.

2.

Apa yang dimaksud dengan :


a.
Hash table
b.
Enumeration
c.
Iterator
d.
Interface Iterable
Bagaimana cara menggunakan iterator untuk penelusuran table hash

4.

Praktikum

Percobaan 1. HashAssociation
package packageHashTable;
class HashAssociation<K extends Number, V> {
protected K theKey;
protected V theValue;
protected K key;
protected V value;
89

HashAssociation() {
this.theKey = key;
this.theValue = value;
}
V setValue(V value) {
V oldValue = theValue;
theValue = value;
return oldValue;
}
K getTheKey() {
return theKey;
}
void setTheKey(K theKey) {
this.theKey = theKey;
}
V getTheValue() {
return theValue;
}
void setTheValue(V theValue) {
this.theValue = theValue;
}
}
Percobaan 2. HashTable
package packageHashTable;
import java.util.Vector;

public class HashTable<K, V> {


int count;
int hash;
final double maximumLoadFactor = 0.5;
public static HashAssociation<Integer, String> DATA;
public static Vector<HashAssociation<Integer, String>> data;
90

public HashTable(int initialCapacity) {


if (initialCapacity > 0) {
System.out.print("Kapasitas Hashtable positip.");
data = new Vector<HashAssociation<Integer,
String>>();
data.setSize(initialCapacity);
count = 0;
}
}
public HashTable() {
this(100);
}
protected int locate(K key) {
hash = Math.abs(key.hashCode() % data.size());
while (data.get(hash) != null) {
if (data.get(hash) != null) {
if (key.equals(data.get(hash).getTheKey()))
return hash;
}
hash = (1 + hash) % data.size();
}
return hash;
}
public String put(K key, V value) {
if (maximumLoadFactor * data.size() <= (1 + count)) {
System.out.println("Hash Table is FULL");
}
int hash = locate(key);
if (data.get(hash) == null) {
DATA = new HashAssociation<Integer, String>();
data.set(hash, DATA);
count++;
return null;
} else {
HashAssociation<Integer, String> a = data.get(hash);
String theValue = a.getTheValue();
String oldValue = theValue;
a.setValue((String) theValue);
return oldValue;
91

}
}
public int containsValueByKey(K key) {
int hash = locate(key);
if (data.get(hash) != null)
return -99;
else
return hash;
}
public Vector<HashAssociation<Integer, String>> getData() {
return data;
}
public void setDATA(K key, V value) {
put(key, value);
}
public boolean containsValue(K key) {
int hash = locate(key);
return data.get(hash) != null;
}
public String get(K key) {
int hash = locate(key);
if (data.get(hash) == null)
return null;
return data.get(hash).getTheValue();
}
}
Percobaan 3. TesthashTable
package packageHashTable;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class TestHashTable {


HashTable<Integer, String> ht;
public static void main(String[] args) {
92

HashTable<Integer, String> ht = new HashTable<Integer,


String>();
System.out.print("\nBerapa data yang akan dimasukkan? ");
int jData = inputData();
for (int i = 0; i < jData; i++) {
System.out.print("Masukkan kunci ke-" + (i + 1) + " :
");
int key = inputData();
System.out.print("Masukkan nilai ke-" + (i + 1) + " : ");
String value = inputNilai();
ht.setDATA(key, value);
}
System.out.println("Data-data sudah masuk. Mau memeriksa ?
");
System.out.print("Masukkan kunci yang dicari : ");
int kunci = inputData();
int kunciPencarian = ht.containsValueByKey(kunci);
if (kunciPencarian == -99) {
System.out.print("Data Anda cari tidak ada bok!!");
} else {
System.out.println("Data dengan kunci : " + kunci + "
ada!");
}
}
private static String inputNilai() {
String data = null;
BufferedReader bfr = new BufferedReader(
new InputStreamReader(System.in));
String stringInput = null;
try {
stringInput = bfr.readLine();
} catch (IOException e) {
e.printStackTrace();
}
data = String.valueOf(stringInput);
return data;
}
private static int inputData() {
BufferedReader bfr = new BufferedReader(
new InputStreamReader(System.in));
93

String angkaInput = null;


try {
angkaInput = bfr.readLine();
} catch (IOException e) {
e.printStackTrace();
}
int Data = Integer.valueOf(angkaInput).intValue();
return Data;
}
}
Percobaan 4. AbstractIterator
package packageTestVectorIterator;
import java.util.Enumeration;
import java.util.Iterator;
public abstract class AbstractIterator<E>
implements Enumeration<E>, Iterator<E>, Iterable<E>
{
public abstract void reset();
public abstract boolean hasNext();
public abstract E get();
public abstract E next();
public void remove()
{
System.out.print("remove() belum diimplementasikan.");
}
final public boolean hasMoreElements()
{
return hasNext();
}
final public E nextElement()
{
return next();
}
public Iterator<E> iterator(VectorIterator<HashAssociation<Integer, String>> vi)
{
94

return this;
}
}
Percobaan 5. HashAssociation
package packageTestVectorIterator;
class HashAssociation<K extends Number, V> {
protected K theKey;
protected V theValue;
protected K key;
protected V value;
HashAssociation() {
this.theKey = key;
this.theValue = value;
}
V setValue(V value) {
V oldValue = theValue;
theValue = value;
return oldValue;
}
K getTheKey() {
return theKey;
}
void setTheKey(K theKey) {
this.theKey = theKey;
}
V getTheValue() {
return theValue;
}
void setTheValue(V theValue) {
this.theValue = theValue;
}
}
Percobaan 6. VectorIterator
package packageTestVectorIterator;
95

import java.util.Iterator;
import java.util.Vector;

@SuppressWarnings("hiding")
class VectorIterator<E> extends AbstractIterator<E> {
protected Vector<E> theVector;
protected int current;
public Iterator<E> iterator()
{
return new VectorIterator<E>();
}
public void reset()
{
current = 0;
}
public boolean hasNext()
{
return current < theVector.size();
}
public E get()
{
return theVector.get(current);
}
public E next()
{
return theVector.get(current++);
}
}
Percobaan 7. TestIteratorforVector
package packageTestVectorIterator;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Iterator;
import java.util.Vector;
public class TestIteratorforVector {
static Vector <String> vector = new Vector<String>();
static Iterator<String> i;
public static void main(String[] args) {
96

System.out.print("Berapa data yang akan dimasukkan? ");


int jData = inputData();
for (int i = 0; i < jData; i++) {
System.out.print("Masukkan nama ke-" + (i + 1) + " : ");
String value = inputNilai();
vector.add(value);
}
System.out.print("Data-data sudah masuk. Mau memeriksa (1) ? ");
int periksa = inputData();
if (periksa == 1) tampilData();
}
private static void tampilData() {
int j=1;
i = (Iterator<String>) vector.iterator();
while(i.hasNext())
{
System.out.print("\nData ke-" + j + " adalah " +
i.next().toString());
j++;
}
System.out.println();
}
private static String inputNilai() {
String data = null;
BufferedReader bfr = new BufferedReader(
new InputStreamReader(System.in));
String stringInput = null;
try {
stringInput = bfr.readLine();
} catch (IOException e) {
e.printStackTrace();
}
data = String.valueOf(stringInput);
return data;
}
private static int inputData() {
BufferedReader bfr = new BufferedReader(
new InputStreamReader(System.in));
97

String angkaInput = null;


try {
angkaInput = bfr.readLine();
} catch (IOException e) {
e.printStackTrace();
}
int Data = Integer.valueOf(angkaInput).intValue();
return Data;
}
}
Percobaan 8. TestVectorIterator_forHash
package packageTestVectorIterator;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Vector;
public class TestVectorIterator_forHAssc extends
VectorIterator<HashAssociation<Integer, String>> {
static Vector<HashAssociation<Integer, String>> vector =
new Vector<HashAssociation<Integer, String>>();
public TestVectorIterator_forHAssc
(Vector<HashAssociation<Integer, String>> v) {
super();
}
public static void main(String[] args) {
System.out.print("\nBerapa data yang akan dimasukkan? ");
int jData = inputData();
for (int i = 0; i < jData; i++) {
HashAssociation<Integer, String> ha =
new HashAssociation<Integer, String>();;
System.out.print("Masukkan kunci ke-" + (i + 1) + " :
");
int key = inputData();
System.out.print("Masukkan nilai ke-" + (i + 1) + " : ");
String value = inputNilai();
ha.setTheKey(key);
ha.setTheValue(value);
98

vector.add(ha);
}
System.out.print("\nData-data sudah masuk. Mau memeriksa
(1)? ");
int periksa = inputData();
if (periksa == 1)
tampilData();
}
private static void tampilData() {
int j = 1;
for (HashAssociation<Integer, String> ha : vector){
System.out.println("Data ke-" + j + " KEY : "
+ ha.getTheKey().toString() + "
VALUE : "
+ ha.getTheValue().toString());
j++;
}
}
private static String inputNilai() {
String data = null;
BufferedReader bfr = new BufferedReader(
new InputStreamReader(System.in));
String stringInput = null;
try {
stringInput = bfr.readLine();
} catch (IOException e) {
e.printStackTrace();
}
data = String.valueOf(stringInput);
return data;
}
private static int inputData() {
BufferedReader bfr = new BufferedReader(
new InputStreamReader(System.in));
String angkaInput = null;
try {
angkaInput = bfr.readLine();
} catch (IOException e) {
e.printStackTrace();
99

}
int Data = Integer.valueOf(angkaInput).intValue();
return Data;
}
}
5.

Tugas Praktikum

Buat Kesimpulan dengan deskripsi tentang penggunaan struktur data hash table
dari beberapa percobaan diatas

100

You might also like