Набор проиндексированных объектов в ArrayList - возможно ли это?
Можно ли создать набор индексированных объектов в ArrayList?
Я хочу создать массив объектов - класс Portal - и проиндексировать их в массиве, размер которого будет определяться пользователем.
import java.util.ArrayList;
import java.util.Scanner;
public class GameFunctions
{
Scanner sc = new Scanner(System.in);
private int portalsQty;
private String[] portalNamesDB = {"name1", "name2", "name3", "name4", "name5"};
ArrayList<Portal> portals = new ArrayList<>();
void setPortalsQty(int portalsQty)
{
this.portalsQty = portalsQty;
}
int getPortalsQty(int portalsQty)
{
return portalsQty;
}
private void createPortals()
{
System.out.println("type the
amount of portals");
portalsQty = sc.nextInt();
System.out.println("number of portals: " + portals.size());
for (int i = 0; i < portalsQty; i++)
{
portals.add(i,p[i]); // CANNOT HAVE VALUES INDEXED LIKE p[i] IN ARRAYLIST
}
}
private void namePortals()
{
int randomNo = (int)(Math.random()*portalsQty);
for (int i = 0; i < portalsQty; i++)
{
System.out.println("Random: " + randomNo);
portals[i].setPortalName(portalNamesDB[randomNo]);
}
}
public void launchGame()
{
createPortals();
namePortals();
}
}
Определение размера массива пользователем делает использование таблиц неосуществимым, так как мы сталкиваемся с NullPointerException. Есть ли другое решение для динамического размера таблицы и индексации элементов?
2 ответа
import java.util.HashMap;
HashMap<Integer, portal>portals = new HashMap<>();
System.out.println("number of portals: " + portals.size());
for (int i = 0; i < portalsQty; i++)
{
int randomNo = (int)(Math.random()*portalsQty);
portals.put(portalNamesDB[randomNo], i);
}
Mureinik и Chrylis правы, карта, или HashMap, вероятно, будет лучше всего работать здесь.
Я добавил пример того, как вы могли бы это реализовать. Таким образом, вы даете каждому порталу имя и значение количества в одном цикле for. Имя портала - это ключ, а количество - это значение в моем примере.
Надеюсь, это поможет!
Вы можете эмулировать это поведение с картой, которая отображается из индекса в объект:
Map<Integer, Portal> indexes = new HashMap<>();