Я хотел бы преобразовать следующий код из массива в любой другой способ (самое главное эффективный), что означает, что есть бесконечное пространство, и мне не нужно будет устанавливать длину массива.
Как это может быть сделано? Как настроить неограниченное количество городов? используя LinkedList
Мой код:
public class Country {
//instance variables
private String _countryName; // name of the country
private City[] _cities; // Array of the cities
private int _noOfCities; //number of cities in a country
public void CityArray() {
_cities = new City[MAX_NUM_CITIES];
_noOfCities = 0;
}
//constants:
public final int MAX_NUM_CITIES = 1000;
/**
* Constructer for object in Country class construct Country with info accordingly
* @param countryName represents the name of country
* @param cities represents the cities array
* @param noOfCities represents the number of cities
*/
public Country(String countryName) {
this._countryName = _countryName;
this._noOfCities = _noOfCities;
City[] cities = new City[MAX_NUM_CITIES];
}
boolean addCity(java.lang.String cityName, double XcityCenter, double YcityCenter, double XStationPoint, double YStationPoint, long numOfResidents, int numOfNeighborhoods) {
if (_noOfCities <= MAX_NUM_CITIES) return false;
_cities[_noOfCities++] = new City(cityName, XcityCenter, YcityCenter, XStationPoint, YStationPoint, numOfResidents, numOfNeighborhoods);
return true;
}
public long getNumOfResidents() {
long SumOfCities = 0;
if (_noOfCities > 0) //empty Array
{
SumOfCities = _cities[0].getNumOfResidents();
for (int i = 1; i < _noOfCities; i++)
SumOfCities += _cities[i].getNumOfResidents();
} else
SumOfCities = 0;
return SumOfCities;
}
public String getCountryName() {
return this._countryName;
}
public int getNumOfCities() {
return this._noOfCities;
}
public City[] getCities() {
int noOfCities = this._noOfCities;
City[] cities = new City[noOfCities];
for (int i = 0; i < _noOfCities; i++) cities[i] = new City(this._cities[i]);
return cities;
}
public String toString() {
if (_noOfCities == 0) //empty Array
System.out.println("There are no cities in this country ");
else
for (int i = 0; i < _noOfCities; i++) _cities[i].toString();
return toString();
}
}
Возможный дубликат Размеры динамического массива Java?
List<City> cities = new ArrayList<>();Может Линкедлист? Список массивов? // Как я могу его преобразовать? не могли бы вы показать мои pls <3? @rghome
List<City> cities = new ArrayList<>(); ... cities.add(city); ... for (City c : cities) {}@JoopEggen Не могли бы вы объяснить, как это сделать с LinkedList?
Изменить только реализацию: new LinkedList<>(). Вот почему так замечательно использовать более общий тип List для переменной.
@JoakimDanielson с LinkedList?
Я не вижу причин для LinkedList, вот руководство для ArrayList, он должен помочь вам с конвертацией. Это не так много работы.




Я бы отошел от массивов, если длина:
Я предлагаю использовать одну из различных реализаций List из JDK, а именно ArrayList и LinkedList.
Первый использует внутренний массив, который может быть расширен при добавлении элемента, что приведет к тому, что массив будет слишком маленьким (он делает это сам, так что не о чем беспокоиться).
Второй — это список узлов, что означает, что для каждого добавляемого элемента к последнему узлу добавляется новый (внутренний) объект узла.
Вам, конечно, придется изменить свой код для этого.
_cities как List<City>: private List<City> _cities_cities = new ArrayList<>(); или _cities = new LinkedList<>();._cities.add(new City(cityName, XcityCenter, YcityCenter, XStationPoint, YStationPoint, numOfResidents, numOfNeighborhoods));В вашем getNumOfResidents вы можете использовать следующий фрагмент (который использует API потоковой передачи Java, представленный в java 8):
return _cities.stream()
.mapToLong(City::getNumOfResidents)
.sum();
для getCities() вам придется изменить тип возврата на List<City> и использовать следующее: return new ArrayList<>(_cities) или return new LinkedList<>(_cities) в зависимости от реализации, которую вы хотите использовать.
Не могли бы вы изменить мой код (по крайней мере, только первую часть — общедоступную страну и логическое значение addCity) на LinkedList, пожалуйста? <3
@AnnaLA, если вы будете следовать моим инструкциям 1-5, вам будет довольно легко сделать это самостоятельно.
Вы имеете в виду как ArrayList?