Java 多次有效地迭代映射

Java 多次有效地迭代映射,java,collections,Java,Collections,我有一个cookie manager类,它在地图中按域存储cookie列表。大多数情况下,尺寸将保持在100以下 Map<String, CookieList> cookieMap; 由于我使用的是contains,因此无法直接从cookieMap获取密钥。这是一种好方法,还是应该迭代Map的EntrySet?如果是这样,LinkedHashMap在本例中是否良好?您可以使用Map.keySet来获取域,而不是维护Map和列表 for (String domain : cookie

我有一个cookie manager类,它在地图中按域存储cookie列表。大多数情况下,尺寸将保持在100以下

Map<String, CookieList> cookieMap;

由于我使用的是
contains
,因此无法直接从
cookieMap
获取密钥。这是一种好方法,还是应该迭代Map的EntrySet?如果是这样,LinkedHashMap在本例中是否良好?

您可以使用
Map.keySet
来获取域,而不是维护
Map
列表

for (String domain : cookieMap.keySet()) {
    if (host.contains(domain)) {
        CookieList list = cookieMap.get(domain);
    }
}

这并没有什么低效的地方,因为for循环是O(n),对cookieMap的调用是O(1)。

您可以使用
Map.keySet
来获取域,而不是维护
Map
列表

for (String domain : cookieMap.keySet()) {
    if (host.contains(domain)) {
        CookieList list = cookieMap.get(domain);
    }
}
这并没有什么低效的地方,因为for循环是O(n),而对cookieMap的调用是O(1)。

Map coockieMap=new HashMap();
对于(Map.Entry:coockieMap.entrySet()){
if(host.contains(entry.getKey())){
CookieList=entry.getValue();
}
}
希望这对您有所帮助。

Map-coockieMap=newhashmap();
对于(Map.Entry:coockieMap.entrySet()){
if(host.contains(entry.getKey())){
CookieList=entry.getValue();
}
}

希望这对您有所帮助。

我认为您的代码经过了相当优化,如果您愿意,可以使用

domainList.retainAll(hosts)
在for循环之前,请停止对每个循环进行检查。有效地,您的代码将如下所示:

List<String> hostList = new ArrayList<String>(domainList); // we don't want to edit domains

hostList.retainAll(host);  

for (String hostEntry : hostList) { // I'd rename "host" so I can use it here
        CookieList list = cookieMap.get(hostEntry);
        // set up cookies
}
List hostList=newarraylist(domainList);//我们不想编辑域
hostList.retainal(主机);
对于(字符串hostEntry:hostList){//我将重命名“host”,以便在这里使用它
CookieList=cookieMap.get(hostEntry);
//设置cookies
}

我认为您的代码经过了优化,如果您愿意,可以使用

domainList.retainAll(hosts)
在for循环之前,请停止对每个循环进行检查。有效地,您的代码将如下所示:

List<String> hostList = new ArrayList<String>(domainList); // we don't want to edit domains

hostList.retainAll(host);  

for (String hostEntry : hostList) { // I'd rename "host" so I can use it here
        CookieList list = cookieMap.get(hostEntry);
        // set up cookies
}
List hostList=newarraylist(domainList);//我们不想编辑域
hostList.retainal(主机);
对于(字符串hostEntry:hostList){//我将重命名“host”,以便在这里使用它
CookieList=cookieMap.get(hostEntry);
//设置cookies
}

遍历100个条目并在映射中查找每个索引的速度非常快。您可能不需要在这里优化任何内容。遍历100个条目并在映射中查找每个索引非常快。您可能不需要在这里优化任何内容。既然Map.get(K)将搜索值,而
EntrySet
已经有了值,那么循环
EntrySet
不是更好吗?Map.get(K)不“搜索”值-如果您使用的是HashMap实现,访问时间是恒定的。由于性能差异是可以忽略不计的,我认为您应该选择更具可读性的方式。既然Map.get(K)将搜索值,而
EntrySet
已经有了值,那么循环
EntrySet
不是更好吗?Map.get(K)不“搜索”值-访问时间是恒定的,如果您使用的是HashMap实现。由于性能差异是可以忽略不计的,我认为您应该选择更具可读性的方式。我喜欢这个想法,因为我还需要检查cookie和url的路径。我喜欢这个想法,因为我还需要检查cookie和url的路径。