Inicializácia polí v Jave
1. Prehľad
V tomto rýchlom výučbe sa pozrieme na rôzne spôsoby, ako môžeme inicializovať pole, a na jemné rozdiely medzi nimi.
2. Jeden prvok po druhom
Začnime jednoduchou metódou založenou na slučke:
pre (int i = 0; i <pole.length; i ++) {pole [i] = i + 2; }
A pozrime sa tiež, ako môžeme inicializovať viacrozmerné pole po jednom prvku:
pre (int i = 0; i <2; i ++) {for (int j = 0; j <5; j ++) {pole [i] [j] = j + 1; }}
3. V čase vyhlásenia
Poďme teraz inicializovať pole v čase deklarácie:
Reťazcové pole [] = nové Reťazec [] {"Toyota", "Mercedes", "BMW", "Volkswagen", "Škoda"};
Pri vytváraní inštancie poľa nemusíme určovať jeho typ:
int pole [] = {1, 2, 3, 4, 5};
Upozorňujeme, že pomocou tohto prístupu nie je možné inicializovať pole po deklarácii. Pokus o to bude mať za následok chybu kompilácie.
4. Používanie Arrays.fill ()
The java.util.Arrays trieda má pomenovaných niekoľko metód vyplniť () ktoré prijímajú rôzne typy argumentov a vyplňujú celé pole rovnakou hodnotou:
dlhé pole [] = nové dlhé [5]; Arrays.fill (pole, 30);
Metóda má tiež niekoľko alternatív, ktoré nastavujú rozsah poľa na konkrétnu hodnotu:
int pole [] = nové int [5]; Arrays.fill (pole, 0, 3, -50);
Metóda akceptuje pole, index prvého prvku, počet prvkov a hodnotu.
5. Používanie Arrays.copyOf ()
Metóda Arrays.copyOf () vytvorí nové pole skopírovaním iného poľa. Metóda má veľa preťažení, ktoré prijímajú rôzne typy argumentov.
Pozrime sa na krátky príklad:
int pole [] = {1, 2, 3, 4, 5}; int [] copy = Arrays.copyOf (pole, 5);
Niekoľko poznámok tu:
- Metóda akceptuje zdrojové pole a dĺžku kópie, ktorá sa má vytvoriť
- Ak je dĺžka väčšia ako dĺžka poľa, ktoré sa má kopírovať, ďalšie prvky sa inicializujú pomocou svojich predvolených hodnôt
- Ak zdrojové pole nebolo inicializované, potom a NullPointerException dostane vyhodený
- Ak je dĺžka zdrojového poľa záporná, potom a NegativeArraySizeException je hodená
6. Používanie Arrays.setAll ()
Metóda Arrays.setAll () nastaví všetky prvky poľa pomocou funkcie generátora:
int [] pole = new int [20]; Arrays.setAll (pole, p -> p> 9? 0: p); // [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
Ak je funkcia generátora nulová, potom a NullPointerException je hodená.
7. Používanie ArrayUtils.clone ()
Nakoniec využime ArrayUtils.clone () API z Apache Commons Lang 3 - ktoré inicializuje pole vytvorením priamej kópie iného poľa:
char [] pole = nový char [] {'a', 'b', 'c'}; char [] copy = ArrayUtils.clone (pole);
Upozorňujeme, že táto metóda je preťažená pre všetky primitívne typy.
8. Záver
V tomto článku sme preskúmali rôzne spôsoby inicializácie polí v Jave.
Plná verzia kódu je ako vždy k dispozícii na GitHub.