JavaRush /جاوا بلاگ /Random-UR /ArrayList کلاس کا تفصیلی تجزیہ [حصہ 2]
Vonorim
سطح

ArrayList کلاس کا تفصیلی تجزیہ [حصہ 2]

گروپ میں شائع ہوا۔
بدقسمتی سے، تمام معلومات ایک مضمون میں فٹ نہیں ہوئیں، اس لیے ہم ArrayList کلاس کے بقیہ طریقوں کو دیکھتے رہتے ہیں۔ ترتیب مجموعہ:
public void sort(Comparator< ? super E> c)
فہرست کو دیئے گئے اصول کے مطابق ترتیب دیتا ہے۔ ایک ترتیب کا قاعدہ ایک نافذ شدہ کمپیریٹر انٹرفیس ہے جس میں اوور رائیڈن ہے compare()۔ اگر مجموعہ میں اس کی اپنی کلاس کی اشیاء شامل ہوں تو اوور رائڈنگ ضروری ہے۔ معیاری کلاسز (انٹیجر، سٹرنگ، اور اسی طرح) کے ساتھ کام کرتے وقت، موازنہ اوور رائڈ کی ضرورت عام طور پر صرف غیر معیاری ترتیب کے لیے ہوتی ہے۔ آئیے ایک کلاس بنائیں 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)
یہ کوئی نئی فہرست واپس نہیں کرتا، جیسا کہ لگتا ہے، لیکن فہرست (سب لسٹ) کا ایک منظر جس کے لیے یہ طریقہ بلایا گیا تھا، تاکہ دونوں فہرستیں ذخیرہ شدہ عناصر کو بانٹیں گی۔ ذیلی فہرست ایک مکمل طور پر فعال فہرست ہے؛ یہ والدین کی فہرست میں مناسب تبدیلیاں کرتے ہوئے لکھنے کے لیے بھی کام کرتی ہے۔ بہترین خصوصیات اس سے مندرجہ ذیل ہیں:
someList.subList(3, 7).clear();
اس مثال میں، someListفہرست سے چار عناصر کو ہٹا دیا جائے گا، تیسرے سے ساتویں تک (شامل نہیں)۔ ہم فہرست کے ساتھ کام کرنے کی حد کی نشاندہی کرتے ہیں اور ہم جاتے ہیں۔ طریقہ کار کے اندر، جوہر میں، سب لسٹ کلاس کے لیے ایک کال ہے، جس میں معلوم طریقوں کا اپنا نفاذ ہے، اور طریقہ کار کے عمل کے نتیجے میں، اس کلاس کی ایک چیز واپس آ جاتی ہے۔ خود کلاس کے نفاذ کو سورس کوڈ میں دیکھا جا سکتا ہے ۔ مواد کو مستحکم کرنے کے لیے، میں تجویز کرتا ہوں کہ آپ ایک متحرک صف کا اپنا عمل خود لکھیں۔ یہ مستقبل میں بہت مفید ہوگا۔ مثال کے طور پر، میں کوڈ میں تبصروں کے ساتھ، صرف نمبروں کے لیے ایک متحرک صف کا اپنا نفاذ پیش کرتا ہوں۔
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