JavaRush /Java Blog /Random-ID /Rehat kopi #221. Tiga cara untuk menemukan elemen dalam a...

Rehat kopi #221. Tiga cara untuk menemukan elemen dalam array Java. Apa itu Java Thread Lokal dan bagaimana cara menggunakannya

Dipublikasikan di grup Random-ID

Tiga cara untuk menemukan elemen dalam array Java

Sumber: Asyncq Posting ini akan membantu Anda lebih memahami berbagai cara untuk mencari elemen dalam array di Java. Rehat kopi #221.  Tiga cara untuk menemukan elemen dalam array Java.  Apa itu Java Thread Lokal dan cara menggunakannya - 1Menemukan elemen tertentu dalam kumpulan nilai adalah operasi yang sangat umum dan sering digunakan dalam pengembangan perangkat lunak. Ada berbagai pendekatan untuk mengatasi masalah ini, dari yang sederhana hingga yang optimal. Mari kita lihat mereka.

Memasukan data

Array input berisi data id primitif dan kita perlu mengetahui apakah itu berisi id->3.
int[] ids = { 1,2,13,14,15,3,10,11,12,4,5,6,7,8,9 };
int inputId = 3;

Metode 1 (sederhana)

  1. Kami mengunjungi semua elemen array, satu elemen pada satu waktu.
  2. Selain itu, kami melacak status elemen target jika ada dalam array.
  3. Segera setelah kami menemukan elemen ini, kami mengubah status dari false menjadi true .
  4. Setelah perulangan selesai, kami mengembalikan tanda status.
boolean valExist = false;
for (int id : ids) {
   if (inputId == id) {
             valExist = true;
   }
}
return valExist;
Solusi ini berhasil, namun tidak terlalu efisien. Jika Anda melihat kondisi if , Anda akan menyadari bahwa kami sedang menguji kondisi ini untuk semua elemen. Katakanlah elemen yang kita cari adalah elemen pertama, namun loop kita akan tetap berjalan untuk semua elemen. Di sini akan lebih bijaksana untuk keluar dari loop segera setelah kita menemukan elemennya. Dengan melakukan ini, kita akan menghemat perhitungan ketika elemen yang kita cari tidak berada di posisi terakhir.
boolean valExist = false;
for (int id : ids) {
    if (inputId == id) {
                valExist = true;
                break;
     }
}
return valExist;
Anda dapat membuat kode Anda lebih ringkas dengan menggunakan return . Kita dapat mengembalikan nilai true segera setelah kita melihat elemen yang kita cari, jika tidak, kita akan mengembalikan nilai false segera setelah perulangan selesai. Dan kita tidak perlu membuat dan memelihara variabel status.
for (int id : ids) {
      if (inputId == id) {
                return true;
       }
  }
  return false;

Metode 2

  1. Kita bisa menggunakan ArrayList yang berisi metode yang secara default mencari elemen target dalam daftar.
  2. Karena metode ini disediakan oleh List , kita perlu mengubah array primitif kita menjadi sebuah daftar.
  3. Kita dapat menggunakan string lambda tunggal yang mengubah primitif menjadi tipe objek dan membuat daftar darinya.
    return Arrays.asList(Arrays.stream(ids).boxed().toArray())
                  .contains(inputId);
  4. Kita dapat menggunakan Java 8 Stream API untuk membuat kode kita berfungsi dan lebih pendek.
  5. Untuk memahami cara kerja Stream API dengan aliran, kita perlu mengonversi array masukan menjadi aliran.
  6. Arrays.stream mengambil array input dan mengubahnya menjadi stream.
  7. Sekarang kita memiliki thread, kita dapat menggunakan banyak metode yang berguna, salah satunya adalah anyMatch . Ia mengembalikan elemen yang cocok dengan predikat (id == inputId) .
  8. Semua ini membuat kode kita lebih pendek dan lebih mudah dibaca.
    return Arrays.stream(ids)
              .anyMatch(id -> id == inputId);

Metode 3 (dioptimalkan)

Ya, kode yang ditunjukkan di atas berfungsi dan mudah dibaca, namun kita masih perlu mengunjungi dan membandingkan setiap elemen dalam aliran.
  1. Jika memori tidak menjadi masalah dan kita ingin mengoptimalkan perhitungan, maka salah satu hal yang dapat kita lakukan di sini adalah membuat satu set dari array input.
  2. Kita dapat kembali menggunakan kode gaya fungsional untuk mengonversi array primitif menjadi Set .
  3. Sekarang kita memiliki Set , kita dapat mencari elemen dalam jangka waktu yang konstan.
S
et<Integer> idsSet = Arrays.stream(ids).boxed().collect(Collectors.toSet());
return idsSet.contains(inputId);

Bonusnya

Mencari satu elemen dapat dianggap sebagai operasi umum, namun yang lebih umum adalah mencari beberapa elemen dalam sebuah array. Dalam hal ini, jika kita tidak menggunakan Set , kita akan memiliki dua loop dan kompleksitas waktu akan bertambah untuk mengalikan panjang kedua koleksi. Di bawah ini adalah contoh di mana kita mengonversi salah satu array sebagai satu set dan kemudian melakukan iterasi pada array lainnya dan melakukan pencarian dalam operasi set. Dengan melakukan ini, kami meningkatkan memori dan pada saat yang sama menghemat perhitungan.
int[] targetIds = { 1, 3, 6, 88, 999, 34, 44, 55};
int[] ids = { 1,2,13,14,15,3,10,11,12,4,5,6,7,8,9 };


Set<Integer> idsSet = Arrays.stream(ids).boxed().collect(Collectors.toSet());
return Arrays.stream(targetIds)
            .boxed()
            .filter(id -> !idsSet.contains(id))
            .mapToInt(a -> a)
            .toArray();

Apa itu Java Thread Lokal dan bagaimana cara menggunakannya

Sumber: Medium Pada artikel ini, kita akan melihat Java Thread Lokal dan cara menggunakannya secara efektif di aplikasi Java Anda. Rehat kopi #221.  Tiga cara untuk menemukan elemen dalam array Java.  Apa itu Java Thread Lokal dan cara menggunakannya - 2Java Thread Local adalah fitur canggih yang memungkinkan pengembang membuat variabel hanya untuk thread tertentu. Ini berarti bahwa setiap thread dapat memiliki salinan variabelnya sendiri, dan perubahan yang dilakukan pada variabel di satu thread tidak akan mempengaruhi nilainya di thread lain.

Apa itu Thread Lokal

Thread Lokal adalah kelas di Java API yang memungkinkan Anda membuat variabel lokal untuk thread tertentu. Artinya, setiap thread memiliki salinan variabelnya sendiri, dan perubahan yang dilakukan pada variabel di satu thread tidak mempengaruhi nilainya di thread lain. Hal ini menjadikan Thread Local solusi ideal untuk menyimpan data spesifik thread seperti informasi autentikasi pengguna, koneksi database, atau informasi spesifik thread lainnya.

Bagaimana Thread Lokal Bekerja di Java

Untuk menggunakan Thread Lokal di aplikasi Java, Anda harus terlebih dahulu membuat instance kelas Thread Lokal . Hal ini dapat dilakukan dengan memanggil konstruktor ThreadLocal , yang akan membuat instance baru dari kelas ini. Selanjutnya, dengan membuat objek Thread Local , Anda dapat menggunakannya untuk menyimpan dan mengambil data spesifik thread. Berikut ini contoh cara menggunakan Thread Lokal di aplikasi Java Anda:
public class MyThreadLocalClass {
  private static final ThreadLocal<String> threadLocal = new ThreadLocal<>();

  public static void set(String value) {
    threadLocal.set(value);
  }

  public static String get() {
    return threadLocal.get();
  }
}
Dalam contoh ini, kita membuat objek Thread Local bernama threadLocal bertipe String . Kami juga membuat dua metode: set() dan get() yang memungkinkan kami menyimpan dan mengambil nilai variabel Thread Local . Untuk menyimpan nilai dalam variabel Thread Lokal , kita cukup memanggil metode set() dan meneruskan nilai yang ingin kita simpan. Misalnya, kita dapat memanggil MyThreadLocalClass.set("Hello, World!") untuk menyimpan string “Hello, World!” dalam variabel Thread Lokal . Untuk mendapatkan nilai variabel Thread Local , kita cukup memanggil metode get() . Misalnya, kita dapat memanggil String value = MyThreadLocalClass.get() untuk mendapatkan nilai variabel Thread Local .

Rekomendasi untuk bekerja dengan Thread Lokal

Meskipun Thread Local dapat menjadi alat yang ampuh dalam aplikasi Java Anda, penting untuk menggunakannya dengan benar untuk menghindari potensi masalah. Berikut adalah beberapa pedoman yang perlu diingat ketika menggunakan Thread Lokal :
  1. Gunakan Thread Lokal hanya jika diperlukan: hanya untuk data spesifik thread. Jika data tidak spesifik untuk thread, maka harus disimpan dengan cara lain.
  2. Hindari penggunaan memori yang berlebihan: Thread Lokal dapat menghabiskan banyak memori jika tidak digunakan dengan hati-hati. Pastikan untuk menghapus variabel Thread Lokal ketika tidak lagi diperlukan untuk menghindari penggunaan memori yang berlebihan.
  3. Gunakan Thread Lokal dengan hati-hati di lingkungan multi-thread: penting untuk memahami potensi risiko dan keterbatasannya. Pastikan untuk menguji kode Anda secara menyeluruh untuk memastikan bahwa Thread Lokal berfungsi seperti yang diharapkan di lingkungan spesifik Anda.

Kesimpulan

Java Thread Local adalah alat hebat yang memungkinkan pengembang membuat variabel hanya untuk thread tertentu. Menggunakan Thread Local , Anda dapat menyimpan data spesifik thread, seperti informasi autentikasi pengguna, koneksi database, atau informasi spesifik thread lainnya. Meskipun Thread Local dapat menjadi alat yang ampuh, penting untuk menggunakannya dengan benar untuk menghindari potensi masalah. Dengan mengikuti praktik terbaik dan menguji kode, Anda dapat menggunakannya secara efektif untuk meningkatkan kinerja dan keandalan aplikasi Java Anda.
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION