C# اللاجئين تسعى قليلا من جافا مجموعات المساعدة
-
06-07-2019 - |
سؤال
لا تحتاج إلى تخزين مفتاح/قيمة المعلومات في بعض النوع من جمع.في 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
.