بشكل عام، يمكن للأصدقاء الذين لديهم بعض الخبرة في التطوير تحقيق مثل هذه الوظيفة، ولكنها مجرد مسألة كفاءة. عندما نواجه عادةً مثل هذه المشكلة، فإننا نفكر دائمًا في الأمر بترتيب ثابت. أولاً، قم بإنشاء مصفوفة، ثم قم بإضافة أرقام عشوائية إلى المصفوفة في حلقة، أثناء عملية إضافة الأرقام، تحقق أولاً مما إذا كانت موجودة في المصفوفة إذا كان هذا الرقم غير موجود، فسيتم إضافته مباشرة إلى المصفوفة؛ نحن نفكر عمومًا في المشكلات بهذه الطريقة، ويمكن تحقيق الوظائف من خلال التفكير بهذه الطريقة. وكما قلت للتو، إنها مجرد مسألة كفاءة.
من أجل فهم معنى هذا السؤال بشكل أفضل، دعونا نلقي نظرة أولاً على المحتوى المحدد: قم بإنشاء مصفوفة عشوائية من 1 إلى 100، ولكن لا يمكن تكرار الأرقام الموجودة في المصفوفة، أي أن الموضع عشوائي، ولكن عناصر المصفوفة لا يمكن تكرارها. هنا، طول المصفوفة غير محدد لنا، يمكننا أن نجعلها بأي طول يتراوح بين 1-100.
بعد ذلك، دعونا نلقي نظرة على كيفية تنفيذ ذلك بشكل أفضل، وعادة ما نستخدم ArrayList لتنفيذه، كما هو موضح في الكود التالي:
انسخ رمز الكود كما يلي:
package cn.sunzn.randomnumber;
import java.util.ArrayList;
import java.util.Random;
عرض الطبقة العامة {
public static void main(String[] args) {
قيم الكائن [] = كائن جديد [20]؛
عشوائي عشوائي = عشوائي جديد ()؛
ArrayList<Integer> list = new ArrayList<Integer>();
لـ (int i = 0; i <values.length; i++) {
رقم صحيح = عشوائي.nextInt(100) + 1;
إذا (!list.contains(number)) {
list.add(number);
}
}
القيم = list.toArray();
/*************** اجتياز المصفوفة وطباعة البيانات************/
لـ (int i = 0; i <values.length; i++) {
System.out.print(values[i] + "/t");
إذا ((i + 1) % 10 == 0) {
System.out.println("/n");
}
}
}
}
عملية التنفيذ المذكورة أعلاه غير فعالة نسبيًا. لأنه في كل مرة تضيفه، يتعين عليك اجتياز ما إذا كان الرقم موجودًا في القائمة الحالية، أم لا، فإن التعقيد الزمني هو O(N^2). يمكننا التفكير في الأمر بهذه الطريقة: نظرًا لأنه لا يتضمن أي تكرار، يمكننا التفكير في وظائف HashSet وHashMap. تطبق HashSet واجهة Set. التعريف الرياضي لـ Set هو مجموعة بدون ازدواجية وترتيب. يقوم HashMap بتنفيذ الخريطة ولا يسمح بالمفاتيح المكررة. بهذه الطريقة يمكننا استخدام HashMap أو HashSet لتحقيق ذلك.
عند استخدام HashMap لتنفيذه، ما عليك سوى تحويل مفتاحه إلى مصفوفة، ويكون الكود كما يلي:
انسخ رمز الكود كما يلي:
package cn.sunzn.randomnumber;
import java.util.HashMap;
import java.util.Random;
عرض الطبقة العامة {
public static void main(String[] args) {
قيم الكائن [] = كائن جديد [20]؛
عشوائي عشوائي = عشوائي جديد ()؛
HashMap<Object, Object> hashMap = new HashMap<Object, Object>();
/********* إنشاء أرقام عشوائية وتخزينها في HashMap *******/
لـ (int i = 0; i <values.length; i++) {
رقم صحيح = عشوائي.nextInt(100) + 1;
hashMap.put(number, i);
}
/************استيراد مجموعة من HashMap************/
القيم = hashMap.keySet().toArray();
/************اجتياز المصفوفة وطباعة البيانات***************/
لـ (int i = 0; i <values.length; i++) {
System.out.print(values[i] + "/t");
إذا ((i + 1) % 10 == 0) {
System.out.println("/n");
}
}
}
}
نظرًا لأن العلاقة بين HashSet وHashMap قريبة جدًا، يتم تنفيذ HashSet باستخدام HashMap في الطبقة السفلية، ومع ذلك، لا توجد مجموعة من القيم، فقط مجموعة من المفاتيح، لذلك يمكن تنفيذها أيضًا باستخدام HashSet، كما يلي :
انسخ رمز الكود كما يلي:
package cn.sunzn.randomnumber;
import java.util.HashSet;
import java.util.Random;
عرض الطبقة العامة {
public static void main(String[] args) {
عشوائي عشوائي = عشوائي جديد ()؛
قيم الكائن [] = كائن جديد [20]؛
HashSet<Integer> hashSet = new HashSet<Integer>();
/********* توليد أرقام عشوائية وتخزينها في HashSet *******/
لـ (int i = 0; i <values.length; i++) {
رقم صحيح = عشوائي.nextInt(100) + 1;
hashSet.add(number);
}
القيم = hashSet.toArray();
/*************** اجتياز المصفوفة وطباعة البيانات **********/
لـ (int i = 0; i <values.length; i++) {
System.out.print(values[i] + "/t");
إذا ((i + 1) % 10 == 0) {
System.out.println("/n");
}
}
}
}
هذا التنفيذ أكثر كفاءة قليلاً. إذا قمنا بتحديد طول المصفوفة، سنحتاج فقط إلى تغيير حلقة for وضبطها على حلقة whlie. كما هو موضح أدناه:
انسخ رمز الكود كما يلي:
package cn.sunzn.randomnumber;
import java.util.HashSet;
import java.util.Random;
عرض الطبقة العامة {
public static void main(String[] args) {
عشوائي عشوائي = عشوائي جديد ()؛
قيم الكائن [] = كائن جديد [20]؛
HashSet<Integer> hashSet = new HashSet<Integer>();
/****** توليد أرقام عشوائية وتخزينها في HashSet ******/
بينما (hashSet.size() <values.length) {
hashSet.add(random.nextInt(100) + 1);
}
القيم = hashSet.toArray();
/*************** اجتياز المصفوفة وطباعة البيانات************/
لـ (int i = 0; i <values.length; i++) {
System.out.print(values[i] + "/t");
إذا ((i + 1) % 10 == 0) {
System.out.println("/n");
}
}
}
}