الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

استعمال ال SortedList

بدأه mr.beshoy في 27 يونيو 2011 · 10 رد · 512 مشاهدة · في JavaSE
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

هنا أقوم بعمل Two Set

ثم أريد المقارنة بينهم .. فرضاً ال Set الاولى بها 1 2 3 4 5 6 و الثانية بها : 1 2 3 4 5 6 واضح أن الاثنين بهم نفس القيم بنفس الترتيب إذن فا هما متساويتين

لكن عندما أملأ الأولى هكذا : 1 2 3 4 5 6 و الثانية : 6 5 4 3 2 1 يقول لى انهم متساويتين !!! لماذا ؟؟؟ حيث أن من المعروف أن ال SortdSet تلتزم بترتيب العناصر .

import java.util.Set;
import java.util.SortedSet;
import java.util.TreeSet;

public class TestList {

    private SortedSet<Integer> set1 = new TreeSet<Integer>();
    private SortedSet<Integer> set2 = new TreeSet<Integer>();
    private Scanner scanner = new Scanner(System.in);
    private final int range = 6;
    private int input;

    public TestList() {
        _fillList1(set1);
        _fillList2(set2);
        _compareTwoList(set1, set2);
    }

    public static void main(String[] args) {
        new TestList();
    }

    private void _fillList1(Set<Integer> list1) {
        System.out.println("Fill List 1:");
        for (int i = 0; i < range; i++) {
            input = scanner.nextInt();
            list1.add(input);
        }
    }

    private void _fillList2(Set<Integer> list2) {
        System.out.println("Fill List 2:");
        for (int i = 0; i < range; i++) {
            input = scanner.nextInt();
            list2.add(input);
        }
    }

    private void _compareTwoList(Set<Integer> list1, Set<Integer> list2) {
        System.out.println("///////////////////////////");
        if (list1.containsAll(list2)) {
            System.out.println("The two lists are equal");
        } else {
            System.out.println("The two lists are not equal");
        }

    }
}

تم تعديل هذه المشاركة بواسطة mr.beshoy في 27 يونيو 2011 في 23:31

#2

ياعم ما انت مش معرفها على

SortedSet

انت معرفها على ان نوعها

TreeSet

بس وضعتها فى اوبجكت من نوع

SortedSet

يمكنك فعل ذلك حسب مبدأ الـ polymorphism

Software Developer
Mahmoudkelany.com


 

#3

بصراحة مش فاهمك ..

ممكن توضحلى من خلال code ...

----------------------------------------------------------

أنا جربت المحاولة دى

    private void _compareTwoList(Set<Integer> list1, Set<Integer> list2) {
        if (Arrays.asList(list1).equals(Arrays.asList(list2))) {
            System.out.println("Equal");
        } else {
            System.out.println("Not Equal");
        }
    }

لكن بردو بيقولى ان الاتنين متساويين حتى لو عكست ترتيبهم

#4

اتفضل

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Scanner;
import java.util.TreeSet;

public class TestList {

	private Collection<Integer> set1 = new ArrayList<Integer>();
	private Collection<Integer> set2 = new TreeSet<Integer>();
	private Scanner scanner = new Scanner(System.in);
	private final int range = 3;
	private int input;

	public TestList() {
    	_fillList1(set1);
    	_fillList2(set2);
    	_compareTwoList(set1, set2);
	}

	public static void main(String[] args) {
    	new TestList();
	}

	private void _fillList1(Collection<Integer> list1) {
    	System.out.println("Fill List 1:");
    	for (int i = 0; i < range; i++) {
        	input = scanner.nextInt();
        	list1.add(input);
    	}
	}

	private void _fillList2(Collection<Integer> list2) {
    	System.out.println("Fill List 2:");
    	for (int i = 0; i < range; i++) {
        	input = scanner.nextInt();
        	list2.add(input);
    	}
	}

	private void _compareTwoList(Collection<Integer> list1, Collection<Integer> list2) {
    	if (Arrays.asList(list1).equals(Arrays.asList(list2))) {
        	System.out.println("Equal");
    	} else {
        	System.out.println("Not Equal");
    	}
	}
}
1

Software Developer
Mahmoudkelany.com


 

#5

اه فعلاً .. تاهت منى :) .... شكراً لتعبك .

-----------------------------

لكن ممكن تتعمل بال SortedSet ??? و لا الموقف مش مستدعى استعمالها ؟؟

شكراً

#6

مش هينفع لان الـ TreeSet , SortedSet نوعهم فى الاخر Set

لكن ArrayList نوعها List

Software Developer
Mahmoudkelany.com


 

#7

شكراً .. و لنا لقاء فى تساولات أخرى .. بس استحملونى

#8

عزيزى بيشوى ماذا تنتظر من البرنامج غير هذه النتيجة ؟

انت تستخدم

list1.containsAll(list2)

هل تعرف ماذا تعنى containsAll ؟

تعنى انها ستأخذ العنصر الاول وتبحث عنه فى القائمة الاولى set1 وطبعا ستجده (أيا كان ترتيبه) ثم تعيد true وتكمل الدوران

ثم تبحث عن العنصر الثانى وهكذا الى النهاية ثم تعيد true والا فتخرج الدالة من الدوران loop مع اعادة القيمة false مع اول عنصر غير موجود فى القائمة الاولى set1

حتى ان ترجمة كلمة contain بمعنى يحتوى على مع تجاهل الترتيب

اظن هناك دالة تسمى compareTo تقوم بالمهمة والا فابحث عن بديل :)

بالتوفيق

1


﴿وَمَا كَانَ اللَّهُ لِيُعَذِّبَهُمْ وَأَنْتَ فِيهِمْ ۚ وَمَا كَانَ اللَّهُ مُعَذِّبَهُمْ وَهُمْ يَسْتَغْفِرُونَ﴾

الأنفال ۳۳                                  
 

#9
MOHAMED FATHEI كتب:

اظن هناك دالة تسمى compareTo تقوم بالمهمة والا فابحث عن بديل :)

الـ Set او List لا تحتوى على الداله compareTo لانها لا تحوى الـInterface Comparable

لكن يوجد contains , containsAll

Software Developer
Mahmoudkelany.com


 

#10

اذا لابد من وجود دالة اخرى للمقارنة مثلا equals()

لان

اقتباس

لكن يوجد contains , containsAll

لا تقارن وانما تبحث عن عنصر من قائمة داحل القائمة الثانية بغض النظر عن ترتيبه

على كل يمكن كتابة دالة تؤدى الغرض بسهولة

اولا نقارن طول القائمتين

فاذا اختلف نعيد القيمة false

واذا تشابه ندخل فى عملية دوران على عناصر القائمتين بطول احداهما (هو متساوى لانه مر من الاختبار الاول)

وعند اول عنصر مختلف نعيد القيمة false وستخرج الدالة من الدوران بناءا على الامر return

اظنها سهلة جدا لكن كنت افضل ال native methods لانها دائما ماتكون سريعة و optimized

تحياتى

1


﴿وَمَا كَانَ اللَّهُ لِيُعَذِّبَهُمْ وَأَنْتَ فِيهِمْ ۚ وَمَا كَانَ اللَّهُ مُعَذِّبَهُمْ وَهُمْ يَسْتَغْفِرُونَ﴾

الأنفال ۳۳                                  
 

#11

الأخ محمد فتحى و محمود استفدت من المعلومات هذه .. شكراً لكم

مواضيع مشابهة