Dart, tidak seperti bahasa pemrograman lainnya, tidak mendukung Array. Collection dalam bahasa pemrograman Dart dapat digunakan untuk mereplikasi struktur data seperti Array. Library dart:core dan berbagai class lainnya memungkinkan dukungan Collection untuk menggantikan Array.
Collection dalam bahasa pemrograman Dart pada dasarnya dapat dikelompokkan sebagai berikut :
No | Collection & Deskripsi |
---|---|
1 | List List adalah sekelompok Object yang disimpan dalam satu wadah Object. Library dart:core menyediakan class List yang memungkinkan pembuatan dan manipulasi Object List.
|
2 | Set Set mewakili kumpulan Object di mana setiap Object hanya dapat muncul sekali. Library dart:core menyediakan class Set untuk mengimplementasikan hal ini. |
3 | Maps Map adalah kumpulan pasangan key-value Object. Key dan value dalam Map mungkin dari jenis Object manapun. Map adalah collection dinamis. Dengan kata lain, ukuran Maps dapat bertambah dan berkurang saat runtime. Class Map di library dart:core menyediakan dukungan untuk implementasi ini. |
4 | Queue Queue adalah kumpulan Object yang dapat dimanipulasi di kedua ujungnya. Queue berguna saat Anda ingin membuat collection dengan sistem first-in, first-out. Sederhananya, antrian menyisipkan data dari satu ujung dan menghapus dari ujung lainnya. Nilai dihapus / dibaca sesuai urutan penyisipannya. |
List
Sebuah List adalah sekumpulan Object yang terurut. Library dart:core menyediakan class List yang memungkinkan pembuatan dan manipulasi dari List.
List dalam Dart dapat diklasifikasikan sebagai berikut :
- Fixed Length List − panjang list tidak dapat diubah saat runtime.
- Growable List − panjang list dapat diubah saat runtime.
Contoh
Berikut ini adalah contoh implementasi List pada Dart.
void main() {
List logTypes = [];
logTypes.add("WARNING");
logTypes.add("ERROR");
logTypes.add("INFO");
// melakukan iterasi pada list
for(String type in logTypes){
print(type);
}
print('Size sebelum penghapusan');
print(logTypes.length);
logTypes.remove("WARNING");
print("Size setelah penghapusan");
print(logTypes.length);
}
Kode di atas akan menghasilkan output berikut :
WARNING
ERROR
INFO
Size sebelum penghapusan
3
Size setelah penghapusan
2
Set
Set merupakan kumpulan Object di mana setiap Object hanya dapat muncul sekali. Library dart:core menyediakan class Set untuk mengimplementasikan hal ini.
Cara Penulisan
Identifier = new Set()
Atau
Identifier = new Set.from(Iterable)
Di mana, Iterable mewakili daftar nilai yang akan ditambahkan ke Set.
Contoh
void main() {
Set numberSet = new Set();
numberSet.add(100);
numberSet.add(20);
numberSet.add(5);
numberSet.add(60);
numberSet.add(70);
print("Implementasi default :${numberSet.runtimeType}");
// semua elemen diambil sesuai urutan penyisipannya
for(var no in numberSet) {
print(no);
}
}
Kode di atas akan menghasilkan output berikut :
Implementasi default :_CompactLinkedHashSet
100
20
5
60
70
Contoh
void main() {
Set numberSet = new Set.from([12,13,14]);
print("Implementasi default :${numberSet.runtimeType}");
// semua elemen diambil sesuai urutan penyisipannya
for(var no in numberSet) {
print(no);
}
}
Kode di atas akan menghasilkan output berikut :
Implementasi default :_CompactLinkedHashSet
12
13
14
Collection Lainnya
Library dart:collection menyediakan beberapa class yang memungkinkan berbagai implementasi Collection dengan menggunakan Dart.
- HashMap
- HashSet
- LinkedList
- Queue
HashMap
HashMap adalah implementasi Map berbasis tabel hash. HashMap tidak menjamin urutan dari elemen yang ada di dalamnya.
Cara Penulisan
Identifier= new HashMap()
Contoh
Contoh berikut menunjukkan bagaimana Anda dapat mengimplementasikan HashMap :
import 'dart:collection';
main() {
var accounts = new HashMap();
accounts['dept']='HR';
accounts['name']='Tom';
accounts['email']='[email protected]';
print('Map setelah menambahkan entri :${accounts}');
}
Kode di atas seharusnya menghasilkan output berikut :
Map setelah menambahkan entri :{email: [email protected], dept: HR, name: Tom}
Menambahkan Beberapa Values ke HashMap
Class HashMap mewarisi fungsi addAll() dari kelas Map. Fungsi ini memungkinkan untuk menambahkan beberapa nilai sekaligus.
Cara Penulisan
HashMap.addAll(Iterable)
Di mana, Iterable mewakili list value yang akan dimasukkan.
import 'dart:collection';
main() {
var accounts = new HashMap();
accounts.addAll({'dept':'HR','email':'[email protected]'});
print('Map setelah menambahkan entri :${accounts}');
}
Kode di atas akan menghasilkan output berikut :
Map setelah menambahkan entri :{email: [email protected], dept: HR}
Menghapus Values dari HashMap
Fungsi remove() dan clear() digunakan untuk menghapus elemen dari HashMap. Fungsi remove() diberikan kunci yang mewakili elemen yang akan dihapus. Fungsi clear() digunakan untuk menghapus semua elemen dari Map.
Contoh
import 'dart:collection';
main() {
var accounts = new HashMap();
accounts['dept'] = 'HR';
accounts['name'] = 'Tom';
accounts['email'] = '[email protected]';
print('Map setelah menambahkan entri :${accounts}');
accounts.remove('dept');
print('Map setelah menghapus entri :${accounts}');
accounts.clear();
print('Map setelah menghapus semua entri :${accounts}');
}
Kode di atas seharusnya menghasilkan output berikut :
Map setelah menambahkan entri :{email: [email protected], dept: HR, name: Tom}
Map setelah menghapus entri :{email: [email protected], name: Tom}
Map setelah menghapus semua entri :{}
HashSet
HashSet adalah implementasi Set berbasis hash-table yang tidak terurut.
Cara Penulisan
Identifier = new HashSet()
Fungsi add() dapat digunakan untuk mengisi sebuah instance HashSet.
Contoh
import 'dart:collection';
void main() {
Set numberSet = new HashSet();
numberSet.add(100);
numberSet.add(20);
numberSet.add(5);
numberSet.add(60);
numberSet.add(70);
print("Implementasi default :${numberSet.runtimeType}");
for(var no in numberSet){
print(no);
}
}
Kode di atas akan mengembalikan output berikut :
implementasi default :_HashSet
60
20
100
5
70
Menambahkan Multiple Values ke HashSet
Fungsi addAll() memungkinkan penambahan beberapa nilai ke HashSet.
Contoh
import 'dart:collection';
void main() {
Set numberSet = new HashSet();
numberSet.addAll([100,200,300]);
print("Implementasi default :${numberSet.runtimeType}");
for(var no in numberSet){
print(no);
}
}
Kode di atas akan mengembalikan output berikut :
Implementasi default :_HashSet
200
300
100
Menghapus Values dari HashSet
Fungsi remove() menghapus suatu elemen dari HashSet. Fungsi clear() menghapus semua elemen dari HashSet.
Contoh
import 'dart:collection';
void main() {
Set numberSet = new HashSet();
numberSet.addAll([100,200,300]);
print("Mencetak hashet.. ${numberSet}");
numberSet.remove(100);
print("Mencetak hashet.. ${numberSet}");
numberSet.clear();
print("Mencetak hashet.. ${numberSet}");
}
Kode di atas akan mengembalikan output berikut :
Mencetak hashet.. {200, 300, 100}
Mencetak hashet.. {200, 300}
Mencetak hashet.. {}
Map
Object Map adalah kumpulan Object dalam bentuk pasangan key-value. Key dan value dalam Map dapat berupa tipe data apa pun. Map merupakan collection dinamis. Dengan kata lain, ukuran Map dapat bertambah dan berkurang saat runtime.
Contoh
void main() {
var details = new Map();
details['Usrname']='admin';
details['Password']='admin@123';
print(details);
}
Kode di atas akan mengembalikan output berikut ketika dijalankan :
{Usrname: admin, Password: admin@123}
Catatan – Implementasi generik dari List dan Map telah dibahas secara detail dalam bab sebelumnya.
Queue
Queue (antrian) adalah kumpulan Object yang dapat dimanipulasi di kedua ujungnya. Queue berguna ketika Anda ingin membangun kumpulan Object dengan konsep first-in, first-out. Dengan kata sederhana, Queue memasukkan data dari satu ujung dan menghapus dari ujung lainnya. Nilai-nilai dihapus/dibaca sesuai urutan penempatannya.
Cara Penulisan
Identifier = new Queue()
Fungsi add() dapat digunakan untuk memasukkan nilai ke dalam Queue. Fungsi ini memasukkan nilai yang ditentukan ke ujung antrian.
Contoh
import 'dart:collection';
void main() {
Queue queue = new Queue();
print("Implementasi default ${queue.runtimeType}");
queue.add(10);
queue.add(20);
queue.add(30);
queue.add(40);
for(var no in queue){
print(no);
}
}
Kode di atas akan mengembalikan output berikut :
Implementasi default ListQueue
10
20
30
40
Menambahkan Multiple Values ke Queue
Fungsi addAll() memungkinkan untuk menambahkan beberapa nilai ke dalam Queue sekaligus.
Contoh
import 'dart:collection';
void main() {
Queue queue = new Queue();
print("Implementasi default ${queue.runtimeType}");
queue.addAll([10,12,13,14]);
for(var no in queue){
print(no);
}
}
Kode di atas akan menghasilkan output berikut :
Implementasi default ListQueue
10
12
13
14
Menambahkan Value ke Awal dan Akhir dari Queue
Metode addFirst() menambahkan nilai tertentu ke awal Queue. Fungsi addLast() menambahkan nilai tertentu ke akhir Queue.
Contoh
Contoh berikut menunjukkan bagaimana Anda dapat menambahkan nilai di awal Queue menggunakan metode addFirst().
import 'dart:collection';
void main() {
Queue numQ = new Queue();
numQ.addAll([100,200,300]);
print("Mencetak Queue .. ${numQ}");
numQ.addFirst(400);
print("Mencetak Queue .. ${numQ}");
}
Kode di atas akan menghasilkan output berikut :
Mencetak Queue .. {100, 200, 300}
Mencetak Queue .. {400, 100, 200, 300}
Contoh
Berikut adalah contoh bagaimana Anda dapat menambahkan nilai di akhir Queue menggunakan metode addLast().
import 'dart:collection';
void main() {
Queue numQ = new Queue();
numQ.addAll([100,200,300]);
print("Mencetak Queue .. ${numQ}");
numQ.addLast(400);
print("Mencetak Queue .. ${numQ}");
}
Kode di atas akan menghasilkan ouput berikut :
Mencetak Queue .. {100, 200, 300}
Mencetak Queue .. {100, 200, 300, 400}
Iterating Collections
Class Iterator dari library dart:core memungkinkan traversal Collection dengan mudah. Setiap Collection memiliki properti iterator. Properti ini mengembalikan iterator yang menunjuk pada semua Object yang ada dalam Collection tersebut.
Contoh
Contoh berikut mengilustrasikan traversing sebuah Collection menggunakan iterator.
import 'dart:collection';
void main() {
Queue numQ = new Queue();
numQ.addAll([100,200,300]);
Iterator i= numQ.iterator;
while(i.moveNext()) {
print(i.current);
}
}
Fungsi moveNext() mengembalikan nilai Boolean yang menunjukkan apakah ada elemen berikutnya. Properti current dari Object iterator mengembalikan nilai Object yang saat ini ditunjuk oleh iterator.
Kode di atas akan menghasilkan ouput berikut :
100
200
300
Tutorial sebelumnya : Dart OOP
Tutorial setelahnya : Dart Generic
Semua Tutorial Dart : Tutorial Dart