JavaRush /جاوا بلاگ /Random-SD /ArrayList طبقي جو تفصيلي تجزيو [حصو 2]
Vonorim
سطح

ArrayList طبقي جو تفصيلي تجزيو [حصو 2]

گروپ ۾ شايع ٿيل
بدقسمتي سان، سموري معلومات هڪ مضمون ۾ مناسب نه هئي، تنهنڪري اسان ArrayList طبقي جي باقي طريقن کي ڏسڻ لاء جاري رکون ٿا. مجموعو ترتيب ڏيو:
public void sort(Comparator< ? super E> c)
ڏنل قاعدي مطابق لسٽ کي ترتيب ڏيو. هڪ ترتيب وارو قاعدو هڪ لاڳو ٿيل Comparator انٽرفيس آهي جنهن سان اوور رائيڊ ڪيو ويو آهي compare(). اوور رائڊنگ ضروري آهي جيڪڏهن مجموعو پنهنجي طبقي جي شين تي مشتمل هجي. جڏهن معياري طبقن سان ڪم ڪري رهيا آهن (Integer، String، وغيره)، مقابلي جي اوور رائڊ عام طور تي صرف غير معياري ترتيب ڏيڻ جي ضرورت آهي. اچو ته هڪ ڪلاس ٺاهيون 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;
 }
}
اچو ته هڪ سادو موازنہ لکون جيڪو شاگردن جي سڃاڻپ جو مقابلو ڪندو:
class StudentIdComparator implements Comparator<student>{

 public int compare(Student e1, Student e2) {
  return e1.id.compareTo(e2.id);
 }
}
اچو ته شاگردن لاءِ هڪ فهرست ٺاهيون ۽ هڪ ڪلاس شئي جنهن تي عمل ٿئي Comparator:
ArrayList<Student> myList = new ArrayList<> ();
StudentIdComparator comparator = new StudentIdComparator();
اچو ته اسان جي لسٽ لاء طريقي کي سڏين sort۽ ان جي مقابلي کي پاس ڪريو:
myList.sort(comparator);
هي اصل لسٽ [4 ڊيوڊ، 2 ٽام، 5 روهت، 1 پال، 3 وشال] کي [1 پال، 2 ٽام، 3 وشال، 4 ڊيوڊ، 5 روهت] ۾ بدلائي ڇڏيندو. آخري لاء مون هڪ تمام دلچسپ، پر گهٽ ۾ گهٽ استعمال ٿيل طريقو ڇڏي ڏنو:
public List<E> subList(int fromIndex, int toIndex)
اهو هڪ نئين لسٽ واپس نٿو ڪري، جيئن اهو لڳي سگهي ٿو، پر فهرست جو هڪ ڏيک (ذيلي فهرست) جنهن لاء هي طريقو سڏيو ويو آهي، جيئن ته ٻئي فهرستون ذخيرو ٿيل عناصر کي حصيداري ڪندا. subList هڪ مڪمل فنڪشنل لسٽ آهي؛ اهو پڻ لکڻ لاءِ ڪم ڪري ٿو، والدين جي فهرست ۾ مناسب تبديليون ڪرڻ. بهترين خاصيتون هن جي پٺيان آهن:
someList.subList(3, 7).clear();
ھن مثال ۾، someListفهرست مان چار عنصر ختم ڪيا ويندا، ٽئين کان ستين تائين (شامل نه آھي). اسان فهرست سان ڪم ڪرڻ جي حد جي نشاندهي ڪريون ٿا ۽ اسان وڃون ٿا. طريقي جي اندر، جوهر ۾، هڪ ڪال آهي SubList طبقي، جنهن ۾ ڄاڻايل طريقن جي پنهنجي عمل درآمد آهي، ۽ طريقي جي عمل جي نتيجي ۾، هن طبقي جو هڪ اعتراض واپس ڪيو ويو آهي. ڪلاس جو عمل پاڻ کي سورس ڪوڊ ۾ ڏسي سگھجي ٿو . مواد کي مضبوط ڪرڻ لاء، مان توهان کي مشورو ڏيان ٿو ته توهان پنهنجي پنهنجي عمل کي متحرڪ صف جو عمل ڪريو. اهو مستقبل ۾ تمام گهڻو مفيد ٿيندو. مثال طور، مان صرف انگن جي لاءِ متحرڪ صف جو نفاذ پيش ڪريان ٿو، ڪوڊ ۾ تبصرن سان.
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;
    }
}
استعمال ٿيل ذريعن جي فهرست:
  1. ArrayList سورس ڪوڊ (موجوده - JDK 12)؛
  2. گهڻيون تمثيلون هتان ورتيون ويون آهن ۽ ڪجهه مضمون جاوا رش کان؛
  3. Habré تي آرٽيڪل .
تبصرا
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION