我有:
public static HashMap<String, String> CHILD_NAME_DOB = new HashMap<>();
假设CHILD_NAME_DOB
中的值为:
<adam,15121990>
<roy,01051995>
<neha,05091992>
<alisha,11051992>
我正在尝试从CHILD_NAME_DOB
获取最后一个关键元素。也就是说,我想从上面的示例中将关键alisha
提取到临时String name
。
另外,我想知道如何通过索引获取数据。
例如:如果int index = 2
,我想在"Neha"
中找到关键String name
TIA。
编辑:DateOfBirth值(CHILD_NAME_DOB
中的值数据)是动态的,未知。所以THIS LINK不是我想要的。
答案 0 :(得分:4)
感谢@ {Pentium10 for this answer. 我根据自己的需要对它进行了一些修改。
String key="default";
Iterator myVeryOwnIterator = CHILD_NAME_DOB.keySet().iterator();
while(myVeryOwnIterator.hasNext()) {
key=(String)myVeryOwnIterator.next();
//String value=(String)meMap.get(key);
}
Toast.makeText(viewEnterChildExp.getContext(), "Key: "+key , Toast.LENGTH_LONG).show();
我得到了最后一个关键元素。
我会尽快更新,我也可以找到一种通过索引键入的简单方法。
答案 1 :(得分:1)
获取&#34;最后&#34; HashMap
不支持密钥和按索引获取。您可以使用LinkedHashMap
并通过迭代查找具有索引2(或最后一个元素)的元素。但这将是O(n)操作。
如果键/值的顺序对您很重要并且您希望进行基于索引的查找,我建议您使用List<Pair<String, String>>
。
如果基于密钥和基于索引的查找对您都很重要,则可以使用由List
和HashMap
组成的组合数据结构,但请注意,删除元素将为{ {1}}。
答案 2 :(得分:1)
您可以创建一个Child类
public class Child(){
private String name;
private String number;
....
}
然后将此对象放入List
public static List<Child> CHILD_NAME_DOB = new ArrayList<Child>(); // using LinkedList would defeat the purpose
通过这种方式,您可以调用方法get(int index)
,该方法返回此列表中指定位置的元素。
在你的例子中
<adam,15121990>
<roy,01051995>
<neha,05091992>
<alisha,11051992>
调用CHILD_NAME_DOB.get(2)
您将获得<neha,05091992>
(作为Child对象)
答案 3 :(得分:1)
通过hashmap中的索引获取密钥:
key = (new ArrayList<>(CHILD_NAME_DOB.keySet())).get(index)
按索引获取值:
CHILD_NAME_DOB.get(key)
请注意,Java HashMap
不保证条目的顺序。因此,每次迭代HashMap时,条目都会出现在不同的位置。您将需要LinkedHashMap
来保证可预测的迭代顺序。
答案 4 :(得分:0)
HashMap
没有排序的概念,因此获取第n个条目没有意义。您可以改为使用TreeMap
,这是按键排序的。
但是,您应该重新考虑您的模型,因为您似乎有利益冲突。一方面,通过索引访问是Lists
的典型,而按键访问是Maps
的典型。我不确定你想要做哪两种情况。
如果您真的想要同时进行索引和密钥访问,您可以编写自己的数据结构,将数据存储在列表中,并结合从键到索引的映射,反之亦然。我建议不要这样做,但如果这真的是你想要的,那么我认为这是最好的解决方案。
答案 5 :(得分:0)
我知道这不是最好的解决方案,但是这个解决方案呢(伪代码!)。只需将List和Map组合在一个类中即可。
public class UserBirthday {
private List<String> names = new ArrayList<>();
private Map<String, String> CHILD_NAME_DOB = new HashMap<String, String>();
public void add(String name, String bd) {
if (!CHILD_NAME_DOB.containsKey(name)) {
names.add(name);
}
CHILD_NAME_DOB.put(name, bd);
}
public String getByName(String name) {
return CHILD_NAME_DOB.get(name);
}
public String getByIndex(int index) {
return getByName(names.get(index)); // TODO: range test
}
public static void main(String[] args) {
UserBirthday ub = new UserBirthday();
ub.add("dit", "12345678");
ub.add("lea", "234239423");
ub.add("alex", "43534534");
ub.add("ted", "099098790");
System.out.println(ub.getByIndex(2));
System.out.println(ub.getByName("alex"));
}
}
如果删除条目,可能会遇到一些问题,但这只是一个建议。
答案 6 :(得分:0)
for (String key : hmList.keySet()) {
String value = hmList.get(key);
Log.e("HashMap values", "key=" + key + " ,value=" + value);
}
答案 7 :(得分:0)
您也可以使用ArrayMap而不是HashMap。要通过索引使用获取值:
ArrayMap.valueAt(index);
要使用索引使用密钥:
ArrayMap.keyAt(index);
答案 8 :(得分:0)
这种获取密钥的方式。...
public static String getHashMapKeyFromIndex(HashMap hashMap, int index){
String key = null;
HashMap <String,Object> hs = hashMap;
int pos=0;
for(Map.Entry<String, Object> entry : hs.entrySet())
{
if(index==pos){
key=entry.getKey();
}
pos++;
}
return key;
}