【问题标题】:How to store Multidimensional data in an ArrayList如何在 ArrayList 中存储多维数据
【发布时间】:2012-08-21 17:05:33
【问题描述】:

ArrayList group = new ArrayList();

group.add("约翰·史密斯","5126123");

我想存储 2 个数据。所以我可以通过数字访问名称和通过名称访问数字。 ArrayList 是否可以实现?

*而且不同的人可以有相同的组号

【问题讨论】:

  • 你的问题有点过时了。您的姓名和电话号码总是独一无二的吗?还是只有数字或名称是唯一的?如果您的号码或名称是唯一的,您应该使用 Map 而不是 ArrayList。否则你必须开始在 ArrayList 中使用 ArrayList,所以它是二维的。
  • 让我写一个例子:group.add("John Smith","1"); group.add("Elis Smith","1"); group.add("迈克尔·史密斯","1"); group.add("Luuk Daves","2");
  • 您可以创建一个以数字为键的 HashMap,并将属于该键的名称存储到 ArrayList 中,这样您将拥有一个 HashMap>。但随后您将不得不遍历您的哈希映射以在 ArrayList 中搜索名称。
  • 或者,如果您想要更多的面向对象工作,那么您可以使用名称和 id 属性创建一个“用户”bean,使用用户详细信息对其进行实例化,然后将该 bean 添加到 ArrayList。然后覆盖您的“等于”方法以满足您的搜索需求。
  • 我需要通过询问号码来访问名称,否则。 Hashmap 是键/值,所以这不会真正起作用。名称必须是唯一的,数字不是。我猜迭代 Hashmap 是最好的解决方案。

标签: string arraylist multidimensional-array store


【解决方案1】:

简单的解决方案(但可能不是最有效的): 这不是在 IDE 中输入的,所以这里可能有错字。

公共类用户{

private int id;
private String name;

public User() {};

public User(int id, String name) {
    this.id = id;
    this.name = name;
}

public void setId(int id) {
    this.id = id;
}

public int getId() {
    return id;
}

public void setName(String name) {
    this.name = name;
}

public String getName() {
    return name;
}

}

公共类 MyUserArray() {

private ArrayList<User> users;

public MyUserArray() {
    users = new ArrayList<User>();
}

public add() {
    users.add(user);
}

// Since you said the user name is unique, only
// one user will be returned
public User getUserByName(String name) {
    for(User user : users) {
        if(user.getName().equalsIgoreCase(name)) 
            return user;
    }

    // return null if no user is found
    return null;
}

// Since more users can have the same id, we will
// return an array list with results
public ArrayList<User> getUsersById(int id) {

    ArrayList<User> result = new ArrayList<User>();

    for(User user : users) {
        if(user.getId() == id) 
            result.add(user);
    }

    return result;
}

}

公共类 MyClass {

public static void main(String[] args) {
    // Create users
    User user1 = new User(1, "John Doe");
    User user2 = new User(1, "Jack Sparrow");
    User user3 = new User(2, "Mickey Mouse");

    // Create the personal user array
    MyUserArray users = new MyUserArray();

    // Add the users
    users.add(user1);
    users.add(user2);
    users.add(user3);

    // Now you can search on id:
    ArrayList<User> userArrayList = users.getUsersById(1);
    for (User user : userArrayList) {
        System.out.println(user.getId() + " - " + user.getName());
        // This will print:
        // 1 - John Doe
        // 1 - Jack Sparrow
    }

    // Or search on name
    User user = users.getUserByName("Jack Sparrow");
    System.out.println(user.getId() + " - " + user.getName());
    // This will print: 1 - Jack Sparrow
}

}

【讨论】:

    【解决方案2】:

    你可以这样使用ArrayList:-

    List<Map<String, String>> list = new ArrayList<Map<String, String>>();
                    Map<String, String> map1 = new HashMap<String, String>();
                    map1.put("John Smith","5126123");
                             list.add(map1); 
    

    或者你可以直接使用地图:-

    Map<String,Integer> map = new HashMap<String,Integer>();
    map.put("Some String", 42);
    // or, more correctly:
    map.put("Some String", Integer.valueOf(42));
    

    您可以使用搜索它

    Integer result = map.get("Some String");
    

    【讨论】:

      【解决方案3】:

      你可以像这样在数组列表中存储一个数组 group.add(new String[][] {"John Smith", "5125123"});

      但是,我不确定这对于帮助您完成您想要完成的任何事情有多大用处。

      另一种方法是使用哈希表或采用&lt;key, value&gt; 对的映射/字典数据类型的其他一些实现。但是,搜索将仅限于使用密钥。

      另一种选择是创建一个对象来保存 John Smith 及其相关信息,然后将该对象放入 arraylist 中。不过,您必须编写一些额外的代码来帮助您搜索和检索数据。

      【讨论】:

      • 我怎样才能做到这一点? ArrayList group = new ArrayList(); group.add(new String[][] {"John Smith", "5125123"});并且应该 group.get("John Smith") -> 5125123 group.get("5125123") -> John Smith(以及该组的其他成员)
      猜你喜欢
      • 1970-01-01
      • 2021-12-03
      • 2016-07-17
      • 2011-09-12
      • 1970-01-01
      • 2019-08-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多