gpt4 book ai didi

java - 为什么HashMap似乎使用引用变量而不是真实值?

转载 作者:行者123 更新时间:2023-12-01 09:39:39 25 4
gpt4 key购买 nike

我有一段代码(如下),运行时,(理想情况下)将填充应用程序数组,如下所示:

header 1:

应用1

应用2

header 2:

应用3

应用程序4

等等

但是,当我在模拟器中运行它时,它会生成以下内容:

header 1:

应用1

应用2

应用3

应用程序4

...

header 2:

应用1

...

我不确定为什么会发生这种情况,因为我已经查找了默认值,而且我到处都看到,人们说 Java 默认是按值传递,而不是按引用传递。如果这是真的,为什么它会将每个应用程序添加到每个类别?

先决条件:

Store 被定义为“App”类的列表,每个元素都包含标题和标题等。

ListDataChild 是一个空的 hashmap,其类型 > 将由循环填充,然后通过可扩展 ListView 输出。我会发布 View 的代码,但它非常庞大而且很长,所以我只会在最后添加一个简单的测试算法。

EmptyList 就是这样,一个内部没有任何内容的类型列表(至少在开始时?它会改变吗?)

代码:

    listDataChild = new HashMap<String, List<App>>();

List<App> emptylist = new ArrayList<>();
List<App> Store = synced.getAppStore();

Boolean juststarted = true;

for (App el : Store)
{
if (juststarted)
{
juststarted = false;
listDataChild.put(el.getHeader(), emptylist);
listDataChild.get(el.getHeader()).add(el);
} else {
if (listDataChild.containsKey(el.getHeader())) {
listDataChild.get(el.getHeader()).add(el);
} else {
listDataChild.put(el.getHeader(), emptylist);
listDataChild.get(el.getHeader()).add(el);
}
}
}
//TESTING
for (String header : listDataChild.keySet())
{
for (int j = 0; j < listDataChild.get(header).size(); j++)
{
System.out.println("HashMap at " + header + ", " + j + ": " + listDataChild.get(header).get(j).getTitle());
}
}

App.Java:

public class App {
public String header,title,link,url,redirect,icon;
public Double order;
public Boolean selected;

public App() {
header = "";
title = "";
link = "";
url = "";
redirect = "";
icon = "";
order = 0.0;
selected = false;
}

public int compareTo(App another) {
if (this.getOrder()<another.getOrder()){
return -1;
}else{
return 1;
}
}

public void setHeader(String h) {
header = h;
return;
}

public void setTitle(String t) {
title = t;
return;
}

public void setLink(String l) {
link = l;
return;
}

public void setUrl(String u) {
url = u;
return;
}

public void setRedirect(String r) {
redirect = r;
return;
}

public void setIcon(String i) {
icon = i;
return;
}

public void setOrder(Double o) {
order = o;
return;
}

public void setSelected(Boolean s) {
selected = s;
return;
}




public String getTitle()
{
return title;
}

public String getHeader()
{
return header;
}

public Double getOrder()
{
return order;
}


}

提前致谢!

最佳答案

是的,你是对的,java确实传递值,但也有一些棘手的情况:

  1. 如果您使用原始数据类型:按值传递效果很好。

  2. 如果您使用对象而不是原始数据类型:按值传递可以工作,但需要传递对象的地址。所以看起来像是传递引用。我知道概念看起来几乎一样,但从技术上讲,它是按值传递的。

看看这个 link

关于java - 为什么HashMap似乎使用引用变量而不是真实值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38559807/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com