java
Dalam tutorial ini, kita akan belajar tentang kelas Java ConcurrentHashMap dan operasinya dengan bantuan contoh.
ConcurrentHashMap
kelas kerangka koleksi Java menyediakan peta thread-safe. Artinya, beberapa utas dapat mengakses peta sekaligus tanpa memengaruhi konsistensi entri dalam peta.
Ini mengimplementasikan antarmuka ConcurrentMap.
Untuk membuat hashmap bersamaan, kita harus mengimpor java.util.concurrent.ConcurrentHashMap
paket dulu. Setelah kita mengimpor paket, berikut adalah bagaimana kita dapat membuat hashmaps bersamaan di Java.
// ConcurrentHashMap with capacity 8 and load factor 0.6
ConcurrentHashMap<Key, Value> numbers = new ConcurrentHashMap<>(8, 0.6f);
Dalam kode di atas, kami telah membuat peta hash bersamaan bernama angka .
Di sini,
Perhatikan bagian new ConcurrentHashMap<>(8, 0.6)
. Di sini, parameter pertama adalah kapasitas dan parameter kedua adalah loadFactor .
Kapasitas default dan faktor beban
Dimungkinkan untuk membuat peta hash bersamaan tanpa menentukan kapasitas dan faktor bebannya. Misalnya,
// ConcurrentHashMap with default capacity and load factor
ConcurrentHashMap<Key, Value> numbers1 = new ConcurrentHashMap<>();
Secara default,
Berikut adalah bagaimana kita dapat membuat peta hash bersamaan yang berisi semua elemen peta lainnya.
import java.util.concurrent.ConcurrentHashMap;
import java.util.HashMap;
class Main {
public static void main(String[] args) {
// Creating a hashmap of even numbers
HashMap<String, Integer> evenNumbers = new HashMap<>();
evenNumbers.put("Two", 2);
evenNumbers.put("Four", 4);
System.out.println("HashMap: " + evenNumbers);
// Creating a concurrent hashmap from other map
ConcurrentHashMap<String, Integer> numbers = new ConcurrentHashMap<>(evenNumbers);
numbers.put("Three", 3);
System.out.println("ConcurrentHashMap: " + numbers);
}
}
Keluaran
HashMap: {Four=4, Two=2} ConcurrentHashMap: {Four=4, Two=2, Three=3}
ConcurrentHashMap
class menyediakan metode yang memungkinkan kita melakukan berbagai operasi pada peta.
put()
- menyisipkan pemetaan kunci/nilai yang ditentukan ke petaputAll()
- menyisipkan semua entri dari peta yang ditentukan ke peta iniputIfAbsent()
- menyisipkan pemetaan kunci/nilai yang ditentukan ke peta jika kunci yang ditentukan tidak ada di petaMisalnya,
import java.util.concurrent.ConcurrentHashMap;
class Main {
public static void main(String[] args) {
// Creating ConcurrentHashMap of even numbers
ConcurrentHashMap<String, Integer> evenNumbers = new ConcurrentHashMap<>();
// Using put()
evenNumbers.put("Two", 2);
evenNumbers.put("Four", 4);
// Using putIfAbsent()
evenNumbers.putIfAbsent("Six", 6);
System.out.println("ConcurrentHashMap of even numbers: " + evenNumbers);
//Creating ConcurrentHashMap of numbers
ConcurrentHashMap<String, Integer> numbers = new ConcurrentHashMap<>();
numbers.put("One", 1);
// Using putAll()
numbers.putAll(evenNumbers);
System.out.println("ConcurrentHashMap of numbers: " + numbers);
}
}
Keluaran
ConcurrentHashMap of even numbers: {Six=6, Four=4, Two=2} ConcurrentHashMap of numbers: {Six=6, One=1, Four=-4, Two=2}
1. Menggunakan entrySet(), keySet() dan values()
entrySet()
- mengembalikan satu set semua pemetaan kunci/nilai petakeySet()
- mengembalikan satu set semua kunci petavalues()
- mengembalikan satu set semua nilai petaMisalnya,
import java.util.concurrent.ConcurrentHashMap;
class Main {
public static void main(String[] args) {
ConcurrentHashMap<String, Integer> numbers = new ConcurrentHashMap<>();
numbers.put("One", 1);
numbers.put("Two", 2);
numbers.put("Three", 3);
System.out.println("ConcurrentHashMap: " + numbers);
// Using entrySet()
System.out.println("Key/Value mappings: " + numbers.entrySet());
// Using keySet()
System.out.println("Keys: " + numbers.keySet());
// Using values()
System.out.println("Values: " + numbers.values());
}
}
Keluaran
ConcurrentHashMap: {One=1, Two=2, Three=3} Key/Value mappings: [One=1, Two=2, Three=3] Keys: [One, Two, Three] Values: [1, 2, 3]
2. Menggunakan get() dan getOrDefault()
get()
- Mengembalikan nilai yang terkait dengan kunci yang ditentukan. Mengembalikan null
jika kunci tidak ditemukan.getOrDefault()
- Mengembalikan nilai yang terkait dengan kunci yang ditentukan. Mengembalikan nilai default yang ditentukan jika kunci tidak ditemukan.Misalnya,
import java.util.concurrent.ConcurrentHashMap;
class Main {
public static void main(String[] args) {
ConcurrentHashMap<String, Integer> numbers = new ConcurrentHashMap<>();
numbers.put("One", 1);
numbers.put("Two", 2);
numbers.put("Three", 3);
System.out.println("ConcurrentHashMap: " + numbers);
// Using get()
int value1 = numbers.get("Three");
System.out.println("Using get(): " + value1);
// Using getOrDefault()
int value2 = numbers.getOrDefault("Five", 5);
System.out.println("Using getOrDefault(): " + value2);
}
}
Keluaran
ConcurrentHashMap: {One=1, Two=2, Three=3} Using get(): 3 Using getOrDefault(): 5
remove(key)
- mengembalikan dan menghapus entri yang terkait dengan kunci yang ditentukan dari petaremove(key, value)
- menghapus entri dari peta hanya jika kunci yang ditentukan dipetakan ke nilai yang ditentukan dan mengembalikan nilai booleanMisalnya,
import java.util.concurrent.ConcurrentHashMap;
class Main {
public static void main(String[] args) {
ConcurrentHashMap<String, Integer> numbers = new ConcurrentHashMap<>();
numbers.put("One", 1);
numbers.put("Two", 2);
numbers.put("Three", 3);
System.out.println("ConcurrentHashMap: " + numbers);
// remove method with single parameter
int value = numbers.remove("Two");
System.out.println("Removed value: " + value);
// remove method with two parameters
boolean result = numbers.remove("Three", 3);
System.out.println("Is the entry {Three=3} removed? " + result);
System.out.println("Updated ConcurrentHashMap: " + numbers);
}
}
Keluaran
ConcurrentHashMap: {One=1, Two=2, Three=3} Removed value: 2 Is the entry {Three=3} removed? True Updated ConcurrentHashMap: {One=1}
ConcurrentHashMap
class menyediakan operasi massal berbeda yang dapat diterapkan dengan aman ke peta bersamaan.
forEach()
metode mengulangi entri kami dan menjalankan fungsi yang ditentukan.
Ini mencakup dua parameter.
Misalnya,
import java.util.concurrent.ConcurrentHashMap;
class Main {
public static void main(String[] args) {
ConcurrentHashMap<String, Integer> numbers = new ConcurrentHashMap<>();
numbers.put("One", 1);
numbers.put("Two", 2);
numbers.put("Three", 3);
System.out.println("ConcurrentHashMap: " + numbers);
// forEach() without transformer function
numbers.forEach(4, (k, v) -> System.out.println("key: " + k + " value: " + v));
// forEach() with transformer function
System.out.print("Values are ");
numbers.forEach(4, (k, v) -> v, (v) -> System.out.print(v + ", "));
}
}
Keluaran
ConcurrentHashMap: {One = 1, Two = 2, Three = 3} key: One value: 1 key: Two value: 2 key: Three value: 3 Values are 1, 2, 3,
Dalam program di atas, kami telah menggunakan ambang paralel 4 . Ini berarti jika peta berisi 4 entri, operasi akan dijalankan secara paralel.
Variasi Metode forEach()
forEachEntry()
- menjalankan fungsi yang ditentukan untuk setiap entriforEachKey()
- menjalankan fungsi yang ditentukan untuk setiap tombolforEachValue()
- mengeksekusi fungsi yang ditentukan untuk setiap nilai
search()
metode mencari peta berdasarkan fungsi yang ditentukan dan mengembalikan entri yang cocok.
Di sini, fungsi yang ditentukan menentukan entri apa yang akan dicari.
Ini juga menyertakan parameter opsional parallelThreshold . Ambang batas paralel menentukan bahwa setelah berapa banyak elemen dalam peta, operasi dijalankan secara paralel.
Misalnya,
import java.util.concurrent.ConcurrentHashMap;
class Main {
public static void main(String[] args) {
ConcurrentHashMap<String, Integer> numbers = new ConcurrentHashMap<>();
numbers.put("One", 1);
numbers.put("Two", 2);
numbers.put("Three", 3);
System.out.println("ConcurrentHashMap: " + numbers);
// Using search()
String key = numbers.search(4, (k, v) -> {return v == 3 ? k: null;});
System.out.println("Searched value: " + key);
}
}
Keluaran
ConcurrentHashMap: {One=1, Two=2, Three=3} Searched value: Three
Varian Metode search()
searchEntries()
- fungsi pencarian diterapkan pada pemetaan kunci/nilaisearchKeys()
- fungsi pencarian hanya diterapkan pada tombolsearchValues()
- fungsi pencarian hanya diterapkan pada nilai
reduce()
metode mengumpulkan (mengumpulkan bersama) setiap entri dalam peta. Ini dapat digunakan saat kita membutuhkan semua entri untuk melakukan tugas umum, seperti menambahkan semua nilai peta.
Ini mencakup dua parameter.
Misalnya,
import java.util.concurrent.ConcurrentHashMap;
class Main {
public static void main(String[] args) {
ConcurrentHashMap<String, Integer> numbers = new ConcurrentHashMap<>();
numbers.put("One", 1);
numbers.put("Two", 2);
numbers.put("Three", 3);
System.out.println("ConcurrentHashMap: " + numbers);
// Using search()
int sum = numbers.reduce(4, (k, v) -> v, (v1, v2) -> v1 + v2);
System.out.println("Sum of all values: " + sum);
}
}
Keluaran
ConcurrentHashMap: {One=1, Two=2, Three=3} Sum of all values: 6
Pada program di atas, perhatikan pernyataan
numbers.reduce(4, (k, v) -> v, (v1, v2) -> v1+v2);
Di sini,
Varian Metode reduce()
reduceEntries()
- mengembalikan hasil pengumpulan semua entri menggunakan fungsi peredam yang ditentukanreduceKeys()
- mengembalikan hasil pengumpulan semua kunci menggunakan fungsi peredam yang ditentukanreduceValues()
- mengembalikan hasil pengumpulan semua nilai menggunakan fungsi peredam yang ditentukan
Berikut adalah beberapa perbedaan antara ConcurrentHashMap
dan HashMap,
ConcurrentHashMap
adalah aman untuk thread koleksi. Artinya, beberapa utas dapat mengakses dan memodifikasinya secara bersamaan.ConcurrentHashMap
menyediakan metode untuk operasi massal seperti forEach()
, search()
dan reduce()
.ConcurrentHashMap
class memungkinkan beberapa utas untuk mengakses entrinya secara bersamaan.putIfAbsent()
metode tidak akan menimpa entri di peta jika kunci yang ditentukan sudah ada.java
Java ConcurrentHashMap Dalam tutorial ini, kita akan belajar tentang kelas Java ConcurrentHashMap dan operasinya dengan bantuan contoh. ConcurrentHashMap kelas kerangka koleksi Java menyediakan peta thread-safe. Artinya, beberapa utas dapat mengakses peta sekaligus tanpa memengaruhi konsistensi en
Kelas HashSet Java Dalam tutorial ini, kita akan belajar tentang kelas Java HashSet. Kita akan belajar tentang metode dan operasi set hash yang berbeda dengan bantuan contoh. HashSet class framework Java Collections menyediakan fungsionalitas struktur data tabel hash. Ini mengimplementasikan anta
Java TreeSet Dalam tutorial ini, kita akan belajar tentang kelas Java TreeSet dan berbagai operasi dan metodenya dengan bantuan contoh. TreeSet kelas kerangka koleksi Java menyediakan fungsionalitas struktur data pohon. Ini memperluas antarmuka NavigableSet. Membuat TreeSet Untuk membuat kump
Biasanya, saat kita bekerja dengan Numbers, kita menggunakan tipe data primitif seperti byte, int, long, double, dll. Contoh int i = 5000; float gpa = 13.65f; double mask = 125; Namun, dalam pengembangan, kami menemukan situasi di mana kami perlu menggunakan objek alih-alih tipe data primitif. Un