我有一个类型为Room的ArrayList(我的自定义对象)定义如下
ArrayList<Room> rooms = new ArrayList<Room>();
Run Code Online (Sandbox Code Playgroud)
然后在ArrayList中添加一系列对象后,我想通过它们查看各种内容.我不是java的敏锐用户,但我知道在许多其他编程语言中,foreach循环将是最简单的方法.
经过一番研究后,我发现以下链接提示下面的代码. 每个'循环的Java'如何工作?
for(Iterator<String> i = someList.iterator(); i.hasNext(); ) {
String item = i.next();
System.out.println(item);
}
Run Code Online (Sandbox Code Playgroud)
但据我所知,这不能用于自定义对象的Arraylist.
可以,如果是这样,我如何为自定义对象的ArrayList实现foreach循环?或者我怎么能处理每个项目?
我ArrayList用名字声明了10 秒arraylist1,arraylist2依此类推.
我想在for循环中动态更改变量名称:
for (int i = 1; i < 5; i++)
{
arraylist + (i).clear();
//arraylist1.clear();
//arraylist2.clear();
//arraylist3.clear();
//arraylist4.clear();
//arraylist5.clear();
}
Run Code Online (Sandbox Code Playgroud)
可能吗?如果是这样的格式是什么?
因为我学习Java ..我遇到了以下代码
public static void main(String[] args) {
ArrayList<String> a = new ArrayList<>();
a.add("1");
a.add("2");
for(String str: a){
a = new ArrayList<>();
System.out.println(str);
}
}
Run Code Online (Sandbox Code Playgroud)
我猜到了答案
1 null(因为引用现在指向另一个对象)
但答案是
1 2
我无法理解增强for循环的行为.
在Java中,低于最快的解决方案:
public convert(ArrayList<Integer> IntegerList) {
int s = IntegerList.size();
int[] intArray = new int[s];
for (int i = 0; i < s; i++) {
intArray[i] = IntegerList.get(i).intValue();
}
}
Run Code Online (Sandbox Code Playgroud)
?
public class Myname {
public static void main(String args[]){
Letter s = new Letter(); s.setCaracter("s");
Letter e = new Letter(); e.setCaracter("e");
Letter a = new Letter(); a.setCaracter("a");
Letter r = new Letter(); r.setCaracter("r");
Letter y = new Letter(); y.setCaracter("y");
Letter o = new Letter(); o.setCaracter("o");
Letter u = new Letter(); u.setCaracter("u");
Letter n = new Letter(); n.setCaracter("n");
Letter g = new Letter(); g.setCaracter("g");
Letter name[] = new Letter[10];
name[0] = s;
name[1] = e;
name[2] = a;
name[3] = r; …Run Code Online (Sandbox Code Playgroud) 我正在使用foreach循环迭代一个空数组,并用对象填充它."Case"是一个具有多种方法和属性的类.
我的代码看起来像这样:
public class Test {
private Case [] list = new Case[5];
public Case [] test(){
for(Case myCase : list){
myCase = new Case();
}
return list; //This list contains 5 nulls, but should contain five "Case" objects.
}
public static void main(String[] args){
Test myTest = new Test();
myTest.test();
}}
Run Code Online (Sandbox Code Playgroud)
当我希望它包含5个实例化的"Case"对象时,从我的方法返回的列表包含5个空值.我怀疑这可能是某种可见性问题,但我无法弄清楚.
for (Season time : Season.values() )
system.out.println (time+ "\t" + time.getSpan());
Run Code Online (Sandbox Code Playgroud)
我看到了使用枚举的一个例子:.这是什么意思?
实现接口的对象Iterable必须具有具有以下签名的方法:
Iterator<T> iterator()
Run Code Online (Sandbox Code Playgroud)
o 作为Iterable,此代码安全吗?
while(o.iterator().hasNext()) { ... }
Run Code Online (Sandbox Code Playgroud)
换句话说,iterator()如果没有什么可迭代的,可能会返回 null?
编辑:
1-正如你们中的一些人指出的,每次执行 o.iterator() 时返回的迭代器都是不同的。很公平!我必须承认,我在写问题时忘记了这一点。
假设这一行被重写:
Iterator<String> it = o.iterator();
....
....
while(it.hasNext() {...}
Run Code Online (Sandbox Code Playgroud)
2- 正如你们中的一些人所指出的,当 Iterable.iterator() 的文档说:“返回一组 T 类型元素上的迭代器”时,返回 null 是一种不好的编程习惯。
然而,我的问题是,Java API 文档中的某些“契约”是否直接或间接阻止返回 null。对我来说,“返回 T 类型元素集合上的迭代器”并不能阻止返回 null。我可能错了。
根据您的回答和其他研究得出的结论
总体而言:Java API 没有办法说明迭代器值是否可以为 null,除非在文档中明确说明。在本例中,没有说明任何内容,但明智的做法是认为 Java API 方法永远不会返回 null 迭代器值。这对于个人编写的 API 可能会有所不同。
通常的想法是,如果这个结构不是Iterable,我就不能用forEach迭代一些结构.但为什么我可以在Java中迭代数组呢?数组不是Iterable.
MyClass[] array = {new MyClass("a"), new MyClass("b")};
for (MyClass c : array) {
System.out.println(c);
}
Run Code Online (Sandbox Code Playgroud) 我担心提高源代码的可读性,它涉及通过将庞大的方法分解为更小的(简洁的)方法来减少它们的大小。所以,简而言之,假设我有一个非常单一的方法,可以做很多不同的事情,例如:
public void verHugeMethod(List<Person> people) {
for (Person person : people) {
totalAge += person.getAge();
totalHeight += person.getHeight();
totalWeight += person.getWeight();
// More calculations over class variables...
}
}
Run Code Online (Sandbox Code Playgroud)
我想将方法更改为:
public void calculateTotalAge(List<Person> people) {
for (Person person : people) {
totalAge += person.getAge();
}
}
public void calculateTotalHeight(List<Person> people) {
for (Person person : people) {
totalHeight += person.getHeight();
}
}
public void calculateTotalWeight(List<Person> people) {
for (Person person : people) {
totalWeight += person.getWeight();
}
}
// More …Run Code Online (Sandbox Code Playgroud)