JavaRush /Java Blog /Random-TK /ArrayList synpynyň jikme-jik derňewi [2-nji bölüm]
Vonorim
Dereje

ArrayList synpynyň jikme-jik derňewi [2-nji bölüm]

Toparda çap edildi
Gynansagam, ähli maglumatlar bir makala gabat gelmedi, şonuň üçin ArrayList synpynyň galan usullaryna göz aýlamagy dowam etdirýäris. Collectionygyndylary tertipläň:
public void sort(Comparator< ? super E> c)
Sanawy berlen düzgüne görä tertipleýär. Bir tertip düzgüni, ýerine ýetirilen deňeşdiriji interfeýsdir compare(). Theygyndyda öz synpynyň obýektleri bar bolsa, artykmaçlyk zerurdyr. Adaty synplar (Integer, String we ş.m.) bilen iş salyşanyňyzda, deňeşdirme ýokaşmagy adatça diňe standart däl tertipleşdirmek üçin zerurdyr. Synp döredeliň Student:
class Student{
 String student_name;
 int id;

 Student(int id, String  student_name){
  this.id = id;
  this.student_name = student_name;
 }

 public String toString(){
  return id + " " + student_name;
 }
}
Talyp ID-lerini deňeşdirjek ýönekeý deňeşdiriji ýazalyň:
class StudentIdComparator implements Comparator<student>{

 public int compare(Student e1, Student e2) {
  return e1.id.compareTo(e2.id);
 }
}
Geliň, okuwçylar üçin sanaw we ýerine ýetirýän synp obýekti döredeliň Comparator:
ArrayList<Student> myList = new ArrayList<> ();
StudentIdComparator comparator = new StudentIdComparator();
sortSanawymyzyň usulyna jaň edeliň we deňeşdirijini oňa geçireliň:
myList.sort(comparator);
Bu asyl sanawy [4 Dawid, 2 Tom, 5 Rohit, 1 Paul, 3 Wişal] [1 Paul, 2 Tom, 3 Wişal, 4 David, 5 Rohit] öwürer. Iň soňunda gaty gyzykly, ýöne seýrek ulanylýan usuly goýdum:
public List<E> subList(int fromIndex, int toIndex)
Görnüşi ýaly, täze sanawy yzyna gaýtarmaýar, ýöne bu usulyň atlandyrylan sanawynyň (sanaw sanawynyň) görnüşi, iki sanaw hem saklanylýan elementleri paýlaşar. subList doly işleýän sanaw; ene sanawyna degişli üýtgeşmeler girizmek üçin ýazmak üçinem işleýär. Ajaýyp häsiýetler şundan gelýär:
someList.subList(3, 7).clear();
Bu mysalda someListsanawdan üçden ýedinjisine çenli dört element aýrylar (öz içine almaýar). Sanaw bilen işlemek we gidýän aralygy görkezýäris. Usulyň içinde, belli usullary özbaşdak durmuşa geçirýän SubList synpyna jaň bar we usulyň işlemegi netijesinde bu synpyň obýekti yzyna gaýtarylýar. Synpyň ýerine ýetirilişini deslapky kodda görüp bolýar . Materiallary birleşdirmek üçin, dinamiki massiwiň ýerine ýetirilişini ýazmagyňyzy maslahat berýärin. Bu geljekde gaty peýdaly bolar. Mysal hökmünde, koddaky düşündirişler bilen diňe sanlar üçin dinamiki massiwiň ýerine ýetirilişini hödürleýärin.
public class IntegerArrayList {

    private int [] elements;  //массив, для хранения чисел
    private int size;  //поле-счетчик, которое указывает на количество элементов в массиве
    private static final int DEFAULT_CAPACITY = 10;  //размер массива по умолчанию

    //конструктор без параметров, который создает массив на 10 элементов, если размер не был указан
    public IntegerArrayList(){  //
        this.elements = new int[DEFAULT_CAPACITY];
    }

    //создает массив указанной емкости
    public IntegerArrayList(int initialCapacity){
        if (initialCapacity >= 0){
            this.elements = new int[initialCapacity];
        }
        else {
            throw new IllegalStateException("Capacity can't be less than 0!");
        }
    }

    //получает элемент по указанному индексу
    public int get(int index){
        isIndexExist(index);  //проверка корректности введенного индекса
        return elements[index];
    }

    //возвращает количество элементов в списке
    public int size (){
        return size;
    }

    //добавляем элемент в конец списка
    public boolean add(int value){
        if (size == elements.length){  //если в массиве места нет
            elements = increaseCapacity(); //вызываем метод, который отвечает за увеличение массива
        }
        elements[size] = value; //записываем в конец списка новое meaning
        size++;  //увеличиваем meaning переменной размера списка
        return true;
    }

    //дополнительный закрытый метод для увеличения емкости массива
    private int [] increaseCapacity(){
        int [] temp = new int[(elements.length * 2)];  //создаем новый массив большего размера
        System.arraycopy(elements, 0, temp, 0, elements.length);  //копируем в новый массив элементы из старого массива
        return temp;
    }

    //устанавливает элемент на указанную позицию
    public int set(int value, int index){
        isIndexExist(index);
        int temp = elements[index];
        elements[index] = value;
        return temp;
    }

    //переопределил метод для красивого вывода списка на экран, иначе будут выводиться значения незаполненных ячеек [1, 10] instead of [1, 10, 0, 0...]
    @Override
    public String toString(){
        int [] temp = new int[size];
        System.arraycopy(elements, 0, temp, 0, size);
        return Arrays.toString(temp);
    }

    //проверяем индексы, не выходят ли они за границы массива
    private int isIndexExist(int index){
        if (index >= size || index < 0){
            throw new IndexOutOfBoundsException("Element can't be found! "
                    + "Number of elements in array = " + size
                    + ". Total size of array = " + elements.length);
        }
        return index;
    }

    //проверяем, есть ли элементы в списке
    public boolean isEmpty(){
        return (size == 0);
    }

    //удаляем элемент по индексу
    public int remove (int index){
        isIndexExist(index);  //проверяем индекс
        int [] temp = elements;  //во временный массив заносим ссылку на текущий массив
        elements = new int [temp.length-1];  //полю elements присваиваем ссылку на новый массив размером меньше на 1
        int value = temp[index];  //сохраняем в доп. переменную meaning удаляемого element
        System.arraycopy(temp, 0, elements, 0, index);  //копируем левую часть массива до указанного индекса
        System.arraycopy(temp, index + 1, elements, index, temp.length - index - 1);  //копируем правую часть массива после указанного индекса
        size--;  //уменьшаем meaning переменной
        return value;
    }
}
Ulanylan çeşmeleriň sanawy:
  1. ArrayList deslapky kody (häzirki - JDK 12);
  2. Suratlaryň köpüsi şu ýerden we JavaRush-dan käbir makalalar alyndy;
  3. Habre hakda makala .
Teswirler
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION