我想知道,在 Java 中创建变量的最佳方法是什么。
我有国家,一些 int 和一些另一个 int :
USA -> {{"NY", 100, 100},{"CO", 200, 200},...}
CAN -> {{"Quebec", 100, 100} ...}
有一些国家。我知道我需要创建类,我将在其中放置这些数据(状态、整数、整数),但稍后我将希望提供国家并只获取这些国家数据。数据不会改变。
我应该将所有内容放入一个静态变量还是拆分为不同的变量?
我想知道,在 Java 中创建变量的最佳方法是什么。
我有国家,一些 int 和一些另一个 int :
USA -> {{"NY", 100, 100},{"CO", 200, 200},...}
CAN -> {{"Quebec", 100, 100} ...}
有一些国家。我知道我需要创建类,我将在其中放置这些数据(状态、整数、整数),但稍后我将希望提供国家并只获取这些国家数据。数据不会改变。
我应该将所有内容放入一个静态变量还是拆分为不同的变量?
由于 java 是面向对象的编程,我的建议是将它建模为一个对象
class State{
int code;
String Name;
int population;
//other info
}
class Country{
int code;
String name
List<State> state;
// Other details
}
现在在一个类中创建一个国家集合
List<Country> countries;
我理解你的问题如下:
您希望将国家/地区关联存储到 {sate, data1, data2} 集合,然后访问与特定国家/地区关联的集合。
在这种情况下,您可以使用 a HashMap
,它提供了这样的关联。假设您有一个StateData
捕获 {state, data1, data2} 三元组的类,您可以编写:
HashMap<String, Collection<StateData>> countries;
使用以下内容填充地图:
List<StateData> stateColl = new LinkedList<StateData>();
Map<String, List<StateData>> countries = new HashMap<String, List<StateData>>();
countries.put("USA", stateColl);
stateColl.add(stateData1);
stateColl.add(stateData2);
//...
其中stateData1
,... 属于 类型StateData
。请注意,您可以使用任何适合您需要的集合,而不是LinkedList
. 如果您需要按(字母)顺序存储国家/地区,您也可以使用 aTreeMap
而不是HashMap
,但这会带来一些性能损失。
然后访问状态集合:
List<StateData> stateColl = countries.get("USA");
for (StateData stateData : stateColl)
{
// process the state info
}
我建议你有一个类来托管你需要保留的数据(String,int,int),像这样
class State{
private String name;
private int id,xyz;
//setter and getter methods
}
那么您可能需要两个列表/数组,一个用于美国,另一个用于 CAN。
public class Foo{
private List<State> usGuys=new ArrayList<>();//you would use State[] instead
private List<State> canGuys=new ArrayList<>();
}
为了保留实例,您要么保留它们,List
要么保留它们arrays
,这取决于您和要求。
但是关于您的问题,您会将所有数据保存在一个数组/列表中,因此在这种情况下,您需要在State
类中添加另一个属性以指示国家/地区
private String country
,但这可能会在未来变得复杂/难以处理,因为例如如果您想获取美国的所有州,您需要一个 for 循环来检查哪些州属于美国,拥有多个列表可能会给您更好的管理
,但是如果国家/地区的大小未知怎么办!
很简单,就像你有一个存储状态的列表,你会有一个保存国家的列表。,像这样
class Country{
private List<State> states;
private String name;
}
class Foo{
private List<Countries> countries;
}
我希望我能伸出援手。
枚举将是存储此信息的理想选择。自 Java5 以来,它们是存储常量的首选方式。
它可以通过使用初始化块在一个操作中完成。表示数据的最小实现是:
为您的实体创建类:
class Country {
String shortName;
List<State> states;
Country(String s, State... stateArray) {
shortName = s;
states = Arrays.asList(stateArray);
}
// getters omitted
}
class State {
String code;
int num1, num2:
State(String c, int n1, int n2) {
cude = c;
num1 = n1;
num2 = n2;
}
// getters omitted
}
然后创建变量:
List<Country> countries = new ArrayList<Country>() {{
add(new Country("USA",
new State("NU", 100, 100),
new State("CO", 200, 200)
);
add(new Country("CAN",
new State("Quebec", 100, 100)
);
}};
像这样的东西怎么样:
static class State {
String name;
int i1, i2;
State(String name, int i1, int i2) {
this.name = name;
this.i1 = i1;
this.i2 = i2;
}
}
final static Map<String, Map<String, State>> countryStateMap;
static {
countryStateMap = new HashMap<>();
Map<String, State> usa = new HashMap<>();
usa.put("NY", new State("NY", 100, 100));
usa.put("CO", new State("CO", 200, 200));
Map<String, State> ca = new HashMap<>();
ca.put("Quebec", new State("Quebec", 100, 100));
// and so on
countryStateMap.put("USA", usa);
countryStateMap.put("CA", ca);
}
这使用最终的静态Map并在静态块中对其进行初始化。加载类后立即完成初始化。
然后你可以在你的代码中像这样使用它
Map<String, State> usaStates = countryStateMap.get("USA");
State ny = usaStates.get("NY");