[编辑]:HashMap存储对ArrayList的引用,而不是副本。因此,创建一个新的ArrayList实例对于插入新的项目集是必要的。
我无法理解HashMap的工作原理。这就是我在做什么..
Map<Integer, List<String>> data = new HashMap<Integer, List<String>>();
List<String> dataValues;
代码中的某处..添加虚拟数据..
dataValues = new ArrayList<String>();
dataValues.clear();
dataValues.add("Product - Nike : 20% OFF just today");
dataValues.add("Product - Adidas : 30% OFF on Shoes");
dataValues.add("Product - Puma : 40% OFF Weekend Sale");
dataValues.add("Product - Zapper : 50% OFF Clearence Sale");
data.put(1, dataValues);
dataValues.clear();
dataValues
.add("Product - Dining Table : FLAT 50% OFF on all dining tables - Just for today");
dataValues
.add("Product - Chairs : New Arrival - SOFA cum CHAIR convertible");
dataValues.add("Product - Organisers : Buy 1 Get one Free");
dataValues
.add("Product - Decorative Pillows : New Arrival - Transformers 4 theme");
data.put(2, dataValues);
dataValues.clear();
dataValues
.add("Product - Ice Cream Bonanza : Get 25% more on all IceCreams");
dataValues
.add("Product - Vanilla : Get 50% extra in the next one hour");
dataValues
.add("Product - Butterscoth : Get 100% extra in the next 15 mins");
dataValues
.add("Product - Pista : Get Family pack icecream free if you visit our store in the next 5 mins");
data.put(3, dataValues);
dataValues.clear();
dataValues
.add("Product - Skaters Delight : Get skating set for FLAT 50% OFF");
dataValues
.add("Product - Cricket Mania : Get Cricketing gear for 25% OFF");
dataValues
.add("Product - Football Fever : Buy any shoe and get a Football Free");
dataValues.add("Product - Rugby : Kill yourself with a Rugby armour");
data.put(4, dataValues);
dataValues.clear();
现在在其他地方..我正在尝试从List中检索值,键= 1。
List<String> dataValue = new ArrayList<String>();
dataValue = data.get(1);
当我尝试使用dataValue.size()获取dataValue的大小时,我得到的大小为0.
如果我没有清除dataValues列表,在上面的代码中的每个data.put()语句之后,那么它的工作就好了。我得到dataValue.size()
的非零值我的问题是,当我这样做时,data.put(1,dataValues),它是否继续引用HashMap中的dataValues,因此我的大小为0,因为我将在下一步中清除它?如果是这样,我必须为我想插入HashMap的每组值创建一个List?或者我有一种方法可以使用一个List吗?
答案 0 :(得分:2)
而不是dataValues.clear();
,
每次都要创建
的新实例dataValues = new ArrayList<String>();
答案 1 :(得分:0)
这是因为您每次都放置相同的对象但使用不同的键。因此,当您致电clear()
时,HashMap
中的所有值都会被清除。尝试为每个值创建一个新对象。请记住,List<String> dataValues
只存储对象的引用。
答案 2 :(得分:0)
是。所以在java和许多其他编程语言中,动态创建的对象都存储在堆上,所以当你
时dataValues.clear()
您仍然使用相同的项目引用相同的列表。所以你可以设置
dataValues = new ArrayList<String>();
这与Android没什么关系,但与计算机科学中更重要的概念有关。你绝对应该深入研究数据结构!