gpt4 book ai didi

android - Java,如何实现perl的散列数组?

转载 作者:搜寻专家 更新时间:2023-11-01 07:39:34 24 4
gpt4 key购买 nike

我对 Perl 的数据结构有很好的经验,而且我是从 java(在 Android 上)开始的。我需要实现类似这些 perl 数据结构的东西:

$beacons = (
{
ssid => "north",
bssid => "01:02:03:04:05:06",
},
{
ssid => "east",
bssid => "02:03:04:05:06:07",
},
{
ssid => "south",
bssid => "03:04:05:06:07:08",
},
{
ssid => "west",
bssid => "04:05:06:07:08:09",
},
);

$points = (
{
id => "La Gioconda",
rssi => {
north => -55,
east => -76,
south => -64,
west => -92,
},
},
{
id => "La Pietà",
rssi => {
north => -51,
east => -60,
south => -88,
west => -59,
},
},
...
);

这些是静态结构(最终从磁盘上的 xml 文件中读取)。

如果它有任何用处,我正在实现一个本地(室内)定位系统,使用位于博物馆每个房间 4 个角落的 4 个 wifi 信标的 rssi(信号强度)值的变化,以找到智能手机的位置。在运行时,我必须将 4 个 rssi 值(每个来自具有特定 ssid 和 bssid 的信标)与我的所有点结构进行比较,并找到最接近我的值的一个。

Java 中可用的最佳构造是什么?我应该使用 HashMap 吗?你能举个例子吗?

最佳答案

方法一:
您可以使用 Hashmap 来实现您的目标。

Map<String,String> beacons = new HashMap<String,String>();
beacons.put("ssid","north");
beacons.put("bssid","01:02:03:04:05:06");
System.out.println(beacons.get("ssid")); // Outputs "north"

方法 2:
如果您的数据来自 xml 文件,您可以使用 JAXB API(Java XML 绑定(bind))来构建您的对象。

假设我们有以下 XML 文件:beacons.xml

<beacons>
<beacon ssid="north">
<bssid>01:02:03:04:05:06</bssid>
</beacon>
<beacon ssid="north">
<bssid>02:03:04:05:06:07</bssid>
</beacon>
</beacons>

类可以这样定义:

beacons.java

package com.mycompany;

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

import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement
public class Beacons {
@XmlElement(name = "beacon")
public List<Beacon> beaconsList = new ArrayList<Beacon>();
}

beacon.java

package com.mycompany;

import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement
public class Beacon {
@XmlAttribute
private String ssid;
@XmlElement
private String bssid;

public String getSsid() {
return ssid;
}

public String getBssid() {
return bssid;
}
}

加载类的示例代码:

package com.mycompany;
import java.io.File;
import java.util.List;

import javax.xml.bind.JAXBContext;
import javax.xml.bind.Unmarshaller;

public class Main {

public static void main(String args[]) {
try {
JAXBContext jc = JAXBContext.newInstance(Beacons.class);
Unmarshaller unmarshaller = jc.createUnmarshaller();

Beacons myBeacons = (Beacons) unmarshaller.unmarshal(new File("beacons.xml"));

List<Beacon> beaconsList = myBeacons.beaconsList;
for (int i = 0; i < beaconsList.size(); i++) {
Beacon a_beacon = beaconsList.get(i);
System.out.println("Beacon " + (i+1));
System.out.println("SSID : " + a_beacon.getSsid());
System.out.println("BSSID : " + a_beacon.getBssid());
System.out.println();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}

--

这是输出:


Beacon 1
SSID : north
BSSID : 01:02:03:04:05:06

Beacon 2
SSID : north
BSSID : 02:03:04:05:06:07

关于android - Java,如何实现perl的散列数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5830042/

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