JavaRush /Блоги Java /Random-TG /Маҷмӯаҳо дар Java | Маҷмӯаҳои Java

Маҷмӯаҳо дар Java | Маҷмӯаҳои Java

Дар гурӯҳ нашр шудааст
Салом! Дар тӯли чанд дарсҳои охир мо дар азхудкунии ArrayList ба пешрафти бузург ноил шудем. Аммо, дар ин муддат мо танҳо амалҳои оддитаринро иҷро кардем: нест кардан, ворид кардан, баровардан ба консол. Албатта, ин охири рӯйхати мушкилоте нест, ки таҳиягарон ҳангоми истифодаи ArrayList дучор меоянд . Дар хотир доред, ки лексия дар бораи массивҳо ва синфи массивҳо ? Он аз ҷониби созандагони Java махсус барои ҳалли мушкилоти умумӣ, ки барномасозон ҳангоми кор бо массивҳо дучор меоянд, таҳия шудааст. Дар бораи ArrayList чӣ гуфтан мумкин аст ? Албатта, баъзе рӯйхати вазифаҳои маъмулӣ барои ӯ низ вуҷуд дорад. Оё ҳамаи онҳо дар ягон синфи алоҳида амалӣ карда шуданд ё мо бояд ҳар дафъа рафтори дилхоҳро дастӣ нависем? Албатта, ба шумо лозим нест, ки ҳама чизро худатон нависед. Амалҳои маъмултарине, ки ҳангоми истифодаи коллексияҳо дар Java иҷро мешаванд, аллакай дар синфи махсуси статикии Collections амалӣ карда шудаанд. Маҷмӯаҳои синф - 1

Маҷмӯаҳо дар Java

"Коллективҳо" номи умумӣ барои якчанд сохторҳои додаҳо дар Java мебошад. Маълумотро бо роҳҳои гуногун нигоҳ доштан мумкин аст. То ҳол мо танҳо синфи ArrayList-ро омӯхтем , ки дар он маълумот дар массив нигоҳ дошта мешавад. Мо бо коллекцияхои бокимонда баъдтар шинос мешавем. Ҳоло фаҳмидани он кифоя аст, ки синфи Collections барои кор на танҳо бо ArrayList, балки бо дигар намудҳои коллексияҳо дар Java тарҳрезӣ шудааст (аз ин рӯ, дар асл номи он). Пас, синфи Collections ба шумо имкон медиҳад, ки ҳангоми кор бо ArrayList кадом вазифаҳоро ҳал кунед? Аввалин ва возеҳтарин навъбандӣ аст. Дар лексия дар бораи массивҳо мо мисолро бо рақамҳо дида баромадем ва ҳоло биёед мисолро бо сатр дида мебароем. Барои ҷудо кардани мундариҷаи коллексияҳо, синфи Коллексияҳо усули зеринро амалӣ мекунад sort():
public class Main {

   public static void main(java.lang.String[] args) {

       String mercury = new String("Mercury");
       String venus = new String("Venus");
       String earth = new String("Earth");
       String mars = new String("Mars");
       String jupiter = new String("Jupiter");
       String saturn = new String("Saturn");
       String uranus = new String("Uranus");
       String neptune = new String("Neptune");

       ArrayList<String> solarSystem = new ArrayList<>(Arrays.asList(mercury, venus, earth, mars,
               jupiter, saturn, uranus, neptune));
       Collections.sort(solarSystem);
       System.out.println(solarSystem);

   }
}
Хулоса:

[Венера, Земля, Марс, Меркурий, Нептун, Сатурн, Уран, Юпитер]
Сатрҳо аз рӯи алифбо мураттаб шудаанд! Чаро бо тартиби алифбо? Синф Stringбарномарезӣ шудааст, то дақиқ муайян кунад, ки чӣ гуна сатрҳо бо ҳамдигар муқоиса карда мешаванд (дақиқ аз рӯи алифбо). Барои дарсҳое, ки шумо худатон эҷод мекунед, шумо метавонед механизми муқоисавии худро амалӣ кунед, аммо мо дар ин бора дар лексияҳои дигар сӯҳбат хоҳем кард. Илова бар ин, синфи Коллексияҳо ба шумо имкон медиҳад, ки элементи ҳадди ақал ва максималиро дар ArrayList. Ин бо истифода аз усулҳои min()зерин анҷом дода мешавад max():
public static void main(java.lang.String[] args) {

   ArrayList<Integer> numbers = new ArrayList<>(Arrays.asList(1,2,3,4,5,6,7));
   System.out.println(Collections.max(numbers));
   System.out.println(Collections.min(numbers));

}
Хулоса:

7
1
Ин, албатта, хеле қулайтар аз навиштани codeи дастӣ барои гузаштан аз тамоми унсурҳо ва ҷустуҷӯи элементи калонтарин/хурдтарин аст :) Дигар усули бениҳоят муфид аст reverse(). Агар ба мо лозим ояд, ки рӯйхатро «баргардон» кунем, то элементҳо дар тартиби баръакс бошанд, мо инро чӣ тавр иҷро мекардем? Эҳтимол худатон навиштани чунин алгоритм он қадар осон набуд :) Хушбахтона, усул reverse()аллакай медонад, ки чӣ тавр ин корро кардан лозим аст. Масалан, ба мо маъқул нест, ки ин усул sort()сайёраҳои моро аз рӯи тартиби алифбо мураттаб кардааст ва мо мехоҳем тартибро ба баръакс - аз Z ба A иваз кунем:
public class Main {

   public static void main(java.lang.String[] args) {

       String mercury = new String("Mercury");
       String venus = new String("Venus");
       String earth = new String("Earth");
       String mars = new String("Mars");
       String jupiter = new String("Jupiter");
       String saturn = new String("Saturn");
       String uranus = new String("Uranus");
       String neptune = new String("Neptune");

       ArrayList<String> solarSystem = new ArrayList<>(Arrays.asList(mercury, venus, earth, mars,
               jupiter, saturn, uranus, neptune));
       Collections.sort(solarSystem);
       Collections.reverse(solarSystem);
       System.out.println(solarSystem);

   }
}
Хулоса:

[Юпитер, Уран, Сатурн, Нептун, Меркурий, Марс, Земля, Венера]
Воқеан, дар ин ҷо мо аксар вақт дар бораи навъбандӣ, тартиби элементҳо ва ғайра сӯҳбат мекунем. Чӣ мешавад, агар вазифаи мо комилан баръакс бошад? Масалан, мо кушиш дорем, ки механизми лотереяро чорй кунем. Мо ба чарх 100 рақам илова кардем, ки бояд дар як вақт дар экран пайдо шаванд. Аввалин иштироккунандае, ки ҳамаи рақамҳои дар чипта бударо хат кашидааст, ғолиб мешавад. Татбиқи чунин механизм бо истифода аз усул хеле осон аст shuffle():
public class Main {

   public static void main(java.lang.String[] args) {

       ArrayList<Integer> lottery = new ArrayList<>(100);
       for (int i = 1; i <= 100; i++) {

           lottery.add(i);//add numbers from 1 to 100 to the drum
       }

       Collections.shuffle(lottery);//mix
       System.out.println("Attention! The first 10 numbers appear from the drum!");
       for (int i = 0; i < 10; i++) {

           System.out.println(lottery.get(i));
       }

   }
}
Хулоса:

Внимание! Из барабана появляются первые 10 чисел!
32
61
4
81
25
8
66
35
42
71
Ин хеле оддӣ аст! Мушкилот ҳал шуд ва порчаи бозии мо навишта шудааст :) Акнун биёед вазъияти дигарро тасаввур кунем. Пештар, мо рӯйхатеро solarSystemбо сайёраҳои дар он номбаршуда тартиб додем. Ва ба назар чунин мерасад, ки ба ҳама мувофиқат мекунад, агар барои як чиз набошад: шумо метавонед элементҳоро аз он хориҷ кунед ва унсурҳои нав илова кунед! Ин бешубҳа рафтори мо нест: системаи офтобӣ дар барномаи мо бояд дар ҳолати бетағйир бошад. Синфи Коллексияҳо усули хеле ҷолиб дорад - unmodifiableList(). Он versionи тағирнопазири рӯйхати додашударо эҷод мекунад. Ба он элемент илова кардан ё хориҷ кардан ғайриимкон хоҳад буд. Дар мавриди рӯйхати сайёраҳои системаи офтобӣ, маҳз ҳамин чиз ба мо лозим аст!
public class Main {

   public static void main(java.lang.String[] args) {

       String mercury = new String("Mercury");
       String venus = new String("Venus");
       String earth = new String("Earth");
       String mars = new String("Mars");
       String jupiter = new String("Jupiter");
       String saturn = new String("Saturn");
       String uranus = new String("Uranus");
       String neptune = new String("Neptune");

       List<String> solarSystem = Collections.unmodifiableList(new ArrayList<>(Arrays.asList(mercury, venus, earth, mars,
               jupiter, saturn, uranus, neptune)));
       solarSystem.add("Pluto");//try to add a new element
   }
}

Exception in thread "main" java.lang.UnsupportedOperationException
	at java.util.Collections$UnmodifiableCollection.add(Collections.java:1075)
	at Main.main(Main.java:21)
Хатогӣ: solarSystemАкнун шумо наметавонед чизе илова кунед! Ягона чизе, ки шумо бояд дар ин ҳолат ба он диққат диҳед, ин аст, ки навъи тағирёбанда бояд List<>, на бошад ArrayList<>(ин усул an objectи маҳз ҳамин намудро бармегардонад, ки барои ҳама намуди рӯйхатҳо маъмул аст). Вазъияти дигари маъмуле, ки ҳангоми кор рух дода метавонад, ин аст, ки барномасоз элементҳоро бо тартиби нодуруст илова кардааст. Агар ин рӯй дод ва Меркурий ва Нептун ногаҳон ҷойҳоро иваз кунанд, усули зерин ба мо кӯмак мекунад, ки ин хатогиро ислоҳ кунем swap():
public class Main {

   public static void main(java.lang.String[] args) {

       String mercury = new String("Mercury");
       String venus = new String("Venus");
       String earth = new String("Earth");
       String mars = new String("Mars");
       String jupiter = new String("Jupiter");
       String saturn = new String("Saturn");
       String uranus = new String("Uranus");
       String neptune = new String("Neptune");

       ArrayList<String> solarSystem = new ArrayList<>(Arrays.asList(neptune, venus, earth, mars
       , jupiter, saturn, uranus, mercury));// wrong planet order
       System.out.println(solarSystem);

       Collections.swap(solarSystem, solarSystem.indexOf(mercury), solarSystem.indexOf(neptune));
       System.out.println(solarSystem);

   }
}
Мо рӯйхати худро ба метод swap(), инчунин индексҳои ду элемент, ки бояд иваз карда шаванд, гузаштем. Лутфан таваҷҷӯҳ намоед: усул махсусан бо индексҳо кор мекунад, на бо истинодҳо. Аз ин рӯ, дар ин ҷо ба мо усул лозим буд ArrayList.indexOf(). Хулоса:

[Нептун, Венера, Земля, Марс, Юпитер, Сатурн, Уран, Меркурий]

[Меркурий, Венера, Земля, Марс, Юпитер, Сатурн, Уран, Нептун]
Дар охир, биёед бо усули хеле ҷолиб шинос шавем - disjoint(). Он тафтиш мекунад, ки оё ду коллексия чорроҳа доранд, яъне ҳадди аққал як унсури якхела. Агар не, бар мегардонад true, агар ҳа, бар мегардонад false.
public class Main {

   public static void main(java.lang.String[] args) {

       String mercury = new String("Mercury");
       String venus = new String("Venus");
       String earth = new String("Earth");
       String mars = new String("Mars");
       String jupiter = new String("Jupiter");
       String saturn = new String("Saturn");
       String uranus = new String("Uranus");
       String neptune = new String("Neptune");

       ArrayList<String> solarSystemPart1 = new ArrayList<>(Arrays.asList(mercury, venus, earth, mars));
       ArrayList<String> solarSystemPart2 = new ArrayList<>(Arrays.asList(jupiter, saturn, uranus, neptune));

       System.out.println(Collections.disjoint(solarSystemPart1, solarSystemPart2));

   }
}
Тавре ки шумо мебинед, унсурҳои ду рӯйхати мо комилан фарқ мекунанд, бинобар ин, барнома true. Ин як синфи ҷолиб ва хеле муфид аст. Мисли он Arrays, ки ӯ барои мо корҳои муқаррарӣ ва ночизро анҷом медиҳад ва ба мо имкон медиҳад, ки ба чизҳои дигар диққат диҳем. Дар бораи он дар ҳуҷҷатҳои Oracle хонед , дар он ҷо усулҳои дигар мавҷуданд.
Шарҳҳо
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION