JavaRush /Blog Jawa /Random-JV /Ngopi #221. Telung cara kanggo nemokake unsur ing array J...

Ngopi #221. Telung cara kanggo nemokake unsur ing array Jawa. Apa Java Thread Lokal lan carane nggunakake

Diterbitake ing grup

Telung cara kanggo nemokake unsur ing array Jawa

Sumber: Asyncq Kiriman iki bakal mbantu sampeyan luwih ngerti macem-macem cara kanggo nggoleki unsur ing array ing Jawa. Ngopi #221.  Telung cara kanggo nemokake unsur ing array Jawa.  Apa iku Java Thread Local lan carane nggunakake - 1Nemokake unsur tartamtu ing sakumpulan nilai minangka operasi sing umum banget lan asring digunakake ing pangembangan piranti lunak. Ana macem-macem pendekatan kanggo ngatasi masalah iki, saka prasaja nganti optimal. Ayo padha ndeleng.

Input data

Array input ngemot data id primitif lan kita kudu ngerti yen ngemot id->3.
int[] ids = { 1,2,13,14,15,3,10,11,12,4,5,6,7,8,9 };
int inputId = 3;

Cara 1 (simple)

  1. We ngunjungi kabeh unsur Uploaded, siji unsur ing wektu.
  2. Kajaba iku, kita nglacak status unsur target yen ana ing array.
  3. Sanalika kita nemokake unsur iki, kita ngalih status saka palsu kanggo bener .
  4. Sawise daur ulang rampung, kita bali gendera status.
boolean valExist = false;
for (int id : ids) {
   if (inputId == id) {
             valExist = true;
   }
}
return valExist;
Solusi iki bisa digunakake, nanging ora efisien banget. Yen sampeyan ndeleng kondisi yen , sampeyan bakal ngerti yen kita lagi nyoba kondisi iki kanggo kabeh unsur. Ayo dadi ngomong unsur kita lagi looking for iku unsur pisanan, nanging daur ulang kita isih bakal terus kanggo mbukak kanggo kabeh unsur. Ing kene bakal luwih wicaksana kanggo metu saka daur ulang sanalika kita nemokake unsur kasebut. Kanthi nindakake iki, kita bakal ngirit petungan nalika unsur sing kita goleki ora ana ing posisi pungkasan.
boolean valExist = false;
for (int id : ids) {
    if (inputId == id) {
                valExist = true;
                break;
     }
}
return valExist;
Sampeyan bisa nggawe kode luwih ringkes kanthi nggunakake bali . Kita bisa bali bener sanalika kita ndeleng unsur kita lagi looking for, digunakake kita bali palsu sanalika daur ulang rampung. Lan kita ora perlu nggawe lan njaga variabel negara.
for (int id : ids) {
      if (inputId == id) {
                return true;
       }
  }
  return false;

Metode 2

  1. Kita bisa nggunakake ArrayList sing ngemot metode sing kanthi gawan nggoleki unsur target ing dhaptar.
  2. Amarga cara iki diwenehake dening List , kita kudu ngowahi array primitif dadi dhaptar.
  3. Kita bisa nggunakake senar lambda siji sing ngowahi primitif kanggo jinis obyek lan nggawe dhaptar saka iku.
    return Arrays.asList(Arrays.stream(ids).boxed().toArray())
                  .contains(inputId);
  4. Kita bisa nggunakake Java 8 Stream API kanggo nggawe kode kita fungsi lan luwih cendhek.
  5. Kanggo mangerteni carane API Stream bisa digunakake karo stream, kita kudu ngowahi array input dadi stream.
  6. Arrays.stream njupuk array input lan ngowahi dadi stream.
  7. Saiki kita duwe benang, kita bisa nggunakake akeh cara sing migunani, salah sijine yaiku anyMatch . Iki ngasilake unsur sing cocog karo predikat (id == inputId) .
  8. Kabeh iki ndadekake kode kita luwih cendhek lan luwih gampang diwaca.
    return Arrays.stream(ids)
              .anyMatch(id -> id == inputId);

Cara 3 (dioptimalake)

Ya, kode sing ditampilake ing ndhuwur bisa digunakake lan gampang diwaca, nanging kita isih kudu ngunjungi lan mbandhingake saben unsur ing aliran kasebut.
  1. Yen memori ora dadi masalah lan kita pengin ngoptimalake petungan, mula salah sawijining perkara sing bisa ditindakake ing kene yaiku nggawe set saka array input.
  2. Kita bisa maneh nggunakake kode gaya fungsional kanggo ngowahi array primitif menyang Set a .
  3. Saiki kita duwe Set , kita bisa nelusuri unsur sajrone wektu sing tetep.
S
et<Integer> idsSet = Arrays.stream(ids).boxed().collect(Collectors.toSet());
return idsSet.contains(inputId);

Bonus

Nggoleki unsur siji bisa dianggep minangka operasi umum, nanging sing luwih umum yaiku nggoleki macem-macem unsur ing array. Ing kasus iki, yen kita ora nggunakake Set , kita bakal duwe rong puteran lan kerumitan wektu bakal nambah kanggo multiply dawa rong koleksi. Ing ngisor iki conto ing ngendi kita ngowahi salah siji saka susunan minangka pesawat lan banjur iterate liwat array liyane lan nindakake panelusuran ing operasi pesawat. Kanthi nindakake iki, kita nambah memori lan ing wektu sing padha ngirit petungan.
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 Java Thread Lokal lan carane nggunakake

Sumber: Sedheng Ing artikel iki, kita bakal ndeleng Java Thread Local lan cara nggunakake kanthi efektif ing aplikasi Java. Ngopi #221.  Telung cara kanggo nemokake unsur ing array Jawa.  Apa iku Java Thread Local lan carane nggunakake - 2Java Thread Local minangka fitur kuat sing ngidini pangembang nggawe variabel mung kanggo thread tartamtu. Iki tegese saben utas bisa duwe salinan variabel dhewe, lan owah-owahan sing digawe menyang variabel ing siji utas ora bakal mengaruhi nilai ing utas liyane.

Apa Thread Lokal

Thread Local minangka kelas ing Java API sing ngidini sampeyan nggawe variabel sing lokal kanggo thread tartamtu. Tegese, saben thread duwe salinan variabel dhewe, lan owah-owahan sing digawe kanggo variabel ing siji thread ora mengaruhi nilai ing thread liyane. Iki ndadekake Thread Local dadi solusi sing cocog kanggo nyimpen data khusus thread kayata informasi otentikasi pangguna, sambungan database, utawa informasi khusus thread liyane.

Carane Thread Lokal Works in Java

Kanggo nggunakake Thread Local ing aplikasi Java, sampeyan kudu nggawe conto kelas Thread Local . Iki bisa ditindakake kanthi nelpon konstruktor ThreadLocal , sing bakal nggawe conto anyar saka kelas iki. Sabanjure, kanthi nggawe obyek Thread Local , sampeyan bisa nggunakake kanggo nyimpen lan njupuk data khusus thread. Iki conto carane nggunakake Thread Local ing aplikasi Java:
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();
  }
}
Ing conto iki, kita nggawe obyek Thread Local disebut threadLocal saka jinis String . Kita uga nggawe rong cara: set () lan entuk () sing ngidini kita nyimpen lan njupuk nilai variabel Thread Local . Kanggo nyimpen nilai ing variabel Lokal Utas , kita mung nelpon cara set () lan pass ing Nilai kita arep kanggo nyimpen. Contone, kita bisa nelpon MyThreadLocalClass.set("Hello, World!") kanggo nyimpen string "Hello, World!" ing variabel Utas Lokal . Kanggo entuk nilai variabel Thread Local , kita mung nelpon metode get() . Contone, kita bisa nelpon nilai String = MyThreadLocalClass.get () kanggo entuk nilai variabel Thread Local .

Rekomendasi kanggo nggarap Thread Local

Sanajan Thread Local bisa dadi alat sing kuat ing aplikasi Java, penting kanggo nggunakake kanthi bener supaya ora ana masalah. Ing ngisor iki sawetara pedoman sing kudu dielingake nalika nggunakake Thread Local :
  1. Gunakake Thread Local mung yen perlu: mung kanggo data khusus thread. Yen data kasebut ora spesifik, kudu disimpen kanthi cara liya.
  2. Ngindhari panggunaan memori sing akeh banget: Thread Local bisa nggunakake jumlah memori sing akeh yen ora digunakake kanthi ati-ati. Pesthekake mbusak variabel Lokal Utas nalika ora dibutuhake maneh kanggo ngindhari panggunaan memori sing akeh banget.
  3. Gunakake Thread Local kanthi ati-ati ing lingkungan multi-threaded: penting kanggo mangerteni risiko lan watesan sing potensial. Priksa manawa nyoba kode sampeyan kanthi teliti kanggo mesthekake yen Thread Local bisa digunakake kaya sing dikarepake ing lingkungan tartamtu sampeyan.

Kesimpulan

Java Thread Local minangka alat sing apik sing ngidini pangembang nggawe variabel mung kanggo utas tartamtu. Nggunakake Thread Local , sampeyan bisa nyimpen data khusus thread, kayata informasi otentikasi pangguna, sambungan database, utawa informasi khusus thread liyane. Sanajan Thread Local bisa dadi alat sing kuat, penting kanggo nggunakake kanthi bener kanggo ngindhari masalah potensial. Kanthi ngetutake praktik paling apik lan nguji kode sampeyan, sampeyan bisa nggunakake kanthi efektif kanggo ningkatake kinerja lan linuwih aplikasi Java.
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION