Может ли вектор хранить более одной информации в одной позиции? - PullRequest
0 голосов
/ 28 февраля 2012

Я попытался найти соответствующие вопросы здесь.Я думаю, что это общий вопрос, но мне не повезло, что я все еще не могу найти в Интернете.

Точка содержит 3 части: id, lat и lon.Я использовал 3 отдельных вектора для их хранения, но они связаны друг с другом.Когда новая точка найдена, она должна добавить 3 раза в разных векторах ...

Я хочу добавить 3 данных в ОДИН вектор, а не 3 отдельных вектора.Может ли Вектор сделать это?или любой другой простой способ достичь моей цели?

Большое спасибо!

Вот мой код:

public class Try01 {
  static Vector<String> id = new Vector<String>();
  static Vector<Double> lat = new Vector<Double>();
  static Vector<Double> lon = new Vector<Double>();

public static void main( String[] args ) throws Exception {
// create an input source for target document and parse it

  int counter=0;

  DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory.newInstance();
  DocumentBuilder docBuilder = docBuilderFactory.newDocumentBuilder();
  Document doc = docBuilder.parse (new File("data.xml"));

  // get all tags in the document with the name link
  NodeList links = doc.getElementsByTagName( "node" );

  for( int i = 0; i < links.getLength(); i++ ) {      
  Element link = (Element) links.item( i );
  //add part
  id.add(link.getAttribute( "id" ));
  lat.add( Double.parseDouble(link.getAttribute( "lat" )) );
  lon.add( Double.parseDouble(link.getAttribute( "lon" )) );

  //checking point: show the vector
  System.out.println( counter + " ) Vector = " + id.get(counter) + " and " + lat.get(counter) + " with " + lon.get(counter));

  counter++;     
}

Ответы [ 4 ]

2 голосов
/ 28 февраля 2012

Вы можете создать вектор своего собственного класса, например Vector<YourClass>, и этот класс содержит все 3 переменные, являющиеся его полями.

public class YourClass {
  String id;
  double lat;
  double lon;
}
0 голосов
/ 28 февраля 2012

Вы можете сохранить более одной «данных» в векторную позицию, но вы не можете сохранить более одного «объекта». Таким образом, очевидным решением является использование одного «объекта», который может содержать несколько «данных». Если вы хотите сохранить местоположение (широту / долготу) в одной позиции вектора, создайте класс, который моделирует местоположение

class Location
{
    private String id = null;
    private double latitude = 0.0;
    private double longitude = 0.0;

    public Location(String id, double latitude, double longitude)
    {
        this.id = id;
        this.latitude = latitude;
        this.longitude = longitude;
    }

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

    public String getId()
    {
        return id;
    }

    public double getLongitude()
    {
        return longitude;
    }

    public void setLongitude(double longitude)
    {
        this.longitude = longitude
    }

    public double getLatitude()
    {
        return longitude;
    }

    public void setLatitude(double latitude)
    {
        this.latitude = latitude;
    }
}

и затем сохраните его в векторе, например:

double lat, lon;
Vector<Location> vlocations = new Vector<Location>();
vlocations.add(new Location(lat, lon));
0 голосов
/ 28 февраля 2012

Обычно мы создаем отдельные классы и сохраняем их экземпляры в векторе:

public class Coordinate {
   public String id;
   public double lat;
   public double lon;
}

и позже:

static Vector<Coordinate> coordinates = new Vector<Coordinate>();

и в методе:

Element link = (Element) links.item( i );
//add part
Coordinate coord = new Coordinate();
coord.id = link.getAttribute( "id" );
coord.lat = Double.parseDouble(link.getAttribute( "lat" ));
coord.lon = Double.parseDouble(link.getAttribute( "lon" ));
coordinates.add(coord);
0 голосов
/ 28 февраля 2012

Вам необходимо создать класс, который может хранить три части точки, а затем создать Vector<Point> для хранения коллекции этих объектов.

Что-то вроде:

public class Point {
  private String id;
  private Double latitude;
  private Double longitude;

  //constructor, getters and setters, and rest of the class omitted
}

С другой стороны, я не думаю, что использование Vector s особенно поощряется, поэтому я бы вместо этого использовал List, например ArrayList: List<Point> = new ArrayList<Point>. Я только что посмотрел, так как не был уверен на 100%, и вот полезная статья, объясняющая, когда использовать каждый из них: Вектор или Список

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...