Kamis, 21 Mei 2015

Efisiensi Code Menggunakan Collection Java Library

Pada artikel kali ini, saya akan mencoba berbagi keuntungannya menggunakan salah satu dari Collection Java Library yaitu ArrayList. Sebelumnya saya akan menceritakan sedikit tentang bagaimana cara membaca suatu teks pada sebuah file. Pada pembacaan teks di suatu file, biasanya kita menampung teks dari file tersebut ke dalam suatu array untuk setiap barisnya. Walaupun mungkin ada cara lain. Namun kita akan membahas di sini ketika ingin membaca teks pada suatu file berdasarkan per barisnya.

Langsung saja kita mulai. Kita akan mengambil suatu contoh script dari suatu website

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
public int readLines(String path) throws IOException{
        FileReader file_to_read = new FileReader(path);
        BufferedReader bf = new BufferedReader(file_to_read);
        
        String aLine;
        int numberOfLines = 0;
        
        while((aLine = bf.readLine()) != null){
            numberOfLines++;
        }
        bf.close();
        
        return numberOfLines;
    }
source: http://www.homeandlearn.co.uk/java/read_a_textfile_in_java.html

Script di atas bekerja untuk menghitung jumlah baris teks pada file. Jika kita menggunakan array primitif, kita harus mendefinisikan jumlah element array terlebih dahulu. Karena itulah diperlukan script fungsi seperti di atas. Dan setelah itu menggunakan script berikut ini

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
public String[] OpenFile(String path) throws IOException{
        FileReader fr = new FileReader(path);
        BufferedReader textReader = new BufferedReader(fr);
        
        int numberOfLines = 3;
        String [] textData = new String[numberOfLines];
        
        int i;
        
        for(i = 0; i < numberOfLines; i++){
            textData[i] = textReader.readLine();
        }
        
        textReader.close();
        return textData;       
    }
source: http://www.homeandlearn.co.uk/java/read_a_textfile_in_java.html

Jika menggunakan array primitif seperti script yang di atas, kita harus tahu jumlah elementnya terlebih dahulu, sedangkan kita biasanya tidak akan tahu berapa jumlah baris teks yang ada pada suatu file yang akan kita baca. Terlihat pada baris 5 pada script di atas, masih langsung ditentukan sendiri jumlah barisnya, seharusnya pada script di atas ada perubahan sedikit yaitu pada baris 5 sehingga menjadi seperti ini

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
public String[] OpenFile(String path) throws IOException{
        FileReader fr = new FileReader(path);
        BufferedReader textReader = new BufferedReader(fr);
        
        int numberOfLines = readLines(path);
        String [] textData = new String[numberOfLines];
        
        int i;
        
        for(i = 0; i < numberOfLines; i++){
            textData[i] = textReader.readLine();
        }
        
        textReader.close();
        return textData;       
    }

Script di atas bekerja untuk membaca teks setiap baris pada suatu file, dengan menggunakan readLines(path), jumlah baris teks pada suatu file tersebut bisa kita definisikan melalui nilai kembali dari fungsi tersebut. Kemudian nilai kembalian dari fungsi tersebut digunakan untuk mendefinisikan jumlah dari element array yang akan menampung teks per barisnya.

Namun script di atas semuanya masih bisa diminimalisasi lagi menjadi lebih simpel dengan menggunakan ArrayList. Tidak perlu diharuskan untuk mengetahui berapa jumlah baris teks yang ada pada file yang akan dibaca. Berikut adalah script yang saya buat berdasarkan referensi dan kondisi dari dua script di atas sebelumnya.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
public ArrayList<String> readFile(String path) throws FileNotFoundException, IOException{
        ArrayList arrList = new ArrayList<String>();
        FileReader fileReader = new FileReader(path);
        BufferedReader br = new BufferedReader(fileReader);
        String tmpLine = "";
        while( (tmpLine = br.readLine()) != null){
            arrList.add(tmpLine);
            //System.out.println(tmpLine);            
        }
        return arrList;
    }


Dengan menggunakan ArrayList, kita tidak perlu tahu jumlah baris teks dari file yang akan kita baca untuk ditampung ke dalam array. Pembacaan file juga hanya cukup sekali, tidak dilakukan dua kali. Selain jumlah code menjadi banyak, dengan kasus seperti ini juga akan membuat lambat kinerja program, karena membaca file dua kali yang mana seharusnya dapat dibaca sekali saja. Sekian dari artikel kali ini, semoga dapat menambah wawasan bagi yang membacanya. Terimakasih

1 komentar: