标签: linkedhashmap

Java LinkedHashMap 与removeEldestEntry 导致java.lang.NullPointerException

错误看起来像这样

Exception in thread "Thread-1" java.lang.NullPointerException
    at java.util.LinkedHashMap$Entry.remove(LinkedHashMap.java:332)
    at java.util.LinkedHashMap$Entry.recordAccess(LinkedHashMap.java:356)
    at java.util.LinkedHashMap.get(LinkedHashMap.java:304)
    at Server.getLastFinishedCommands(Server.java:9086)
    at Server.processPacket(Server.java:484)
    at PacketWorker.run(PacketWorker.java:34)
    at java.lang.Thread.run(Thread.java:744)
Run Code Online (Sandbox Code Playgroud)

里面getLastFinishedCommands我用

   public List<CCommand> getLastFinishedCommands(UserProfile player) {
        List<CCommand> returnList = new ArrayList<CCommand>();

        if(!finishedCommands.containsKey(player.myWebsitecmd-1)) {
            getSavedState(player);
            return null;
        }

        try { //<-- added this try/catch so it doesn't happen again.
            //Get commands.
            CCommand cmd;
            long i;
            long startIndex = player.myWebsitecmd;
            long endIndex = startIndex+LIMIT_COMMANDS;

            for(i = startIndex; i <= endIndex; i++) {
                cmd = finishedCommands.get(i);   //<-- this is line 9086 …
Run Code Online (Sandbox Code Playgroud)

java dictionary get linkedhashmap lru

3
推荐指数
1
解决办法
2075
查看次数

LinkedHashMap vs HashMap,LinkedHashSet vs HashSet

我知道所有这些之间的区别,我理解LinkedHashMapLinkedHashSet提供插入排序.我理解LinkedHashMap extends HashMapLinkedHashSet extends HashSet.

为什么我们不总是使用LinkedHashMap而不是HashMap为什么我们不总是使用LinkedHashSet而不是HashSet

java hashmap hashset linkedhashmap linkedhashset

3
推荐指数
1
解决办法
3239
查看次数

Android如何在logcat中查看长字符串

我有一个HashMap<String, LinkedHashMap<String,String>相当长的时间(不是问题),我正在努力确保在我使用其中的数据之前看起来正确.要做到这一点,我试图尝试这样做,Log.v("productsFromDB",products.toString())但在LogCat它显示约1/3.有没有办法输出整个地图?

java android hashmap linkedhashmap logcat

3
推荐指数
1
解决办法
3801
查看次数

如果keySet()维护HashMap的顺序,为什么我们需要LinkedHashMap?

public class HashMapKeySet {

public static void main(String[] args) {
    Map<HashCodeSame,Boolean> map=new HashMap();

    map.put(new HashCodeSame(10),true);
    map.put(new HashCodeSame(2),false);

    for(HashCodeSame i:map.keySet())
        System.out.println("Key: "+i+"\t Key Value: "+i.getA()+"\t Value: "+map.get(i)+"\t Hashcode: "+i
                .hashCode());

    System.out.println("\nEntry Set******");
    for(Map.Entry<HashCodeSame, Boolean> i:map.entrySet())
        System.out.println("Key: "+i.getKey().getA()+"\t Value: "+i.getValue()+"\t Hashcode: "+i.hashCode());

    System.out.println("\nValues******");
    for(Boolean i:map.values())
        System.out.println("Key: "+i+"\t Value: "+map.get(i)+"\t Hashcode: "+i.hashCode());

}

static class HashCodeSame{

    private int a;

    public int getA() {
        return a;
    }

    public void setA(int a) {
        this.a = a;
    }

    HashCodeSame(int a){
        this.a=a;
    }

    @Override
    public boolean equals(Object …
Run Code Online (Sandbox Code Playgroud)

java collections hashmap linkedhashmap keyset

3
推荐指数
1
解决办法
919
查看次数

如何迭代多个地图

基本上,我有两个哈希图,一个包含以下值:

rId33=image23
rId32=image22
rId37=image2
Run Code Online (Sandbox Code Playgroud)

而另一个包含这些数据:

{image2.jpeg=C:\Documents and Settings\image2.jpeg, image22.jpeg=C:\Documents and Settings\image22.jpeg, image23.jpeg=C:\Documents and Settings\image23.jpeg}
Run Code Online (Sandbox Code Playgroud)

我基本上希望能够遍历第一个地图,找到钥匙的匹配,如果找到匹配,获取相关值,然后查看第二个地图,找到钥匙中的匹配,然后拉出关联value(表示文件路径).

我正在考虑做这样的事情(以下简化)......

String val2 = "rId33";

for (String rID: map.keySet())
{
     if (rID.contains(val2))
     {
         //enter code here
     }
}
Run Code Online (Sandbox Code Playgroud)

我正在研究像.getValue之类的东西可用的方法,但我不完全确定如何做到这一点.任何帮助,将不胜感激.提前感谢您的回复.

在Bozho的帮助下编辑代码

else if ("v:imagedata".equals(qName) && headingCount > 0)
{
    val2 = attributes.getValue("r:id");
    String rID = imageMap.get(val2);
    String path = imageLocation.get(rID + ".jpeg");

    for (String rels: imageMap.keySet())
    {
        if (rels.contains(val2))
        {
        inImage = true;
        image docImage = new image();

        imageCount++;

        docImage.setRelID(val2);
        docImage.setPath(path);
        addImage(docImage);
        }
    }
Run Code Online (Sandbox Code Playgroud)

java collections hashmap map linkedhashmap

2
推荐指数
1
解决办法
4941
查看次数

无法将JSON数组数组解析为Jackson中的LinkedHashMap

我正在开发一个Android REST客户端.我们使用JSON作为数据交换格式,因此我使用Jackson解析器.我从服务器获得不同的Json响应,如简单数组:

{"user_id":"332","user_role":"1"} 
Run Code Online (Sandbox Code Playgroud)

或者是其他东西.所有这些我解析的东西LinkedHashMap<String, Object>,一切都很完美但是当我从服务器得到这个响应时:

[ { "user_id":"352",
    "user_role":"expert",
    "name":"Test 12-18",
    "description":"Test" },

  { "user_id":"263",
    "user_role":"novice lab",
    "name":"Tom's Desk",
    "description":"Desk"}
]
Run Code Online (Sandbox Code Playgroud)

我解析后得到null:{}.这是我使用Jackson的代码:

 ObjectMapper mapParametersToJSON = new ObjectMapper();
 String serverResponseBody = responseFromServer.getBody();
LinkedHashMap<String, Object> resultofOperation = new LinkedHashMap<String,
     Object>();
TypeReference<LinkedHashMap<String,Object>> genericTypeReferenceInformation = new
    TypeReference<LinkedHashMap<String,Object>>() {};
    try {
     resultofOperation =  mapParametersToJSON.readValue(serverResponseBody,
         genericTypeReferenceInformation);
Run Code Online (Sandbox Code Playgroud)

那么,为什么杰克逊没能解析这个呢?我怎样才能解决这个问题?

java android json linkedhashmap jackson

2
推荐指数
1
解决办法
6098
查看次数

LinkedHashMap键到ArrayList

将LinkedHashMap的键添加到ArrayList的最简单方法是什么?我想通过删除循环来提高性能.有更有效的方法吗?

for(String key : map.keySet()){
    array.add(key);
}
Run Code Online (Sandbox Code Playgroud)

java android arraylist linkedhashmap

2
推荐指数
1
解决办法
1万
查看次数

为什么LinkedHashMap keyset()没有返回LinkedHashSet vs Set?

我已经阅读了java文档以及这篇文章中的LinkedHashMaps keyset()维护订单. 是否保证从LinkedHashMap对象返回键和值的顺序?

我的问题是,如果它保证顺序那么为什么不LinkedHashMap返回一个类型的对象Set保证顺序的源代码LinkedHashSet

我可以想到的一个原因是LinkedHashSet使用了一个可以增加内存分配的映射(取决于AbstractSet的实现方式).是不是因为它的未来证明了keyset的实现?

就像这个帖子在这篇文章中所说:使用List或Collection更好吗?

返回列表符合最高适当接口的编程.

返回集合会导致用户不明确,因为返回的集合可能是:Set,List或Queue.

那么,没有阅读文档的keyset()不是这个含糊不清的?

keyset() 源代码:

public Set<K> keySet() {
    Set<K> ks = keySet;
    return (ks != null ? ks : (keySet = new KeySet()));
}

private final class KeySet extends AbstractSet<K> {
    public Iterator<K> iterator() {
        return newKeyIterator();
    }
    public int size() {
        return size;
    }
    public boolean contains(Object o) {
        return containsKey(o);
    }
    public boolean remove(Object o) {
        return HashMap.this.removeEntryForKey(o) != null;
    } …
Run Code Online (Sandbox Code Playgroud)

java collections linkedhashmap linkedhashset

2
推荐指数
2
解决办法
1113
查看次数

LinkedHashMap排序

如LinkdocHashMap的javadoc中所指定的,如果将密钥重新插入到映射中,则插入顺序不会受到影响,但是在运行以下程序时,我注意到在更改访问顺序时再次插入相同的密钥。

Map<Integer, String> map = new LinkedHashMap<Integer,String>(16, .75f, true);
    map.put(new Integer(1), "Ajay");
    map.put(new Integer(2), "Vijay");
    map.put(new Integer(3), "Kiran");
    map.put(new Integer(4), "Faiz");

    for(String value:map.values()){
        System.out.println(value);
    }

    String val =map.get(new Integer(3));
    map.put(new Integer(2), "Ravi");
    System.out.println("After changes...");
    for(String value:map.values()){
        System.out.println(value);
    }
Run Code Online (Sandbox Code Playgroud)

在运行上面的程序时,我得到如下的o / p:

Ajay
Vijay
Kiran
Faiz
After changes...
Ajay
Faiz
Kiran
Ravi
Run Code Online (Sandbox Code Playgroud)

当我重新插入使用的密钥2时,为何更改了访问顺序。

请帮助我了解操作说明。

谢谢,

hashmap linkedhashmap

2
推荐指数
1
解决办法
1620
查看次数

使用现有列表中的HashMap创建一个包含值的新列表

我想从现有列表中创建一个新的Map列表.

我得到一个ArrayList如下结构;

ArrayList
         0 = {LinkedHashMap}
                   0 = {LinkedHashMapEntry} "name" --> "value"
                   1 = {LinkedHashMapEntry} "surname" --> "value"
         1 = {LinkedHashMap}
                   0 = {LinkedHashMapEntry} "name" --> "value"
                   1 = {LinkedHashMapEntry} "surname" --> "value"
         ....
Run Code Online (Sandbox Code Playgroud)

我想要做的是将所有名称值作为新列表.

List<String> allNames = ....
Run Code Online (Sandbox Code Playgroud)

有没有办法使用Java Stream获取此列表?

java arraylist linkedhashmap

2
推荐指数
1
解决办法
70
查看次数