C# اللاجئين تسعى قليلا من جافا مجموعات المساعدة

StackOverflow https://stackoverflow.com/questions/1029231

سؤال

لا تحتاج إلى تخزين مفتاح/قيمة المعلومات في بعض النوع من جمع.في C#, أود تعريف القاموس مثل هذا:

var entries = new Dictionary<string, int>();
entries.Add("Stop me", 11);
entries.Add("Feed me", 12);
entries.Add("Walk me", 13);

ثم أود أن الوصول إلى القيم في ذلك:

int value = entries["Stop me"];

كيف أفعل هذا في جافا ؟ رأيت أمثلة مع ArrayList, لكن أريد الحل مع الأدوية, إذا كان ذلك ممكنا.

هل كانت مفيدة؟

المحلول

كنت ترغب في استخدام Map

Map<String, Integer> m = new HashMap<String, Integer>();
m.put("Stop me", 11);
Integer i = m.get("Stop me"); // i == 11

ملاحظة على خط آخر ، يمكن أن يكون قال:

int i = m.get("Stop me");

الذي هو اختصار ل (مع جافا السيارات-علبته):

int i = m.get("Stop me").intValue()

إذا كان هناك أي قيمة في الخريطة على مفتاح معين ، get يعود null و هذا التعبير يلقي NullPointerException.وبالتالي فإنه دائما فكرة جيدة لاستخدام محاصر نوع Integer في هذه الحالة

نصائح أخرى

استخدام java.util.Map.هناك عدة تطبيقات:

  • HashMap:س(1) بحث لا الحفاظ على النظام من مفاتيح
  • TreeMap:O(log n) بحث يحافظ على ترتيب المفاتيح حتى تتمكن من تكرار عليهم في مضمون النظام
  • LinkedHashMap:س(1) بحث تتكرر على مفاتيح في ترتيب أنها كانت تضاف إلى الخريطة.

يمكنك استخدامها مثل:

Map<String,Integer> map = new HashMap<String,Integer>();
map.put("Stop me", 11);
map.put("Feed me", 12);

int value = map.get("Stop me");

لمزيد من الراحة في العمل مع مجموعات إلقاء نظرة على جوجل مجموعات المكتبة.انها ممتازة.

ويمكنك استخدام Map في جافا.

لاحظ أنه لا يمكن استخدام int (أو أي نوع بدائي الأخرى) كنوع المعلمة عامة، ولكن بسبب autoboxing، فإنه لا يزال يتصرف <م> تقريبا كما لو كانت Map<String, int> بدلا من Map<String, Integer> . (أنت لا تريد أن تفعل الكثير من autoboxing في التعليمات البرمجية حساسة للأداء، وإن كان.)

Map<String, Integer> entries = new HashMap<String, Integer>();
entries.put("Stop me", 11);
entries.put("Feed me", 12);
entries.put("Walk me", 13);
int value = entries.get("Stop me"); // if you know it exists
// If you're not sure whether the map contains a value, it's better to do:
Integer boxedValue = entries.get("Punch me");
if (boxedValue != null) {
    int unboxedValue = boxedValue;
    ...
}

ويبدو أنك تبحث عن شيء مثل <وأ href = "http://java.sun.com/j2se/1.4.2/docs/api/java/util/HashMap.html" يختلط = "نوفولو noreferrer "> HashMap

Map<String, Integer> map = new HashMap<String, Integer>();
map.put("Stop Me", 11);
map.put("Feed Me", 12);
map.put("Walk Me", 13);
Integer x; // little hack
int value = (x = a.get("aaa")) == null? 0 : x;

وكبديل يمكنك محاولة التعداد:

enum Action {

    STOP(11),
    FEED(12),
    WALK(13);

    private final int value;

    private Action(int value) {
        this.value = value;
    }

    public int value() {
        return value;
    }

    public static Action valueOf(int value) {
        for (Action action : values()) {
            if (action.value == value) {
                return action;
            }
        }

        return null; // or a null-object
    }
}

والاختبار:

public void action() {
    Action action = Action.valueOf("FEED"); 
    // or Action.FEED for more compile-time safety
    int value = action.value();
    // instantiating by code 
    Action walk = Action.valueOf(13);
}

وأنت تريد بالتأكيد HashMap، والذي هو نسخة جافا من C # Dictionary.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top