Arraylist ни получить магазин в hashmap - PullRequest
0 голосов
/ 02 апреля 2011

я разбираю xml, в котором определен список адресов сотрудников ... поэтому при разборе я использую hashmap для хранения значения. Я постоянно добавляю staffdata в arraylist, а когда я нашел тег конечного элемента, я помещаю этот объект arraylist в HashMap и очищаю Arraylistдля сохранения следующих данных.

, но когда я печатаю hashmap, я нашел только ключ в hashmap, в котором вообще нет никакого arraylist ...

, если я не очищаю arraylist после помещения arraylist в hashmap, тогда значениянаходятся в hashmap ... но все значения собраны вместе .. поэтому я должен очистить arraylist после помещения arraylist в hash map ...

**HERE IS MY CODE OF XML PARSING**

    package com.example;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;

import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;

public class StaffXmlHandler extends DefaultHandler
{
    static int totalSection=0;
    static HashMap<String,ArrayList<Staff>> staffListWithDesignation=new HashMap<String,ArrayList<Staff>>();
    ArrayList<Staff> staffList=new ArrayList<Staff>();
    String designationName;

    public static HashMap<String,ArrayList<Staff>> getStaffListWithDesignation()
    {
        return staffListWithDesignation;
    }

    public void startElement(String uri, String localName, String qName,
            Attributes attributes) throws SAXException 
    {

        if(localName.equals("designation"))
        {   
                    designationName= attributes.getValue("name");
                System.out.println("=====================>>>>Designation="+designationName);
        }

        else if (localName.equals("staff"))
        {

            //System.out.println("======>>>>fetching data from staff");

            String employeeName = attributes.getValue("name");
            String employeeEmail=attributes.getValue("email");
            String employeePost=attributes.getValue("designation");
            String employeePhone=attributes.getValue("phone");

            Staff s=new Staff();
            s.setEmployeeName(employeeName);
            s.setEmployeeEmail(employeeEmail);
            s.setEmployeePhone(employeePhone);
            s.setEmployeePost(employeePost);
            staffList.add(s);

        }
    }



    @Override
    public void endElement(String uri, String localName, String qName)
            throws SAXException 
    {


        /** set value */
        if (localName.equalsIgnoreCase("designation"))
        {


//          Staff[] s=new Staff[staffList.size()];
//          System.out.println("=========================="+designationName+"=======================");
//              for(int i=0;i<staffList.size();i++)
//              {
//                  System.out.println("=====Record "+(i+1)+"=====");
//                  s[i]=new Staff();
//                  s[i]=staffList.get(i);
//                  System.out.println("Name:"+s[i].getEmployeeName());
//                  System.out.println("email:"+s[i].getEmployeeEmail());
//                  
//                  
//              }
            ArrayList<Staff> temp=staffList;
            staffListWithDesignation.put(designationName, temp);

            staffList.clear();
            designationName=null;
        }


    }
    public void endDocument ()
    {
        System.out.println("==================End Element tag");

        Iterator<String> iterator =staffListWithDesignation.keySet().iterator();
        while (iterator.hasNext()) 
        {
        String key = (String) iterator.next();
        System.out.println("=====> " + key + "======" + StaffXmlHandler.staffListWithDesignation.get(key));
        }
    }



    @Override
    public void characters(char[] ch, int start, int length)throws SAXException 
    {


    }
}

В вышеуказанном коде, в комментированной строке, если я проверюЧТОБЫ УВИДЕТЬ, ЧТО В МОДУЛЕ РЕЙТИНГОВ СОДЕРЖИТ DAA ИЛИ НЕ ТО, ЧТО ОН ПОКАЗЫВАЕТ МНЕ ДАННЫЕ, НО НЕ ЗНАЮ, ПОЧЕМУ ЭТО НЕ ХРАНИТСЯ В HASHMAP .....

ПОЖАЛУЙСТА, ПОДАРИ МНЕ НЕКОТОРЫЕ РЕШЕНИЯ ...

СПАСИБОADVANCE

Ответы [ 2 ]

3 голосов
/ 02 апреля 2011

После того, как вы поместите свой список в карту, создайте новый список. Когда вы помещаете свой список в карту, он не копирует его, поэтому дальнейшие манипуляции со списком (добавление дополнительных материалов или очистка) происходят с тем же списком.

1 голос
/ 02 апреля 2011

Как сказал @kett_chup, вы не должны повторно использовать массив после того, как вставили в карту, вы должны выделить новый список, например:

        staffListWithDesignation.put(designationName, staffList);
        staffList = new ArrayList<Staff>();

        designationName = null;

атрибут staffList будет доступендругие методы, как и прежде.

...