我有一个字符串数组,就像:
String [] paramEnv = {"key1=value1","key2=value2","key2=value2"};
现在我需要将其转换为HashMap。
我已经为它写了两种方法,我想知道哪一种在效率方面更好。
方法1:
String param = "";
String paramName = "";
String paramValue = "";
if ((null != paramEnv) && (paramEnv.length > 0)) {
for (int i = 0; i < paramEnv.length; i++) {
param = paramEnv[i];
int indexOfEqualTo = param.indexOf("=");
paramName = param.substring(0, indexOfEqualTo);
paramValue = param.substring(indexOfEqualTo + 1);
hmKeyValFromParamEnv.put(paramName, paramValue);
}
}
return hmKeyValFromParamEnv;
方法2:
String param = "";
String paramName = "";
String paramValue = "";
if ((null != paramEnv) && (paramEnv.length > 0)) {
for (int i = 0; i < paramEnv.length; i++) {
param = paramEnv[i];
paramName = (param.split("="))[0];
paramValue = (param.split("="))[1];
hmKeyValFromParamEnv.put(paramName, paramValue);
}
}
return hmKeyValFromParamEnv;
请让我知道任何更好的实施以及。
我将使用您的第一个实现,因为子字符串将比基于模式匹配的split更快、更高效(只需对字符进行一次检查,直到找到等于symbol)。
两者都有O(n)复杂性。要在速度上有显著差异,需要非常大的paramEnv
array。
正如评论者所指出的,您可以通过将split的两个参数存储在数组中,然后将它们放入map来稍微优化它。现在还不清楚这样做是否会显著提高速度(我猜你可能不会获得那么多速度)。
如果你能使用Java 8
public class ArrayToMap {
public static void main(String[] args) {
String[] arr = new String[]{"key1=value1","key2=value2"};
Arrays.stream(arr)
.map(s -> s.split("="))
.collect(Collectors.toMap(sa -> sa[0], sb -> sb[1], (v1, v2)->v1));
}
}
//编辑:
添加重复项消除。这只是一个例子。你应该制定自己的策略来消除重复(如果你需要一些具体的方法)。
//编辑2:@邹邹评论后将impl改成使用自定义合并功能
//编辑3:如果你不能使用Java 8,那么就使用番石榴:
class KeyEntry<K, V> implements Map.Entry<K, V> {
@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (!(o instanceof KeyEntry)) {
return false;
}
KeyEntry keyEntry = (KeyEntry) o;
if (!key.equals(keyEntry.key)) {
return false;
}
return true;
}
@Override
public String toString() {
return "{\"KeyEntry\":{" +
"\"key\": \"" + key + "\"" +
", \"value\": \"" + value + "\"" +
"}}";
}
@Override
public int hashCode() {
return key.hashCode();
}
KeyEntry(K key, V value) {
this.key = key;
this.value = value;
}
@Override
public K getKey() {
return key;
}
@Override
public V getValue() {
return value;
}
@Override
public V setValue(V value) {
throw new UnsupportedOperationException("NO!");
}
private final K key;
private final V value;
}
因为常见的Entry
impl使用equals中的键和值
我们需要自定义类。
然后我们可以创造这样的东西:
Map<String, String> m = new HashMap<>();
ImmutableSet<Map.Entry<String, String>> uniqueKey = FluentIterable.from(new ArrayList<String>(Arrays.asList(arr)))
.transform(new Function<String, Map.Entry<String, String>>() {
@Override
public Map.Entry<String, String> apply(String s) {
String[] splited = s.split("=");
return new KeyEntry(splited[0], splited[1]) {
};
}
}).toSet();
for (Map.Entry<String, String> s : uniqueKey) {
m.put(s.getKey(), s.getValue());
System.out.println(s);
}
按键输入
设置
Map
我正在尝试将对象数组转换为HashMap。我只有ES6的某些部分可用,我也不能使用。 数组中的对象非常简单,例如。我需要按对它们进行排序。现在我需要一个“字典”,按iso->保存排序。 我已经试过了(从这里(所以)) 但是原来是一个,索引以开始。希望有一个小东西我没有看到。但是目前我的脑子里想的是如何将一个简单的数组转换成一个类似HashMap的对象。也许? 我还应该注意,我使用的是,我以前在没有
我是Java 8流的新手。请提供建议,如何转换流<代码>流 例如,我在代码中有一些流: 我怎么能做这样的事 ? 对不起,我的英语不好。
我在数组中有一组值,每个值都有一个和。 一旦我有了值数组和类型控制台和,输出是: 如何将这些值存储在哈希映射中,如键值(ID-LABEL)对,并将其存储在json中?
有没有jQuery或javascript库生成给定json数据的动态表?我不想定义列,库应该读取json散列中的键并生成列。 当然,我可以自己遍历json数据并生成html表。我只是想知道是否有这样的库存在,我可以简单地重复使用。
问题内容: 我想 将 HashMap 转换为json数组,我的代码如下: 我已经尝试过了,但是没有用 。有什么办法吗? 问题答案: 试试这个, 通过复制给定映射中的所有名称/值映射来创建新的JSONObject。 参数copyFrom一个映射,其键的类型为String,其值为受支持的类型。 如果地图的任何键为null,则抛出NullPointerException。 基本用法: 从JSONObje
我想把它转换成数组,但是当我这样做的时候/我得到的是: 那么如何将转换为呢?在其他科目中找到的答案都不起作用。