所以我遇到了一些错误。当我尝试将事件添加到一个月中的某个日期时,我尝试将事件添加到日期ArrayList
中,但列表中没有该数字可用。所以我想知道如何实例化一个包含天数的列表。
我知道您可以使用
来实例化多少个月public static List<List<String>> events = new ArrayList<List<String>>(12);
其中12个是月数,但有没有办法让所有12个阵列都有31个插槽可以打开几天?
答案 0 :(得分:2)
我建议您完全改变您的设计。
代码
private class Events {
Map<Date, List<String>> events = new HashMap<Date, List<String>>();
public List<String> getEvents(int month, int day) {
Calendar calendar = GregorianCalendar.getInstance();
calendar.set(0, month, date, 0, 0, 0);
Date date = calendar.getTime();
List<String> list = events.get(date);
if (list == null) {
list = new ArrayList<String>();
events.put(date, list);
}
return list;
}
}
用法
Events events = new Events();
events.getEvents(11, 25).add("Christmas");
events.getEvents(0, 1).add("New years day");
答案 1 :(得分:1)
我认为你应该改变你的设计方案。创建一个带有ArrayLisy<String>(31)
的类,在另一个名为year或者其他类的类中创建12次。对于我自己,我会这样做,它使你的代码更具可读性!
此外,当它是固定数量的插槽(并且您不希望它超过该限制)时,请使用基本数组
答案 2 :(得分:0)
为什么不使用
List<Map<String, Integer>> = new List<HashMap<String, Integer>>();
答案 3 :(得分:0)
虽然@ Adam的答案可能是处理这个特定问题的最佳方法,但是也应该解决如何初始化多维列表结构的一般问题。
构建和初始化多维数据结构的标准习惯用法就是使用一组for
循环,如下所示:
int[][] myArray = new int[][myFirstDimension];
for(int i=0; i<a.length; i++){
int [] a = new int[mySecondDimension];
for(int j=0; j<b.length; j++){
a[j] = myInitialValue;
}
myArray[i] = a;
}
嵌套ArrayList
的构造方式与数组类似,但有一个重要区别:传递给ArrayList
的参数只是初始容量,而不是初始大小。事实上,ArrayList
实际上使无保证关于它分配了多少空间,尽管在实践中,IIRC通常会分配下一个2的幂。在初始化其内容之前尝试索引ArrayList
将抛出IndexOutOfBoundsException
。
因此,在初始化嵌套ArrayList
时,我们通常会这样做:
List<List<String>> myList = new ArrayList<>();
for(int i=0; i<myFirstDimension; i++){
List<String> a = new ArrayList<>();
for(int i=0; i<mySecondDimension; i++){
a.add(""); // or `null`, if that is needed
}
myList.add(a);
}