通过id-java搜索arraylist

时间:2011-12-13 21:03:20

标签: java arraylist

以下程序要求提供玩家数量及其名称。我想把这些名字放在一个arraylist中并按照他们的身份归还。

private static ArrayList<Player>Playerlist=new ArrayList<Player>();

public static void main(String[] args) {

    Scanner scanner = new Scanner(System.in);
    String s;


   {
        System.out.printf("number of players(2 -4)? ");

    int p = scanner.nextInt();
    scanner.nextLine();
    for(int i=0;p>4 || p<2;i++)
     {

         System.out.printf("only 2-4 players.\n");
         System.out.printf("number of players(2 -4)?");
         p = scanner.nextInt();
         scanner.nextLine();

     }
   Player pl=new Player();
   int m=1;
    for(int k=1;k<=p;k++)
     {


         System.out.printf("give the name of the player %d: ",k);
         s= scanner.nextLine();
         pl.setName(s,m);
         System.out.printf(pl.getName());
         Playerlist.add(pl);
       m++;
      }
  public class Player {

  private String name;
  private int id;

  public Player () {
   }

  Player(String val,int k) {
    this.name = val;
    this.id=k;}
  /**
   * getName
  *
  */
public String getName () {
    return name;
}

/**
 * setName

 */
public void setName (String val,int k) {
    this.name = val;
    this.id=k;
}
public void displayStudentDetails(){
    System.out.println("ID is "+id);
    System.out.println("Name is "+name)};

我不知道如何通过id进行搜索...我尝试过很多东西,但是他们没有工作......

4 个答案:

答案 0 :(得分:2)

更好的解决方案是使用HashMap<Integer, String>,其中id为键,名称为值。然后你可以轻松搜索:

HashMap<Integer, String> map = new HashMap<Integer, String>();
map.put(1, "Robert");
map.put(2, "Jeff");

然后搜索:

String name = map.get(1); // will return "Robert"

编辑:好的,如果您需要的数据不仅仅是名称,比如分数,则需要创建数据类型。像:

public class Player {
    private String name;
    private int score;
    // etc.

    public Player(String name, int score) {
        this.name = name;
        this.score = score;
    }
}

然后你可以将这种类型的对象添加到地图中,如:

map.put(1, new Player("Robert", 10));

答案 1 :(得分:0)

忽略这样一个事实:你现在应该在没有全局变量的不同文件中有类...

/**
 * Searches the PlayerList Arraylist for a Player having the ID of the parameter passed
 */
public Player searchByID(int id) {
  //Do some sort of check on id to ensure its valid?
  for (int i = 0; i < PlayerList.size(); i++) {
    if (PlayerList.get(i).getID() == id) {
      return PlayerList.get(i);
    }
  }

  return null;
}

答案 2 :(得分:0)

ArrayList可能是错误的数据结构。如果你想以id的顺序检索元素,你需要一个HashMap,如果id都是常规的,你可以确定“id为1到10且没有未使用的id”。如果id集稀疏,你将需要使用TreeMap或TreeSet,具体取决于你的其他用例。

答案 3 :(得分:0)

如果您需要通过ID获取玩家的情况完全取决于您的代码添加玩家的方式,那么您可以这样做:

public Player getPlayerById(int id)
{
  return PlayerList.get(id - 1);
}

因为您为第一个玩家从1开始线性分配玩家ID。如果您正在修改或以其他方式更改玩家和ID的顺序,那么您将需要使用其他建议之一(但如果您不这样做,那么这是最优化的解决方案)。

注意:如果播放器列表中不存在id,上面的代码将抛出一个ArrayIndexOutOfBoundsException,您是否想根据想要处理的方式修改代码。