错误看起来像这样
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) 我知道所有这些之间的区别,我理解LinkedHashMap并LinkedHashSet提供插入排序.我理解LinkedHashMap extends HashMap和LinkedHashSet extends HashSet.
为什么我们不总是使用LinkedHashMap而不是HashMap为什么我们不总是使用LinkedHashSet而不是HashSet?
我有一个HashMap<String, LinkedHashMap<String,String>相当长的时间(不是问题),我正在努力确保在我使用其中的数据之前看起来正确.要做到这一点,我试图尝试这样做,Log.v("productsFromDB",products.toString())但在LogCat它显示约1/3.有没有办法输出整个地图?
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) 基本上,我有两个哈希图,一个包含以下值:
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) 我正在开发一个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)
那么,为什么杰克逊没能解析这个呢?我怎样才能解决这个问题?
将LinkedHashMap的键添加到ArrayList的最简单方法是什么?我想通过删除循环来提高性能.有更有效的方法吗?
for(String key : map.keySet()){
array.add(key);
}
Run Code Online (Sandbox Code Playgroud) 我已经阅读了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) 如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时,为何更改了访问顺序。
请帮助我了解操作说明。
谢谢,
我想从现有列表中创建一个新的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获取此列表?
linkedhashmap ×10
java ×9
hashmap ×5
android ×3
collections ×3
arraylist ×2
dictionary ×1
get ×1
hashset ×1
jackson ×1
json ×1
keyset ×1
logcat ×1
lru ×1
map ×1