Java从Hashmap获取最后一个键

时间:2018-12-20 05:08:22

标签: java android hashmap

以前,我很抱歉,如果我的问题很经典。但是因为我刚刚学习了Android的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的方法吗?

4 个答案:

答案 0 :(得分:3)

HaspMap不保留顺序。因此,无法通过位置last,first或middle获得任何元素。

您可以做的一件事是,在插入key时将HashMap保存在某个变量中,并访问该变量以获取最后一个对象的键。对于担保订单,您还可以寻找LinkedHashMap

答案 1 :(得分:1)

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。这是一个摘要。

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();
}

在此处查看LinkedHashMapTreeMap的文档。

答案 2 :(得分:0)

我可以看到您增加了id 作为地图的关键。因此,要获取您的最后一个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;
}

答案 3 :(得分:-1)

我建议您使用TreeMap代替,在那里您可以使用lastEntry()方法。

Map<Integer, CompTypes> mapCompTypes = new TreeMap();
mapCompTypes.lastEntry()