当前位置: 首页 > 知识库问答 >
问题:

如何从LinkedHashMap中提取特定值以将其插入数组

韦德厚
2023-03-14

作业说明我的教授想让我们使用一个散列图和一个数组,在给定航班列表的情况下,找到从一个机场到另一个机场的飞机的最快路线。他希望我们在遍历hashmap时填充数组,查找从每个机场出发的最快航班。我已经在链表的一个单元格中创建了带有航班目的地以及起飞时间和到达时间的散列图,但是当我试图提取每个离开机场的航班的起飞和到达时间并将它们插入数组时,我不能。有没有一种方法可以从一个链表中提取一个特定的值,这个链表中的每个单元格中都有多个值,或者我应该用另一种方法呢?我已经确认了hashmap有正确的信息,并且正常工作。我只是无法或者不知道如何访问hashmap中的信息,将其发送到数组中。调试器内部的信息是什么样子的

LinkedHashMap<String, LinkedList<Info>> airportsHash = new LinkedHashMap<String, LinkedList<Info>>();
LinkedList<Info> destinations;

public Info (String destination, double departureTime, double arrivalTime){
        this.destination = destination;
        this.departureTime = departureTime;
        this.arrivalTime = arrivalTime;
    }
public void fillHash(String origin, String destination, double departureTime, double arrivalTime) {
        if(airportsHash.containsKey(origin)){
            destinations = airportsHash.get(origin);
            destinations.add(new Info(destination, departureTime/100, arrivalTime/100));
        }
        else{
            destinations = new LinkedList<Info>();
            destinations.add(new Info(destination, departureTime/100, arrivalTime/100));
            airportsHash.put(origin, destinations);
        }
    }

共有1个答案

夏侯腾
2023-03-14

先简单介绍几点:

  • 当你在问题中使用“hash”这个词时,你实际上是指“map”。使用哈希是实现映射的常用方法,但它不是唯一的方法(搜索树是另一种常用技术)。最好使用结构的名称而不是实现的名称
  • 同样,您应该使用适当的接口而不是实现类来声明变量。参见下面的示例
  • 记录已引入Java。如果您使用的是Java的最新版本,那么它们是定义直接数据记录的好方法,例如info
  • map中有一些方法,可以轻松地处理缺少的键,而无需使用if语句

所以做出这些改变:

record FlightInfo(String destination, double departureTime, double arrivalTime) { }

Map<String,List<FlightInfo>> airportFlightMap = new HashMap<>();

public void addFlight(String origin, String destination, double departureTime, double arrivalTime) {
    airportFlightMap
        .computeIfAbsent(origin, o -> new ArrayList<>())
        .add(new FlightInfo(destination, departureTime, arrivalTime));
}

当我试图提取每个离开机场的航班的起飞和到达时间以插入到数组中时,我不能。有没有一种方法可以从一个链表中提取一个特定的值,这个链表中的每个单元格中都有多个值,或者我应该用另一种方法呢?

从字面上理解你的问题,提取每个离开机场的航班的起飞和到达时间的方法是:

List<Double> departureTimes = airportFlightMap.get(airportName)
    .stream().map(FlightInfo::departureTime).collect(Collectors.toList());
List<Double> arrivalTimes = airportFlightMap.get(airportName)
    .stream().map(FlightInfo::arrivalTime).collect(Collectors.toList());

虽然我不确定这如何使你更接近你的目标,找到从一个机场到另一个机场的最快路径。为此,您需要一个搜索算法。例如,在伪代码中

find path(current route, destination):
    if end of current route = destination:
        process path
    else
        for each flight from end of current route:
            if next airport not in current route:
                find path(current route + next airport, destination)
 类似资料:
  • 我对编程很陌生,我想做一个程序,用不同的变量发出12张卡片,然后将每张完整的卡片存储在某个地方供以后使用: N=Number(卡片上的数字,可以从1到3) C=Color(卡片是什么颜色,绿色、蓝色或红色) F=Form(有3种形式:蛇、时钟和圆) R=Fill(可以是满的、半的或空的) 这是我到目前为止得到的:

  • 我有一个表(“table1”),有3列,分别称为col1、col2和col3(每个列都是VARCHAR),其中有4个值,如下所示: 我需要能够在任何时候将数据添加到任何列中,而不影响其他列。互联网上非常流行的代码是(比如,我们只需要在col2和col3列中添加数据): 但它添加了新行,如下所示: 我真正需要的是用新值填充列“col1”中以值“datA2”开头的行,并得到如下表: 该表有3列,每列对

  • 公共静态地图>hillsByCounty(列表山){ }我的hashmap的值为(列表中的山名、国家名、高度、经度和纬度)。但是,我只需要打印3个县,每个县的前3个山及其高度,我该怎么做?在这里输入图像描述

  • 我是一个初学者,我想用Python写一个不和谐的机器人。我已经连接到我的数据库,我从数据库中获取数据,但我不知道如何将数据发送到discord服务器通道。

  • 我使用的函数返回LinkedHashMap中的键值对。 注意:我无法将LinkedHashMap更改为代码中的任何其他映射,因为该函数正在其他几个函数中使用。 我也在谷歌上搜索并尝试使用TreeMap,它以升序给出我们想要的结果。但是,在树映射中,键是按升序排列的,而不是值。 我的要求主要是价值观。 如何按升序获取值。 提前谢谢!!!!

  • 更具体地说,LinkedHashMap有K=String,V=String。 从这个映射中,我可以使用映射方法map.keyset()创建一个包含节点的列表,并使用map.values()方法创建一个包含邻居的单独列表。我还可以创建String类型的数组,或者邻居的String[]类型的数组。 每个节点只能与其在LinkedHashMap中定义为值的邻居通信。 Gossip(push)协议:假设一