JavaRush /Java Blog /Random-TK /Java döredijiler tarapyndan köplenç 10 ýalňyşlyk
theGrass
Dereje
Саратов

Java döredijiler tarapyndan köplenç 10 ýalňyşlyk

Toparda çap edildi
Java döredijiler tarapyndan köplenç goýberilýän 10 ýalňyşlyk - 1
Bu sanawda Java döredijileriniň köplenç goýberýän 10 ýalňyşlygy bar .
  1. Bir massiwi ArrayList -e öwürmek .

    Bir massiwi ArrayList -e öwürmek üçin döredijiler köplenç bu usuly ulanýarlar:

    List<String> list = Arrays.asList(arr);

    Arrays.asList()synpyň ArrayListiçerki hususy statiki synpy bolan synp obýektini yzyna getirer we bu synp däl Bu synpda usullar bar , ýöne elementleri goşmak üçin hiç hili usul ýok, ululygy kesgitlenendir . Hakyky döretmek üçin muny ýerine ýetiriň:(private static class)Arraysjava.util.ArrayList.java.util.Arrays.ArrayListset()get()contains()java.util.ArrayList

    ArrayList<String> arrayList = new ArrayList<String>(Arrays.asList(arr));

    Synp konstruktory, ýerine ýetiriş synpdan miras galan java.util.ArrayListinterfeýsi amala aşyrýan ähli obýektleri parametr hökmünde alyp bilerCollectionjava.util.Arrays.ArrayList

    (hususy statiki synp ArrayList <E> AbstractList <E> RandomAccess, java.io.Serializable-i amala aşyrýar).

  2. Belli bir baha üçin bir massiw barlamak.

    Döredijiler köplenç muny edýärler:

    Set<String> set = new HashSet<String>(Arrays.asList(arr));
    return set.contains(targetValue);

    ListKod işleýär, ýöne ony öwürmegiň zerurlygy ýok Set. Öwürmek Setgoşmaça wagt alar. Aslynda hemme zat ýönekeý:

    Arrays.asList(arr).contains(targetValue);

    ýa-da

    for(String s: arr){
    	if(s.equals(targetValue))
    		return true;
    }
    return false;

    Birinji usul has gysga.

  3. Bir elementi Listaýlawdan aýyrmak

    Aýlawdaky elementleri aýyrýan aşakdaky koda serediň:

    ArrayList<String> list = new ArrayList<String>(Arrays.asList("a", "b", "c", "d"));
    for (int i = 0; i < list.size(); i++) {
    	list.remove(i);
    }
    System.out.println(list);

    Netije:

    [b, d]

    Bu çynlakaý ýalňyşlyk bolup çykýar. Bir element aýrylanda ululygy Listazalýar we elementiň görkezijileri üýtgeýär.

    Şonuň üçin indeks ulanyp, aýlawda birnäçe elementi aýyrmak isleseňiz, bu usuldan gaça duruň.

    Iterator ulanmagyň aýlawdaky elementleri aýyrmak üçin dogry çözgütdigini bilip bilersiňiz we stil aýlawynyň for-eachiterator ýaly işleýändigini bilýärsiňiz, ýöne beýle däl.

    Aşakdaky koda serediň:

    ArrayList<String> list = new ArrayList<String>(Arrays.asList("a", "b", "c", "d"));
    
    for (String s : list) {
    	if (s.equals("a"))
    		list.remove(s);
    }

    “ConcurrentModificationException” alarys .

    Dogry etmeli zat:

    ArrayList<String> list = new ArrayList<String>(Arrays.asList("a", "b", "c", "d"));
    Iterator<String> iter = list.iterator();
    while (iter.hasNext()) {
    	String s = iter.next();
    
    	if (s.equals("a")) {
    		iter.remove();
    	}
    }

    Usul next()öňünden çagyrylmalydyr remove().

    Aýlaw stilinde for-eachdüzüji usuly çagyrar remove()we diňe şondan soň next()ýalňyşlyk döreder ConcurrentModificationException. Koda seredip bilersiňiz ArrayList.iterator().

  4. Hashtablegarşy HashMap.

    Degişli ýerine ýetiriş sebäpli “Hashtable” maglumat gurluşynyň adydyr.

    Emma Java -da maglumat gurluşynyň ady HashMap. Arasyndaky esasy tapawutlaryň biri Hashtablewe HashMapsinhronlaşdyrylmagydyr . Şonuň üçin ony nirede Hashtableulanmaly däl .HashtableHashMap

    HashMap vs. TreeMap vs. Hashtable vs. LinkedHashMap .

    Karta interfeýsi barada 10 sany esasy sorag

  5. Mazmuny çäklendirmesiz kolleksiýalary ulanyň

    В Java часто путают коллекции без ограничений по содержимому, и коллекции с маской по типу содержимого. К примеру, для множеств - Set это коллекция без ограничений по содержимому, а Set<?> — коллекция у которой все-таки есть ограничения, но эти ограничения ничего на самом деле не ограничивают. Рассмотрим следующий code, где List без ограничений используется в качестве параметра метода:

    public static void add(List list, Object o){
    	list.add(o);
    }
    public static void main(String[] args){
    	List<String> list = new ArrayList<String>();
    	add(list, 10);
    	String s = list.get(0);
    }

    Данный code выбросит исключение:

    Exception in thread "main" java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String
    	at …

    Использование коллекций без ограничений по содержимому очень опасно, потому что вы не можете быть уверенными в том что там лежит внутри. А для того чтобы понять всю глубину разницы между Set, Set<?> и Set<Object> — почитайте вот эту и эту ссылки.

  6. Уровень доступа

    Очень часто для полей класса разработчики используют модификатор доступа public. Так проще получить meaning поля напрямую. Правильнее использовать How можно более ограниченный доступ к членам класса.

    public, default, protected, and private.

  7. ArrayList против LinkedList

    Когда разработчики не знают чем отличается ArrayList от LinkedList, они используют первый в силу его большей известности. Однако, есть огромная разница в производительности между ними. На самом деле, выбор между ними должен быть продиктован их внутренними особенностями — ArrayList позволяет быстро производить доступ к произвольному элементу массива, а LinkedList — быстро добавлять/удалять элементы в массиве. Почитайте статью по ссылке ArrayList vs. LinkedList чтобы понять причины их разной производительности.

  8. Mutable (Изменяемый) против Immutable (Неизменяемый)

    Неизменяемый an object имеет много преимуществ: простота, безопасность и т.д. Но он требует отдельного an object для каждого нового значения, и за слишком большое количество an objectов придется заплатить понижением производительности. Должен быть баланс при выборе между изменяемым и неизменяемым обьектом.

    В основном чтобы избежать подготовки промежуточных an objectов используется изменяемый an object. Один из классических примеров это конкатенация большого количества строк. Если вы используете неизменяемый an object типа String, то вы создаете много an objectов, которые сразу попадут в сборщик мусора. Это тратит время и энергию процессора, поэтому правильное решение это использование изменяемых обьектов (например StringBuilder).

    String result="";
    for(String s: arr){
    	result = result + s;
    }

    Еще один пример использования изменяемых an objectов — передача такого an object в метод. Это позволит вернуть результат в нем же, без создания лишних an objectов. При работе с an objectми большого размера, к примеру коллекциями, передача коллекции в метод для сортировки и возвращение результата в другой коллекции приводит к совершенно излишнему расходу ресурсов. (Ответ пользователя dasblinkenlight на Stack Overflow).

    Почему an object класса String неизменяем?

  9. Конструкторы классов Super и Sub

    Java döredijiler tarapyndan köplenç goýberilýän 10 ýalňyşlyk - 2

    Bu ýygyndy ýalňyşlygy, ata-babalar synpynyň kesgitlenen deslapky konstruktorynyň ýoklugy bilen ýüze çykýar. Java -da , synp konstruktoryny özüňiz görkezmeseňiz, düzüji hiç hili argument talap etmeýän deslapky konstruktor döreder. Eger konstruktor synpda Superşeýle suratlandyrylsa Super(String s){}, düzüjiniň özi hiç zat goşmaz. Bu biziň mysalymyzda görýän zatlarymyz.

    Synpyň konstruktory Sub, haýsysyna garamazdan, synpyň deslapky konstruktory diýer Super, sebäbi başga hiç zat görkezilmedi. Synpda deslapky konstruktor ýoklugy sebäpli Super, bu düzüliş ýalňyşlygyna sebäp bolar.

    Bu meseläniň ilkinji çözgüdi synpa deslapky konstruktor goşmakdyrSuper

    public Super(){
        System.out.println("Super");
    }

    SuperIkinji wariant, düzüjiniň deslapky konstruktor döredmegi üçin synpdan beýan eden konstruktorymyzy aýyrmak .

    Iň soňky wariant, super(value)synp konstruktorlaryna jaň goşmak Sub, deslapky konstruktoryň ýerine bar bolan synp konstruktory çagyrylarSuper

    Super we Sub konstruktory

  10. "" ýa-da konstruktor?

    Setir döretmegiň iki usuly bar:

    //1. использовать двойные кавычки
    String x = "abc";

    //2. использовать конструктор
    String y = new String("abc");

    Olaryň arasynda näme tapawut bar?

    Muňa aşakdaky mysallardan düşünip bilersiňiz:

    String a = "abcd";
    String b = "abcd";
    System.out.println(a == b);  // True
    System.out.println(a.equals(b)); // True
    
    String c = new String("abcd");
    String d = new String("abcd");
    System.out.println(c == d);  // False
    System.out.println(c.equals(d)); // True

    Setirleriň ýatda saklanýandygy barada has giňişleýin öwrenmek üçin "" ýa-da konstruktor ulanyp, Java setirini dörediň? .

Geljekdäki meýilnamalar. Bu sanaw, GitHub-dan açyk çeşme taslamalarynyň köpüsini, Stack Overflow-dan gelen soraglary we Google-daky meşhur soraglarymy seljermeklige esaslanýar. Hakykatdanam iň çynlakaý on ýalňyşlygyň hataryndadygyny subut etmek islämok, ýöne hakykatdanam gaty ýygy.
Teswirler
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION