البرمجة

تحسين أداء نظام السلة باستخدام HashMap في Java

في بناء نظام السلة الخاص بك، يبدو أنك تواجه تحدي في تحديث قيم الكمية في ArrayList دون إنشاء سجل جديد بنفس مفتاح العنصر. لتحقيق ذلك بفعالية، يمكنك تنفيذ بعض التغييرات في الكود الخاص بك.

أولاً وقبل كل شيء، يمكنك استخدام هيكل بيانات مخصص لتخزين معلومات السلة، مثل HashMap، حيث يمكنك استخدام مفتاح العنصر لتحديث قيمة الكمية بسهولة دون إنشاء سجل جديد. سأوضح لك كيف يمكن تحقيق ذلك في الكود:

java
import java.util.HashMap; import java.util.Map; public class ShoppingCart { private Map basketItems = new HashMap<>(); private double basketTotal = 0.0; private class BasketItem { private String name; private int quantity; private double price; public BasketItem(String name, int quantity, double price) { this.name = name; this.quantity = quantity; this.price = price; } public void updateQuantity(int newQuantity) { this.quantity = newQuantity; } public double getItemTotal() { return quantity * price; } } public void addItemToBasket(String name, int qty, String key) { if (name == null) { // رسالة تنبيه إذا لم يتم اختيار مفتاح صحيح } else if (qty <= StockData.getQuantity(key)) { BasketItem basketItem = basketItems.get(key); if (basketItem != null) { // إذا كان العنصر موجودًا في السلة، قم بتحديث الكمية فقط basketItem.updateQuantity(basketItem.quantity + qty); } else { // إذا لم يكن العنصر موجودًا في السلة، قم بإضافته BasketItem newItem = new BasketItem(StockData.getName(key), qty, StockData.getPrice(key)); basketItems.put(key, newItem); } // تحديث إجمالي السلة basketTotal += StockData.getPrice(key) * qty; // رسالة نجاح إضافة العنصر إلى السلة // يمكنك استخدام JOptionPane.showMessageDialog هنا } else { // رسالة تنبيه إذا كانت الكمية غير كافية // رسالة تظهر الكمية المتاحة } } }

في هذا الكود، تم استخدام هيكل بيانات HashMap لتخزين عناصر السلة باستخدام مفتاح العنصر. تم إنشاء فئة داخلية BasketItem لتمثيل معلومات العنصر في السلة، ويتم تحديث الكمية بسهولة دون إنشاء سجل جديد.

المزيد من المعلومات

بالطبع، دعنا نوسع قليلاً على الكود المقدم ونقدم مزيد من التوضيحات.

أولاً، يُفضل استخدام الكائن StringBuilder لتكوين سلسلة النصوص التي تمثل العناصر في السلة، بدلاً من استخدام ArrayList. هذا يمكن أن يساعد في تحسين أداء البرنامج عند بناء السلسلة.

java
private StringBuilder basketContent = new StringBuilder();

تحديث دالة addItemToBasket لتكون أكثر فعالية:

java
public void addItemToBasket(String name, int qty, String key) { if (name == null) { // رسالة تنبيه إذا لم يتم اختيار مفتاح صحيح } else if (qty <= StockData.getQuantity(key)) { BasketItem basketItem = basketItems.get(key); if (basketItem != null) { // إذا كان العنصر موجودًا في السلة، قم بتحديث الكمية فقط basketItem.updateQuantity(basketItem.quantity + qty); } else { // إذا لم يكن العنصر موجودًا في السلة، قم بإضافته BasketItem newItem = new BasketItem(StockData.getName(key), qty, StockData.getPrice(key)); basketItems.put(key, newItem); } // تحديث إجمالي السلة basketTotal += StockData.getPrice(key) * qty; // تحديث سلسلة النصوص التي تمثل السلة updateBasketContent(); // رسالة نجاح إضافة العنصر إلى السلة // يمكنك استخدام JOptionPane.showMessageDialog هنا } else { // رسالة تنبيه إذا كانت الكمية غير كافية // رسالة تظهر الكمية المتاحة } } private void updateBasketContent() { basketContent.setLength(0); // استعادة قيمة السلسلة إلى الصفر لتجنب إضافة العناصر مرتين for (Map.Entry entry : basketItems.entrySet()) { BasketItem item = entry.getValue(); basketContent.append(item.name) .append("\t\t ") .append(item.quantity) .append(" ") .append(pounds.format(item.price)) .append("\n"); } }

هذه التحسينات يمكن أن تساعد في تحسين أداء البرنامج وجعل الكود أكثر فهمًا وصيانة.

مقالات ذات صلة

زر الذهاب إلى الأعلى

هذا المحتوى محمي من النسخ لمشاركته يرجى استعمال أزرار المشاركة السريعة أو تسخ الرابط !!