假设我有2个并行集合,例如:a中的人名List<String>列表以及a List<Int>中相同顺序的年龄列表(以便每个集合中的任何给定索引指向同一个人).
我想同时遍历这两个集合,并获取每个人的姓名和年龄,并用它做一些事情.使用数组,这很容易完成:
for (int i = 0; i < names.length; i++) {
do something with names[i] ....
do something with ages[i].....
}
Run Code Online (Sandbox Code Playgroud)
使用集合执行此操作的最优雅方式(在可读性和速度方面)是什么?
我最近看到了一些Clojure或Scala(对不起,我不熟悉它们),他们确实在列表或类似的东西上拉链.什么是拉链,它来自哪里?
我继承了一大堆代码,它们广泛使用并行数组来存储键/值对.实际上这样做是有意义的,但是编写循环遍历这些值有点尴尬.我真的很喜欢新的Java foreach构造,但似乎没有办法使用它来迭代并行列表.
通过正常for循环,我可以轻松完成:
for (int i = 0; i < list1.length; ++i) {
doStuff(list1[i]);
doStuff(list2[i]);
}
Run Code Online (Sandbox Code Playgroud)
但在我看来,这不是语义上的纯粹,因为我们没有检查list2迭代期间的界限.是否有一些类似于for-each的聪明语法可用于并行列表?
在C++中,对象的生命周期在构造函数成功完成时开始.在构造函数内部,该对象尚不存在.
问:从构造函数中发出异常是什么意思?
答:这意味着建筑已经失败,对象从未存在过,它的生命从未开始.[ 来源 ]
我的问题是:Java也是如此吗?例如,如果我this交给另一个对象,然后我的构造函数失败了会发生什么?
Foo()
{
Bar.remember(this);
throw new IllegalStateException();
}
Run Code Online (Sandbox Code Playgroud)
这个定义明确吗?请问Bar现在有一个非对象的引用?
假设我有一个List<SomeObject> a.
现在还假设我有另一个List<SomeProcessor> b.
每一个SomeProcessor使用a它的处理.
除了:
int idx = 0;
for(SomeProcessor o:b){
o2 = a.get(idx);
o.doSomething(o2);
idx++;
}
Run Code Online (Sandbox Code Playgroud)
有更优雅的方式来处理这个问题吗?
迭代下面两张地图的最佳方法是什么?我想比较两个作为字符串的地图值,并且必须获取键和值.
HashMap<String, String> map1;
HashMap<String, String> map2;
Run Code Online (Sandbox Code Playgroud) java ×5
collections ×2
iteration ×2
arraylist ×1
clojure ×1
constructor ×1
exception ×1
foreach ×1
list ×1
zip ×1