【问题标题】:Get Objfrom List<Obj> given an id without having to iterate through the whole List从给定 id 的 List<Object> 中获取 Obj,而无需遍历整个 List
【发布时间】:2018-09-09 00:12:07
【问题描述】:

在发布之前我做了一些调查,发现无需遍历整个列表即可找到所需数据的最佳方法是使用 HashMap。现在我以前从未使用过 HashMaps,这让我很复杂。

给定这个客户端类

public class Client {
private String nroClient;
private String typeDoc;}

我必须得到一个 typeDoc 给定一个唯一的 nroClient

我已经走到了这一步

    private String getTypeDoc(List<Client> clients, String nroClient) {

    Map <String, Client> map = new HashMap<String, Client>();
    for (Client client : clients) 
    {
        map.put(client.getNroClient(), client);
    }
}

这似乎根本不对,我不知道如何前进。我真的很感激任何意见。抱歉,如果以前有人问过这个问题,我真的在发帖前试图找到解决方案。谢谢

【问题讨论】:

    标签: java list search hashmap


    【解决方案1】:

    基本上你已经明白了,但是构建地图显然和循环列表一样慢(实际上甚至更慢)。

    给定一个 j.u.List 实例,您无法回答“给我这个列表中 ID 为 x 的课程,并快速完成”的问题。

    解决方案是完全删除列表并将其作为地图。

    如果您还需要类似列表的方面(例如,您需要能够回答“让我成为第 18 个客户”的问题),您可以使用LinkedHashMap,它会记住您添加内容的顺序,但它仍然没有类似 .get(18) 的方法。如果需要,您可以有一个类来表示“客户端”的概念,在内部它有一个列表一个映射,它有一个添加方法,可以将您的客户端添加到两个数据结构中,现在您可以快速回答“给我第 18 个客户”和“给我这个 ID 的客户”。

    【讨论】:

    • 真的帮助了我,它是在困扰我的方法上构建哈希图,而不是把哈希图作为参数。谢谢!
    【解决方案2】:

    您是否要返回匹配项?:

    private String getTypeDoc(List<Client> clients, String nroClient) 
    {
        String typeDocFound = null;
        for (Client client : clients) 
        {
            if(client.getNroClient().equals(nroClient)
            {
                typeDocFound = client.getTypeDoc();
                break;
            }
        }
        return typeDocFound;
    }
    

    【讨论】:

    • 嗯,它可以工作,而且比构建 HashMap 更快
    猜你喜欢
    • 1970-01-01
    • 2017-07-21
    • 2023-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多