Map中存放数组,如何依次取出值,(迭代器也只能取数组的所有值)

Map中存放数组,如何依次取出值,(迭代器也只能取数组的所有值),第1张

第一个输出,调用的是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中存放数组,如何依次取出值,(迭代器也只能取数组的所有值)等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/8858476.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-22
下一篇 2023-04-22

发表评论

登录后才能评论

评论列表(0条)

保存