JavaRush /Java Blog /Random-TK /Iki gezek ýaýyň başlangyjy
Joysi
Dereje

Iki gezek ýaýyň başlangyjy

Toparda çap edildi

1. Iki gezek ýaýyň başlangyjy

Jübüt ýaýlary ulanyp başlamak ( mundan beýläk goşa ýaýyň başlangyjy diýilýär ), beýannama bilen bir wagtda sanaw, düzmek we karta ýaly kolleksiýalary döretmek üçin Java guralydyr.
Iki gezek ýaýyň başlangyjy - 1
Haçan-da goldanýan önümleriň ýa-da walýutalaryň sanawy ýaly kesgitli elementleri bolan sanawlar gerek bolsa, sanawy başlamak bilen bir wagtda yglan etmek koduň okalmagyny ýokarlandyrýar. Kodda bir wagtyň özünde başlangyç bilen kolleksiýalary döretmek üçin başga standart usullar ýoklugy sebäpli, goşa dykyz başlangyç meşhurlyga eýe bolýar. Gynansagam, beýleki programmirleme dillerinden tapawutlylykda Java sözleriň ýygyndysyny goldamaýar. Bu çäklendirme sebäpli, hatda az sanly elementi bilenadd() üýtgedip bolmaýan sanaw döretmek , islenýän elementleri soňky gaplamak bilen goşmak üçin gaýtalanýan jaň görnüşinde köp setir kod ýazmaga mejbur edýär :
List<Integer> list = new ArrayList<>();
list.add(2);
list.add(3);
list.add(5);
list.add(7);
List<Integer> unmodifiableList = Collections.unmodifiableList(list);
Bu ýönekeýleşdirilip bilinjek zerur däl düşündiriş. Statik sanawlary özümiz üçin amatly görnüşde dolduralyň, ýagny başlangyç wagtynda gönüden-göni statiki bloklarda, bu başlangyç Double bracebize kömek eder we hemme zady bir setirde ýazmaga mümkinçilik berer:
List<Integer> list = Collections.unmodifiableList(new ArrayList<Integer>() {{
        add(2);
        add(3);
        add(5);
}});
Şonuň ýaly-da, Double bracebaşlangyç bize bahalary doldurmaga kömek eder we HashMap:
Map<Integer, String> intToString = new HashMap<Integer, String>(){{
         put(1, "one");
         put(2, "two");
         put(3, "three");
 }};
Bularyň hemmesi gaty owadan görünýär, ýöne kemçilikleri bar, bu bolsa goşa dykyz başlangyjy anti-nagyş edýär. Olara indiki bapda has giňişleýin serederis.

Iki goşa dyrnagyň başlangyjy we zyýany.

Doubleýaýyň başlangyjy näbelli içki synpyň döredilmegini ulanýar . Ilkibaşda üstünde gizlenen zat, Double bracebaşlangyç başlangyç her gezek ulananyňyzda öz başlangyjy bilen hasam başlangyç synp döredýär. Mundan başga-da, ýadyň syzmagyna sebäp bolup biljek bu hususy synp üçin gizlin salgylanma ulanylýar. Şeýle hem, näbelli synpyň içine girip bilmeýändigimiz üçin arwah operatoryny (göwher operatory <>) ulanyp bilmersiňiz.
.
_ {_ {_ näbelli) synpyna degişlidir.)
Taraz:
  1. Kodda setirleri azaltmak
  2. Bir aňlatmada döretmek we başlangyç.
Minuslar:
  1. Sizden gizlenen anonim synp döretmek.
  2. Her gezek ulananymyzda, mysal üçin goşmaça çykdajylar bolýar.
  3. Her gezek ýadyň syzmagyna sebäp bolup biljek gizlin salgylanma döredilýär.
Karar: aboveokardaky zyýany we goşa dyrnak üçin alternatiwalaryň bolmagy sebäpli, başlangyç Java dünýäsinde anti-nagyş hasaplanýar. Pişigi halas ediň

Java-da goşa ýaýyň başlangyjy üçin alternatiwalar

Gowy habar, Java-da şol bir maksatlara ýetmegiň başga ýollary bar. Kodlaryň bir setirinde, aşakda görkezilişi ýaly, Toplama synpyndan Göçürmek konstruktoryny ulanyp, “ArrayList” -iň döredilmegini we başlangyjyny amala aşyryp bileris:
List<Integer> list = Collections.unmodifiableList(new ArrayList<>(Arrays.asList(2, 3, 5)));
Arrays.asList()ArrayListgöçürme konstruktoryna berlen kesgitlenen uzynlygyň sanawyny bize gaýtaryp berer . Arrays.asList()Yzyna gaýdyp gelen we kesgitlenen uzynlykdaky sanawlaryň arasyndaky tapawudy ýadyňyzdan çykarmaň - Collections.unmodifiableList()elementlerini goşup ýa-da aýryp bilmersiňiz , ýöne yzyna gaýtarylan sanaw bilen edip bolmajak ArrayListbir elementi indeks arkaly üýtgedip bilersiňiz . Kiçijik sanaw almak isleseňiz, bu iň oňat usul, beýleki kolleksiýalar üçin has aýdyň bolmasa-da , -a döretmezden ozal döretmeli bolarsyňyz . Thisöne bu entegem goşa dykyzlandyryşdan has gowudyr, sebäbi bu ýagdaýda her gezek ulanylanda goşmaça içerki anonim synp döredilmeýär. Java 8 bilen işleýän bolsaňyz, başga bir alternatiw usulyňyz bar. JDK 8 Stream API, çykyş usullaryny kolleksiýa birleşdirip, ownuk kolleksiýalary döretmäge kömek eder : set()Collections.unmodifiableList()SetListSetStream FactoryList
List<String> list = Collections.unmodifiableList(Stream.of("abc", "bcd", "cde").collect(toList()));
Usuly aşakdaky ýaly Setulanyp bilersiňiz : Collectors.toSet()Collectors.toList()
Set<String> set = Collections.unmodifiableSet(Stream.of("abc", "bcd", "cde").collect(toSet()));
Theeri gelende aýtsak, Stream collectusullar döredýän kolleksiýalarynyň üýtgemelerden goralmagyny kepillendirmeýär. Java 8-de, yzyna gaýdyp gelen kolleksiýalar (- ArrayList, HashSetwe ýaly HashMap) adaty bir zat (olary üýtgedip bileris), ýöne bu hakykat geljekki JDK neşirlerinde düzedilip bilner. Häzirlikçe Double braceJava-da başlangyç hakda. Bu şablon synaglar we görkezişler üçin kabul ederliklidir, ýöne önümçiligi ulanmak üçin ýeterlik däl. Özboluşly kemçilikleri sebäpli, goşa dyrnagyň başlangyjy şu günler, esasanam elýeterli alternatiwalary göz öňünde tutup, anti-nagşa öwrüldi. Özümem bu gurluşy statiki kartalary başlatmak üçin ulanýaryn we hut şu. Sebäbi, konstruktorynda döretmek bilen birleşip, Listdöretmegi makul bildim . Java 8 ulansam - Stream API ulanyp dizaýn we . Degişli makalalar: Bu sapakdan lezzet alýan bolsaňyz we Java programmirleme nagyşlary, ýörelgeleri we iň oňat tejribeleri barada has giňişleýin öwrenmek isleseňiz, sahypamyzdaky beýleki makalalary hem gözläp bilersiňiz . Maslahat berilýän okamak: nagyşlar we iň oňat tejribeler barada has giňişleýin öwrenmek isleseňiz, Joşua Bloçyň “Netijeli programmirleme” programmasyny okamaly bolsaňyz , hiç bir kitap ýerini alyp bilmez. Java-da eýýäm ökde bolsaňyz we dizaýn nagyşlary hakda kitap gözleýän bolsaňyz, gyzykly we okamak aňsat bolan gülkünç stil, “Ilki bilen kelläňize üns beriň. Dizaýn nagyşlary " . CollectionsArray.asListcollect()
Terjimeçiden: Bloch-yň asyl kitabyna bilkastlaýyn baglanyşyk berdim, sebäbi rus diline terjimesi şowsuz (mysal üçin, Gurluşykçy = konstruktor).
Makalanyň terjimesi Java-da goşa ýaýyň başlangyjy näme? Nusga garşy mysal (2015-nji ýylyň oktýabr aýynda neşir edildi).
Teswirler
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION