如何使用带有arrayList的哈希映射作为值

时间:2013-11-12 12:40:15

标签: java arraylist hashmap

我正在使用HashMap<Integer, ArrayList>。在我的ArrayList中, 第二个元素是int,我需要将其递增一个。我怎样才能做到这一点?

public class IncrementAge {

    /** integer is key; value is ArrayList. */
    Map<Integer, ArrayList> idNumber = new HashMap<Integer, ArrayList>();

    /** array that contains name and age (only two elements). */
    ArrayList<> person = new ArrayList();

    /** name is 1st(0) element in array while age is second(1) element. */
    this.person.add(0, "jose");
    this.person.add(1, 32);

    /** place this object in hashMap with key=0; obj=person. */

    idNumber.put(0, this.person);
}

我应该如何增加此idNumber个对象的年龄, 基于HashSet的关键值?

2 个答案:

答案 0 :(得分:0)

以下代码段将帮助您增加年龄。

Integer age = (Integer)idNumber.get(0).remove(1);
age++;
idNumber.get(0).add(1, age);

说明:
- idNumber.get(0):这里0代表年龄需要增加的人的密钥
- remove(1):将从ArrayList person(即age)中删除并返回索引1处的对象 - 年龄++:将年龄增加1 - add(1,age):将年龄对象添加到索引为1的ArrayList。

但是正如已经建议的那样编写代码并不是一种好的做法,而不是使用ArrayList preson,更好的方法是设计Person类并将其对象存储在HashMap中作为值。

答案 1 :(得分:0)

没有必要向寻求帮助的人吐口水。

@ user2943394,是的,你的设计在这里并不好。由于这些原因,OO存在以减轻您的编码。

这是一个快速的例子,说明如何做你需要做的事情,看起来很不错。但要注意,这只是2分钟的代码废料,而不是最先进的设计。

public class Person {
    private String firstName;
    private String lastName;
    private int age;

    // Constructor
    public Person(...) {
        ...
    }


    // Getters & Setters
    public int getAge() {
        return this.age;
    }

    public void setAge(int age) {
        // you dont want to pass the wrong value, so you might want to check for that also
        this.age = age;
    }

    ...
}

public class PersonRepo {
    private Map<Integer, Person> personMap;

    public PersonRepo() {
        this.personMap = new HashMap<Integer, Person>();

        loadPersons();
    }

    private void loadPersons() {
        // load them from text file, or whicever source you have
        // or simply add them manually
    }

    public Person getPersonById(int id) {
        return this.personMap.get(id);
    }
}

public class PersonService {
    private PersonRepo personRepo;

    public PersonService() {
        this.personRepo = new PersonRepo();
    }

    public void incrementPersonAge(int personId, int step) {
        Person person = this.personRepo.getPersonById(personId);
        int oldAge = person.getAge();
        int newAge = oldAge + step;
        person.setAge(newAge);
    }
}

public class PersonTester() {
    public static void main(String[] args) {
        PersonService personService = new PersonService();

        personService.incrementPersonAge(12, 1);
    }
}

如果你坚定不移地走自己的路,你可以这样做:

int oldAge = (Integer) idNmber.get(0).get(1);
int newAge = oldAge + 1;
idNumber.get(0).set(1, newAge);