我可以将两个不同的数组列表放入一个哈希映射中,然后通过systems.print.outln将它们放在一起吗?

问题描述 投票:0回答:3

抱歉,如果这很愚蠢,但我是 java 新手......

我有两个功能数组列表,用户可以在其中放置值。但是,两个数组列表值的索引 0、1、2、3 等的值需要一起打印,因为它们一致。我该怎么做呢?是否可以将所有这些内容存储在哈希图中,然后按上述方式打印出来?

代码段(因此成员及其排名必须一起打印出来(根据列表中相同的索引,例如索引为 1 的成员必须与索引为 1 的排名相匹配等)以及如何将所有这些放入哈希图中):

{
    members = new ArrayList<>();
    rankings = new ArrayList<>();
}

public void addMember(String aMember)
{
    members.add(aMember);
}

public void addMemberRankingd(String aRanking)
{
    rankings.add(aRankings);
}
java arrays hashmap
3个回答
0
投票

是的,你可以这样做,甚至可能想要创建一个单独的方法来打印哈希图以提高可读性:

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class MembersRanking {

  private List<String> members;
  private List<String> rankings;
  private Map<String, String> rankingByMember;

  public MembersRanking() {
    members = new ArrayList<>();
    rankings = new ArrayList<>();
    rankingByMember = new HashMap<>();
  }

  public void addMember(String member) {
    members.add(member);
  }

  public void addMemberRanking(String ranking) {
    rankings.add(ranking);
  }

  public void createMemberRankingsMap() {
    int size = Math.min(members.size(), rankings.size());
    for (int i = 0; i < size; i++) {
      rankingByMember.put(members.get(i), rankings.get(i));
    }
  }

  public void printMemberRankings() {
    for (Map.Entry<String, String> entry : rankingByMember.entrySet()) {
      System.out.println("Member: " + entry.getKey() + ", Rank: " + entry.getValue());
    }
  }

  public static void main(String[] args) {
    MembersRanking membersRanking = new MembersRanking();
    membersRanking.addMember("Alice");
    membersRanking.addMember("Bob");
    membersRanking.addMember("Charlie");
    membersRanking.addMemberRanking("Gold");
    membersRanking.addMemberRanking("Silver");
    membersRanking.addMemberRanking("Bronze");
    membersRanking.createMemberRankingsMap();
    membersRanking.printMemberRankings();
  }
}

输出:

Member: Bob, Rank: Silver
Member: Alice, Rank: Gold
Member: Charlie, Rank: Bronze

0
投票

使用

HashMap
似乎没有必要。您可以直接使用当前的并行列表。喜欢,

public void displayMemberRankings() {
    int len = Math.max(members.size(), rankings.size());
    for (int i = 0; i < len; i++) {
        System.out.printf("Ranking %d: ", i);
        if (i < members.size()) {
            System.out.printf("Member: %s", members.get(i));
        }
        if (i < rankings.size()) {
            System.out.printf("Ranking: %s", rankings.get(i));              
        }
        System.out.println();
    }
}

0
投票

在 Java 中将相关数据存储在两个单独的列表中可能会使维护它们之间的关系变得更加困难,从而导致潜在的错误和低效率。即使作为初学者感觉这样做是正确的,以下是为什么它不被认为是一个好的做法的一些原因:

  1. 数据完整性:对于单独的列表,相应索引处的元素之间没有固有的联系。如果您意外地从一个列表中添加或删除一个元素而不更新另一个列表,则数据会变得不一致。

  2. 可读性和可维护性:依赖两个单独的列表来表示相关数据的代码可能更难理解,特别是对于最初没有编写代码的人来说。跟踪列表之间的关系需要额外的脑力消耗。

  3. 性能:访问存储在单独列表中的相关数据可能需要同时迭代两个列表,与访问存储在单个结构中的数据相比,导致代码效率较低。

为了改善这种情况,您可以使用更结构化的方法,例如创建一个类来代表每个成员,并以他们的姓名和排名作为属性。例如:

public class Member {
    private String name;
    private int ranking;

    public Member(String name, int ranking) {
        this.name = name;
        this.ranking = ranking;
    }

    // Getters and setters (if needed)
    @Override
    public String toString() {
        return "Name: " + name + ", Ranking: " + ranking;
    }
}

然后,您可以创建一个

Member
对象列表:

import java.util.ArrayList;
import java.util.List;

public class Main {
    public static void main(String[] args) {
        List<Member> members = new ArrayList<>();
        members.add(new Member("John", 1));
        members.add(new Member("Alice", 2));
        members.add(new Member("Bob", 3));

        for (Member member : members) {
            System.out.println(member);
        }
    }
}

通过这种方式,您可以在单个结构中维护成员名称和排名之间的关系,从而使您的代码更具可读性、可维护性和高效性。

话虽这么说,根据应用程序的要求,将两个列表中的数据存储在地图中可能是一种有效的方法,但它也有其自身的一系列缺点。提一些:

  • 访问和操作数据:访问和操作数据 与工作相比,存储在地图中可能需要额外的逻辑 与列表。例如,根据键检索值或 更新值可能需要更多步骤。
  • 排序:Java 中的映射(例如 HashMap)不保留顺序 elements,表示原元素的顺序 将列表存储在地图中时可能不会保留列表。如果订单 元素的数量很重要,您需要使用 LinkedHashMap 或 另一种保留插入顺序的数据结构。
© www.soinside.com 2019 - 2024. All rights reserved.