علت کپی کردن listFiles در متغیر filteredList چیست

پرسیده شده
فعالیت 1242 روز پیش
دیده شده 426 بار
1

سلام خسته نباشید 

من یه سوال داشتم در مورد متد سازنده اداپتور اونم این است که استاد برای مقدار دهی listFile ها کلاس ArrayList  رو صدا زدند و بعد list رو داخل کلاس arrayList ریختن و فرمودند که اول باید یه کپی از fileها رو بگیریم بعد داخب listfile بریزیم می خواستم بدونم که این کلاس arraylist چطور کپی می گیره و دقیقا کارش اونجا چیه ؟؟ 

فایل پیوست

2
حذف شده

سلام و احترام

 

فرض کنید int a = 5 هست حال ما متغیری با نام b تعریف نموده و مقدار a را در ان میریزیم یعنی int b = a دقیقا این کاری که داریم انجام میدیم deep copy میگویند .  حال وقتی مینویسیم this.filteredFiles = this.files; به عبارتی داریم همین عمل کپی رو انجام میدیم(احتمالا بخاطر استفاده شدن واژه کپی در این سر فصل شما یکم سردرگم شده باشید ولی این دقیقا همون چیزی هست که قبلا هم میدونستید).

اما چرا کپی میگیریم؟ ببینید من قبل از هر چیز پیشنهاد میکنم شما همین تمرین رو انجام بدید که اگر این عمل کپی انجام نشود چه مشکلی روی میدهد دلیلش این هست که هنگامی که کاربر موردی رو سرچ میکند اگر query.length() > 0 باشد باید لیست فیلتر شده مربوط به عمل سرچ را در متغیر filteredFiles ریخته تا ایتم های فیلتر شده نمایش داده شود.

در غیر این صورت باید کل ایتم های موجود را نمایش دهد.

اینکه عمل کپی در collection ها انجام میشود بحث ساختمان داده ای بوده که باید این مورد رو نحوه copy در collection ها بررسی کنید :

منبع :

https://www.javatpoint.com/collections-in-java

یاداوری :

public void search(String query) {
        if (query.length() > 0) {
            List<File> result = new ArrayList<>();
            for (File file :
                    this.files) {
                if (file.getName().toLowerCase().contains(query.toLowerCase())) {
                    result.add(file);
                }
            }

            this.filteredFiles = result;
            notifyDataSetChanged();
        } else {
            this.filteredFiles = this.files;
            notifyDataSetChanged();
        }
    }
فایل پیوست

پوریا شفیعی

توسط

پوریا شفیعی

10 آذر 99