Java从Hashmap中获取最后一个键
Posted
技术标签:
【中文标题】Java从Hashmap中获取最后一个键【英文标题】:Java Get last key from Hashmap 【发布时间】:2019-05-20 14:55:57 【问题描述】:之前如果我的问题是经典的,我会道歉。但是因为我刚学安卓的Java编程,所以对命令不是很懂。
我目前正在制作一个代码部分如下的应用程序:
Map<Integer, CompTypes> mapCompTypes = new java.util.HashMap();
class CompTypes
int androidId;
AndroidViewComponent component;
String text;
String type;
CompTypes(int androidId, AndroidViewComponent component, String type, String text)
this.androidId = androidId;
this.component = component;
this.type = type;
this.text = text;
public void SendMessage(HVArrangement container, String message, String dateTime, int fontSize, int fontColor, int alignment, int startid)
int id = Integer.parseInt(ChatBox.this.GetLastId());
TextBox comp = new TextBox(vertical);
comp.getView().setId(id);
comp.Text(message);
comp.FontSize(fontSize);
comp.TextColor(fontColor);
comp.MultiLine(true);
comp.Enabled(false);
comp.RequestFocus();
mapCompTypes.put(Integer.valueOf(id), new CompTypes(id, comp, compType, comp.Text()));
int id2 = id + 1;
Label dt = new Label(vertical);
dt.getView().setId(id2);
((TextView)dt.getView()).setText(android.text.html.fromHtml(datetime));
dt.HTMLFormat(true);
dt.Text(datetime);
dt.getView().setOnClickListener(this);
dt.getView().setOnLongClickListener(this);
mapCompTypes.put(Integer.valueOf(id2), new CompTypes(id2, dt, compType, dt.Text()));
public String GetLastId()
// how to get last id?
//return ids;
目前我无法从 id 获取值作为 Hashmap 的最后一个 id。 我在这里阅读了许多问题和答案,“地图没有最后一个条目,这不是他们合同的一部分。” 还有其他方法可以获取最后一个 id 吗?
【问题讨论】:
AHashMap
没有“last”键,无论是按插入顺序还是按排序顺序。 “最后一个”到底是什么意思?
这将帮助您找出您的需求:***.com/questions/3527216/…?
既然要获取最后一个id,就用"LinkedHashMap" (docs.oracle.com/javase/6/docs/api/java/util/LinkedHashMap.html) 和HashMap一模一样,只不过当你遍历它的时候,它会呈现在插入顺序。在这种情况下,您可以获得最后一个 id。
为什么要使用HashMap
而不是ArrayList
?
【参考方案1】:
HaspMap
不保留顺序。因此,不可能通过最后、第一个或中间的位置获取任何元素。
您可以做的一件事是在插入HashMap
时将key
保存在某个变量中,然后访问该变量以获取最后一个对象的键。保修单也可以找LinkedHashMap
【讨论】:
请注意,LinkedHashMaps 有 2 种排序模式——FIFO 和 LRU。使用时请确保它在 FIFO 中。【参考方案2】:HashMap 不保持顺序。 如果要保持插入顺序,请使用 LinkedHashMap。可以这样使用。
private static String getLastId()
Map<Integer, String> map = new LinkedHashMap<>();
map.put(1, "A");
map.put(2, "B");
map.put(3, "C");
String lastObject = "";
for (Map.Entry<Integer, String> entry : map.entrySet())
lastObject = entry.getValue();
return lastObject;
如果您将地图键作为自然顺序。然后您可以使用 TreeMap 或将比较器传递给 TreeMap。这是一个可以做到这一点的 sn-p。
private static String getLastId()
Map<Integer, String> map = new TreeMap<Integer,String>();
map.put(1, "A");
map.put(2, "B");
map.put(3, "C");
return ((TreeMap<Integer, String>) map).lastEntry().getValue();
在此处查看LinkedHashMap 和TreeMap 的文档。
【讨论】:
【参考方案3】:我可以看到您增加id
作为地图的键。因此,要获得您的last id,您有两种选择:
LinkedHashMap
,然后获取所有密钥并获取最后一个
使用TreeMap
和逆序比较器,然后得到第一个键(这个键值最高,即最后一个)。
Map<Integer, CompTypes> mapCompTypes = new TreeMap<>(Comparator.reverseOrder());
final class CompTypes
private final int androidId;
private final AndroidViewComponent component;
private final String text;
private final String type;
CompTypes(AndroidViewComponent component, String type)
this.androidId = component.getView().getId();
this.component = component;
this.type = type;
this.text = component.Text();
public void SendMessage(HVArrangement container, String message, String datetime, int fontSize, int fontColor, int alignment, int startid)
int id = Integer.parseInt(ChatBox.this.GetLastId());
mapCompTypes.put(id, new CompTypes(createCompTypes(createTextBox(id, message, fontSize, fontColor)), compType));
mapCompTypes.put(id + 1, new CompTypes(createLabel(id, datetime)));
private CompTypes createCompTypes(AndroidViewComponent component)
return new CompTypes(component, compType)
private TextBox createTextBox(int id, String message, int fontSize, int fontColor)
TextBox textBox = new TextBox(vertical);
textBox.getView().setId(id);
textBox.Text(message);
textBox.FontSize(fontSize);
textBox.TextColor(fontColor);
textBox.MultiLine(true);
textBox.Enabled(false);
textBox.RequestFocus();
return textBox;
private Label createLabel(int id, String datetime)
Label label = new Label(vertical);
label.getView().setId(id);
((TextView)dt.getView()).setText(android.text.Html.fromHtml(datetime));
label.HTMLFormat(true);
label.Text(datetime);
label.getView().setOnClickListener(this);
label.getView().setOnLongClickListener(this);
return label;
public String GetLastId()
int lastId = mapCompTypes.isEmpty() ? -1 : mapCompTypes.keySet().iterator().next();
//return ids;
【讨论】:
【参考方案4】:我建议你使用 TreeMap 代替你可以使用 lastEntry() 方法的地方。
Map<Integer, CompTypes> mapCompTypes = new TreeMap();
mapCompTypes.lastEntry()
【讨论】:
不保证HM,只保证LHM以上是关于Java从Hashmap中获取最后一个键的主要内容,如果未能解决你的问题,请参考以下文章
Java ArrayList:从包含 HashMap 的 ArrayList 中获取不同的值