第一个输出,调用的是Systemoutprintln(Object),方法中的参数是Object,实际上你第一个输出等价于第二个输出
println()方法默认回去调用Object的toString方法,如果你这个类没有重写toString()方法,那么就会调用Object的toString()方法,它默认打印的是一个16进制的数字,Object的toString()源码如下
public String toString() {return getClass()getName() + "@" + IntegertoHexString(hashCode());
}
你上面的Collection真实实例是ArrayList,所以会去调用ArrayListtoString()方法(已经由AbstractCollection提供了实现)
public String toString() {Iterator<E> it = iterator();
if (! ithasNext())
return "[]";
StringBuilder sb = new StringBuilder();
sbappend('[');
for (;;) {
E e = itnext();
sbappend(e == this "(this Collection)" : e);
if (! ithasNext())
return sbappend(']')toString();
sbappend(',')append(' ');
}
}
所以输出的结果就可以理解了
如果觉得我的回答对你有帮助,可以关注简书 早晚程序员,或者 微信公众号 早晚程序员
你迭代器要是用泛型。
Iterator<Integer> it=map1keySet()iterator();
还有就是在使用迭代器的时候,你判断一次,游标走了2次,使用了2次next();
while(ithasNext()){
int key=itnext();
if(key==1)
//后边自己写了
}
map 的存储形式不是 key value键值对的形式吗 那么你就遍历map把数组取出再遍历数组取得数组的每一个值
map的遍历方法 推荐两个
一、最常规的遍历方法
public static void work(Map<String, Student> map) {
Collection<Student> c = mapvalues();
Iterator it = citerator();
for (; ithasNext();) {
Systemoutprintln(itnext());
}
}
二、利用keyset遍历
public static void workByKeySet(Map<String, Student> map) {
Set<String> key = mapkeySet();
for (Iterator it = keyiterator(); ithasNext();) {
String s = (String) itnext();
Systemoutprintln(mapget(s));
}
}
补充:如果你细心的话 ,应该发现map和set是有着很紧密的联系的。其实map的key单独拿出来看就是个set, 所以map也可以看成是 key ,value形式的set。
原因:元素值错误导致。解决方法:
1首先,打开软件并构造一个int向量,如红色方框所示。
2如图所示,向量的大小为0。
3如图所示,将6个元素的向量值修改为一个值为20的向量。
4运行结果表明,该算法成功地构造出了包含20个元素的6个向量。
5如图所示,将现有vector对象的作用域作为构造函数参数,并将该对象复制到另一个vector对象。
6程序运行结果如下图所示。
import javautilArrayList;
import javautilIterator;
public class Test {
public static void main(String[] args) {
ArrayList<String> a = new ArrayList<String>();
aadd("ABC");
aadd("DEF");
aadd("XYZ");
//写法1
for (Iterator<String> i = aiterator();ihasNext();) {
String e = inext();
Systemoutprintln(e);
}
//写法2
for (String i : a) {
Systemoutprintln(i);
}
}
}
import javautil;
class Person {
private String name, type;
public Person() {
}
public Person(String name, String type) {
thisname = name;
thistype = type;
}
@Override
public String toString() {
return "Person [name=" + name + ", type=" + type + "]";
}
// 需要重写Hashcode equals
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime result + ((name == null) 0 : namehashCode());
result = prime result + ((type == null) 0 : typehashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != objgetClass())
return false;
Person other = (Person) obj;
if (name == null) {
if (othername != null)
return false;
} else if (!nameequals(othername))
return false;
if (type == null) {
if (othertype != null)
return false;
} else if (!typeequals(othertype))
return false;
return true;
}
}
public class ArrayListDemo {
public static void main(String[] args) {
// TODO Auto-generated method stub
List<Person> list = new ArrayList<>();
listadd(new Person("孙悟空", "神仙"));
listadd(new Person("唐僧", "人类"));
listadd(new Person("猪八戒", "神仙"));
listadd(new Person("沙僧", "人类"));
listadd(new Person("白骨精", "妖怪"));
listset(0, new Person("Monkey", "神仙"));
Systemoutprintln(listget(1));
Systemoutprintln("初始------------");
for (Person p : list) {
Systemoutprintln(p);
}
Systemoutprintln("Iterator遍历-----------");
Iterator<Person> it = listiterator();
while (ithasNext()) {
Person per = itnext();
Systemoutprintln(per);
if (perequals(new Person("白骨精", "妖怪")))
itremove();
}
Systemoutprintln("最终遍历------------");
for (Person p : list) {
Systemoutprintln(p);
}
}
}
两个问题,
第一个你的if后面多加了一个;导致最后的itremove()和if没关系了,所以不显示的原因是你把list里面的所有元素都remove掉了
其次,判断Person的时候用it去equals,这个永远不会相等的,对象类型都不同
以上就是关于Java中Collection元素打印的问题,图中两句话都打印[张三,李四],还有这里的toString()怎么理解全部的内容,包括:Java中Collection元素打印的问题,图中两句话都打印[张三,李四],还有这里的toString()怎么理解、Iterator it =map1.keySet().iterator(); while(it.hasNext()){ if((Integer)it.next()==1) if的条件报错、Map中存放数组,如何依次取出值,(迭代器也只能取数组的所有值)等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)