如何从HashMap中检索以前的值?

时间:2015-05-28 18:34:43

标签: java hashmap

我有以下代码,我从文本文件中读取。文本文件i如下:

111 Laptop 500 10
222 Mobile 120 8
333 Notebook 4 100
444 Chocolates 3 50
555 Guitar 199 5
666 LenovoLaptop 470 10
777 HPLaptop 450 10
888 SonyVAIO 525 5

如果用户输入ID111,则输出结果如下:

111 Laptop 500 10
666 LenovoLaptop 470 10
777 HPLaptop 450 10
888 SonyVAIO 525 5

我将文本文件的内容存储在HashMap中。这是代码:

public void comparableItems(String ID)
{
    File f = new File("C://Class/items.txt");
    HashMap<String, Item> map = new HashMap<String, Item>();

    try
    {
        Scanner scan = new Scanner(f);

        while(scan.hasNext())
        {
            String line = scan.nextLine();
            String temp[] = line.split(" ");

            Item it = new Item(temp[0], temp[1], Double.parseDouble(temp[2]), Integer.parseInt(temp[3]));

            map.put(it.itemID, it);
        }
        if(map.containsKey(ID))
        {
            Item item = map.get(ID);
            if(item.price>=item.price+100 && item.price<=item.price-100)
            {

            }
        }
    }
    catch(Exception e)
    {
        e.printStackTrace();
    }
}

这是Item类:

public class Item 
{
String itemID;
String itemName;
double price;
int quantity;

public Item(String itemID, String itemName, double price, int quantity)
{
    this.itemID = itemID;
    this.itemName = itemName;
    this.price = price;
    this.quantity = quantity;
}

public void printItemDetails()
{
    System.out.println("ID\tItemName\tUnitPrice\tQuantity");
    System.out.println("===================================================");

    System.out.println(this.itemID+ "\t" +this.itemName+ "\t" +this.price+ "\t"+this.quantity);
}
}

如何获得所需的输出?我正处于Java Collections的学习阶段。所以请耐心等待。

有人可以帮助我吗?

谢谢!

2 个答案:

答案 0 :(得分:2)

你的Map并不能帮到你。由于您在解析文件之前就知道要查找的参考项目ID,因此您可以在解析期间(以及如果)看到该项目时捕获该项目。您确实需要某种集合来保存所有其他项目,但List对于此特定任务来说是更好的选择。

在任何情况下,您的问题的主旨似乎是检查您从文件中解析的所有其他项目。为此,您希望迭代Map的{​​{1}}视图(并使您的比较正确):

values()

如果您收集了for (Item otherItem : map.values()) { if((otherItem.price <= item.price + 100) && (otherItem.price >= item.price - 100)) { otherItem.printItemDetails(); } } 而不是List中的项目,那么您只需Map(或者您使用的任何名称)替换上面的map.values() list)。

答案 1 :(得分:0)

对于您想要的内容(价格接近所需商品的商品),HashMap不是一个高效的数据存储区。

然而,由于这听起来像是你的作业,一旦你使用map.get(&#34; 111&#34;)来获得你的笔记本电脑,得到价格P,然后迭代哈希图得到任何项目其价格在您想要的P的增量范围内。集合教程告诉您如何迭代集合。