غالبًا ما يكون من الضروري فرز القوائم ، من القائمة <string> إلى فرز الفئات المخصصة. لا حاجة لدمج أو كومة فرز بمفردك. مجرد تنفيذ واجهة واحدة.
ستقدم هذه المقالة أولاً استخدام المجموعات لفرز القائمة <string> ، ثم تحدث عن مبدأ Collections.sort.
دعنا نتحدث عن كيفية فرز الفصول المخصصة.
أخيرًا ، سيتم تقديم طريقة أخرى لفرز الكائنات المخصصة باستخدام فرز المجموعات ، وسيكون هذا النوعان مقارنة بين الأداء.
1. مبدأ قائمة الفرز <String> و Collections.Sort
الرمز كما يلي
قائمة <Tring> StringList = new ArrayList <String> () ؛ StringList.add ("nice") ؛ StringList.add ("لذيذ") ؛ StringList.add ("Able") ؛ StringList.add ("القمر") ؛ StringList.add ("Try") ؛ StringList.add ("صديق") ؛ collections.sort (StringList) ؛ لـ (String Str: StringList) {system.out.println (str) ؛ }حيث المجموعات هي java.util.collections.
تحقق من تطبيق الفرز في المجموعات
suppressWarnings ("غير محدد") ثابت عام <t يمتد قابلة للمقارنة <؟ super t >> فرز void (قائمة <T> قائمة) {object [] array = list.toarray () ؛ المصفوفات. int i = 0 ؛ listIratorator <T> it = list.listIrator () ؛ بينما (it.hasnext ()) {it.next () ؛ it.set ((t) Array [i ++]) ؛ }}من هذا يمكننا أن نرى أن جسم الفرز هو المصفوفات. تطبيق نوع المصفوفات
فرز الفراغ الثابت العام (كائن [] صفيف) {// ابدأ Android interbableTimsort.sort (Array) ؛ // end android changed}استمر في التتبع ، مقارنات تنفيذ فرز ComparableTimsort.SORT
فرز الفراغ الثابت (كائن [] أ) لفرز الفراغ الثابت (كائن [] A ، int lo ، int hi) إلى binarysort باطلة ثابتة (كائن [] a ، int lo ، int hi ، int start). في BinarySort ، الجزء المستخدم لمقارنة الحجم هو
قابلة للمقارنة <Object> pivot = (قابلة للمقارنة) a [start] ؛ int left = lo ؛ int right = start ؛ تأكيد اليسار <= يمين ؛ بينما (يسار <يمين) {int mid = (يسار + يمين) >>> 1 ؛ if (pivot.compareto (a [mid]) <0) right = mid ؛ غادر آخر = منتصف + 1 ؛ }سيتم استدعاء مقارنة الكائن للمقارنة. بشكل افتراضي ، تم تجاوز كل من أنواع السلسلة والأشخاص الأيمن بواسطة طريقة المقارنة. لذلك يمكنك مقارنتها بنفسك
2. مقارنة الفصول المخصصة
من خلال المقدمة أعلاه ، نفهم مبدأ فرز المجموعات. فيما يلي تقديم فرز الكائنات المخصصة. أولاً ، تحقق من مبدأ المقارنة بين عدد صحيح وسلسلة ، ثم قدم كيفية مقارنة الفئات المخصصة.
2.1 فحصنا تنفيذ الكائن ووجدنا أنه لا توجد طريقة مقارنة.
انظر إلى تعريف عدد صحيح
يمتد عدد صحيح من الطبقة النهائية العامة الأدوات التي تتم مقارنتها <integer>
دعونا نلقي نظرة على تعريف السلسلة
سلسلة الفئة النهائية العامة تنفذ java.io.serializable ، قابلة للمقارنة <string> ، charsequence
يمكننا أن نجد أنهم جميعا وراثة من قابلة للمقارنة
2.2 عرض واجهة قابلة للمقارنة
يمكنك أن تجد أن هناك طريقة واحدة فقط في مقارنة
كود جافا
Public Int Compareto (T O) ؛
بمعنى آخر ، تدعو طريقة BinarySort في الواقع طريقة المقارنة المماثلة ، وذلك لمعرفة أنه طالما أنها موصوفة من قابلة للمقارنة ،
وتنفيذ المقارنة للاتصالات.
2.3 مقارنة بين الفئات المخصصة
الرمز التالي هو فرز المستخدم. أولا ، فرز بالاسم واحد تلو الآخر. إذا كانت الأسماء هي نفسها ، فترتب من صغير إلى كبير حسب العمر.
كود جافا
MAINTEST الفئة العامة {public static void main (string [] args) {list <Sether> userList = new ArrayList <Sether> () ؛ userList.add (مستخدم جديد ("Lucy" ، 19)) ؛ userList.add (مستخدم جديد ("جاك" ، 19)) ؛ userList.add (مستخدم جديد ("Jim" ، 19)) ؛ userList.add (مستخدم جديد ("جيمس" ، 19)) ؛ userList.add (مستخدم جديد ("Herry" ، 19)) ؛ userList.add (مستخدم جديد ("Luccy" ، 19)) ؛ userList.add (مستخدم جديد ("جيمس" ، 18)) ؛ userList.add (مستخدم جديد ("Herry" ، 20)) ؛ collections.sort (قائمة المستخدمين) ؛ لـ (المستخدم المستخدم: userlist) {system.out.println (user.getName () + "/t/t" + user.getage ()) ؛ }} يقوم مستخدم الفئة الثابتة الخاصة بتنفيذ <Sether> {اسم السلسلة الخاصة ؛ عصر INT الخاص ؛ المستخدم العام (اسم السلسلة ، int Age) {this.name = name ؛ this.age = العمر ؛ } Override public int compareto (user other) {int comparename = this.name.compareto (othername ()) ؛ if (comparename == 0) {return (this.age == other.getage ()؟ 0: (this.age> other.getage ()؟ 1: -1)) ؛ } إرجاع المقارنة ؛ } السلسلة العامة getName () {return name ؛ } public int getage () {return Age ؛ }}}بعد التنفيذ ، الإخراج هو:
رمز XML:
هيرري 19 هيرري 20 جاك 19 جيمس 18 جيمس 19 جيم 19 لوسي 19 لوسي 19
يمكن ملاحظة أن هناك حاجة إلى نقطتين فقط
أ. وراثي من قابلة للمقارنة
كود جافا
مستخدم الفئة الثابتة الخاصة ينفذ <suster> قابلة للمقارنة
ب. تنفيذ طريقة المقارنة
المقارنة العامة أعلاه (المستخدم الآخر) هو موضوع المقارنة
يمكنك أن ترى أن int comparename = this.name.compareto (otherName.getName ()) ؛ يعني اسم المقارنة
إذا كان أكبر من أو إرجاع 1 ، فإنه يساوي العودة 0 ، وإذا كان أقل من ، فسيعود -1 .
إذا كان على قدم المساواة ، قارن وفقًا لحجم العمر.
ما سبق أكبر من أو يساوي العودة 1 ، وما سبق أقل من العوائد -1 ، وهو أيضًا أساس مقارنة بين الثنائي.
3. استخدم الوظيفة المفرطة في فرز المجموعات لفرز الكائنات المخصصة
الرمز كما يلي ، ولا يزال يتم مقارنة الأسماء أولاً ، إذا كانت متساوية ، فسيتم مقارنة إخراج العمر
كود جافا
MAINTEST الفئة العامة {public static void main (string [] args) {list <Sether> userList = new ArrayList <Sether> () ؛ userList.add (مستخدم جديد ("Lucy" ، 19)) ؛ userList.add (مستخدم جديد ("جاك" ، 19)) ؛ userList.add (مستخدم جديد ("Jim" ، 19)) ؛ userList.add (مستخدم جديد ("جيمس" ، 19)) ؛ userList.add (مستخدم جديد ("Herry" ، 19)) ؛ userList.add (مستخدم جديد ("Luccy" ، 19)) ؛ userList.add (مستخدم جديد ("جيمس" ، 18)) ؛ userList.add (مستخدم جديد ("Herry" ، 20)) ؛ collections.sort (قائمة المستخدمين ، المقارن الجديد <Seter> () {public int compare (user user1 ، user user2) {int comparename = user1.getName (). compareto (user2getName ()) ؛ if (comparename == 0) {return (user1.getage () == user2get. مقارنة لـ (المستخدم المستخدم: userlist) {system.out.println (user.getName () + "/t/t" + user.getage ()) ؛ }} مستخدم فئة ثابتة {اسم السلسلة الخاصة ؛ عصر INT الخاص ؛ المستخدم العام (اسم السلسلة ، int Age) {this.name = name ؛ this.age = العمر ؛ } السلسلة العامة getName () {return name ؛ } public int getage () {return Age ؛ }}}يمكنك أن ترى ذلك
كود جافا
collections.sort (قائمة المستخدمين ، المقارنة الجديدة <Sether> ())
هذا هو موضوع المقارنة وينفذ طريقة مقارنة المقارنة. ما يلي هو مبدأ هذه الطريقة
مجموعات تتبع
كود جافا
STATIC STATIC <T> فرز الفراغ (قائمة <T> قائمة ، المقارنة <؟ super t> c)
يصل
كود جافا
STATIC STATIC <T> الفراغ الفراغ (T [] A ، المقارنة <؟ Super T> C)
يصل
كود جافا
دمج الفراغ الثابت الخاص (كائن [] SRC ، كائن [] القدر ، int منخفض ، int عالية ، int ، المقارنة ج)
يمكنك العثور على الرمز على النحو التالي:
كود جافا
if (length <insertionsort_threshold) {for (int i = low ؛ i <high ؛ i ++) for (int j = i ؛ j> low && c.compare (dest [j-1] ، dest [j])> 0 ؛ j--) swap (dest ، j ، j ، j-1) ؛ يعود؛ }طريقة مقارنة المقارنة بين المكالمات
4. مقارنة بين أداءين فرزين أعلاه
يحتاج BinarySort إلى إجراء مقارنات NLG (N) ، وفي أسوأ الأحوال ، حركات n^2
تقوم Mergesort باستمرار بإجراء أقسام ثنائية ، وبعد تقسيم الأقسام الثنائية إلى أجزاء صغيرة ، يتم إدخالها وفرزها. لذلك ، سيتم مقارنة NLG (n) مرات وسيتم نقل NLG (n) مرات . لكنه يحتاج إلى نسخ نسخة من بيانات المصدر أولاً ، لذلك سوف يستغرق مرتين المساحة
حتى تتمكن من الاختيار وفقًا لاحتياجاتك
تناقش المقالة أعلاه باختصار ترتيب صفائف أو قوائم الكائنات ومبادئ الفرز للمجموعات هي كل المحتوى الذي أشاركه معك. آمل أن تتمكن من إعطائك مرجعًا وآمل أن تتمكن من دعم wulin.com أكثر.