【问题标题】:How to I create a "sub array-list" for an element of a main array-list?如何为主数组列表的元素创建“子数组列表”?
【发布时间】:2019-08-23 04:20:46
【问题描述】:

我正在尝试创建一个程序来显示车辆“待办事项”列表。这是我希望输出看起来像的示例。

 Blue Spitfire
      Sanding
           Hood
           Doors
      Engine
           Oil pan seal
      Electrical
           Oil pressure light
           Headlight switch

现在,我有一个 ArrayList 来存储车辆名称(Blue Spitfire)。我想知道如何在每个工作编号下存储工作名称(打磨、发动机、电气)和细节(引擎盖、门、油底壳密封等)。

总而言之,车辆名称存储作业,作业存储细节。我该怎么做?

感谢任何帮助。

【问题讨论】:

  • Java 是一种面向对象的语言。用它。创建类,例如VehicleJobPart
  • class Vehicle { ArrayList jobs =new ArrayList();} class Job { ArrayList jobSpecifics = new ArrayList();}
  • 也许:ArrayList<ArrayList<String>> mainArray = new ArrayList()?不确定你真正想要什么
  • 我有 ArrayList 来存储车辆名称。我只是不知道如何在特定车辆或特定工作下存储工作和工作细节

标签: java arraylist sub-array


【解决方案1】:

您可以使用 Map,特别是 HashMap 来存储键和值之间的关联列表,并使用 List 或 Set,特别是 HashSet,来存储值列表。

但正如 cmets 中所述,将其与类结合使用可能会更好。

这是一种可能的实现方式。 (您可以使用用于创建集合和地图的实用程序类来缩短它,例如来自 Google Guava 库或 Apache Commons 库的那些。)

import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;

class Job {
    String model;
    Map<String, Set<String>> areas;

    public Job(String model, Map<String, Set<String>> areas) {
        this.model = model;
        this.areas = areas;
    }

}

public class Example {

    public static void main(String[] args) {
        Map<String, Set<String>> areas = new HashMap<>();
        Set<String> sandingProblems = new HashSet<>();
        sandingProblems.add("Hood");
        sandingProblems.add("Doors");
        areas.put("Sanding", sandingProblems);
        Set<String> engineProblems = new HashSet<>();
        engineProblems.add("Oil panel seal");
        areas.put("Engine", engineProblems);
        Set<String> electricalProblems = new HashSet<>();
        electricalProblems.add("Oil pressure light");
        electricalProblems.add("Headlight switch");
        areas.put("Electrical", electricalProblems);
        Job job = new Job("Blue Spitfire", areas);

        System.out.println(job.model);
        for (Map.Entry<String, Set<String>> entry : areas.entrySet()) {
            System.out.println("\t" + entry.getKey());
            for (String problem : entry.getValue()) {
                System.out.println("\t\t" + problem);
            }
        }
    }
}

【讨论】:

  • 有没有办法解决我的 ArrayLists 问题?我的编程教育在 12 年级结束。
  • 我不建议将自己限制在特定级别的代码。课程和地图是 101 编程,所以如果您在某个时候不学习它们,您将处于艰难时期。
  • 我会调查的。我不会在未来的职业中使用编程,但我愿意学习!
  • 我添加了一个完整的示例来构建结构,然后以您在问题中使用的相同格式将它们打印出来。您应该能够获取示例代码,将其放入名为“Example.java”的文件中,编译并运行它。
  • 我会试试的。非常感谢您的帮助和时间!
【解决方案2】:

希望这会有所帮助。

import java.util.ArrayList;

class Vechicle {

    Vechicle(String vName) {
        vehicleName= vName;
    }
    String vehicleName;
    ArrayList<Job> jobs = new ArrayList<>();

    void addJob(Job j) {
        jobs.add(j);
    }
    @Override
    public String toString() {
        // TODO Auto-generated method stub
        String returnString = vehicleName ;
        for (Job j: jobs) {
            returnString = returnString+ "\r\n\t"+ j.jobName;
            for (String jobSpecifics: j.jobsSpecifics) {
                returnString = returnString+ "\r\n\t\t"+ jobSpecifics;
            }
        }
        return returnString;
    }
}

class Job {
    String jobName;
    ArrayList<String> jobsSpecifics = new ArrayList<>();
    Job(String jobName) {
        this.jobName= jobName;
    }
    void addJobSpecifics(String s) {
        jobsSpecifics.add (s);
    }
}

public class VechicleMain {

    public static void main(String[] args) {

        Vechicle v = new Vechicle("Blue Spitfire");
        Job j= new Job("Sanding");
        j.addJobSpecifics("Hood");
        j.addJobSpecifics("Doors");
        v.addJob(j);
        System.out.println(v);
        }
}

输出:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-23
    • 2017-09-14
    相关资源
    最近更新 更多