在java.util.Map中搜索键时如何忽略区分大小写?
我想知道我们是否可以忽略这个案例来查找地图中的密钥.
Example,
Map<String, Integer> lookup = new HashMap<String, Integer>();
lookup.put("one", 1);
lookup.put("two", 2);
lookup.put("three", 3);
Run Code Online (Sandbox Code Playgroud)
用户输入可以是"ONE"或"one".在这种情况下,而不是将用户输入转换为小写.是否有任何方法可以通过任何方法忽略关键敏感?
谢谢,凯西尔
for (Entry<Double, String> entry : map.entrySet()) {
Double key = entry.getKey();
String value = entry.getValue();
// double nextKey = ?
// String nextvalue = ?
// double prevKey = ?
// String prevValue = ?
}
Run Code Online (Sandbox Code Playgroud)
是否有可能在迭代地图时知道前一个元素和下一个元素是什么?
我可以用什么来存储多种不同类型的数据,Int/String /等?我来自PHP背景,我可以将不同类型的数据存储到数组中,但我不知道如何在Java中执行此操作.
举个例子:
$array = array(
"val1" => 1,
"val2" => "cat",
"val3" => true
);
Run Code Online (Sandbox Code Playgroud)
如何在Java中创建类似的东西?
在TreeMap中 - 元素
在HashMap 中排序- 元素未排序
所以,如果我认为get,put和remove方法这地图,我应该使用的性能?
在linkedhashmap和hashmap中选择的实际场景是什么?我已经完成了每个工作,并得出结论:linkedhashmap维护插入顺序,即元素将以与插入顺序相同的顺序检索,而hashmap将不维护顺序.那么有人可以告诉在什么实际场景中选择其中一个集合框架以及为什么?
根据这些:
该HashMap中Java应该是未排序的,但它被相对于分类Key.
我认为这是一个问题,因为我需要插入订单数据.所以,我用了LinkedHashMap.但我仍然困惑为什么HashMap排序它.
有人能解释一下吗?
我做了一个简单的例子来查看排序.
public static void main(String[] args) {
HashMap<Integer, String> newHashMap = new HashMap<Integer, String>();
newHashMap.put(2, "First");
newHashMap.put(0, "Second");
newHashMap.put(3, "Third");
newHashMap.put(1, "Fourth");
Iterator<Entry<Integer, String>> iterator = newHashMap.entrySet()
.iterator();
while (iterator.hasNext()) {
Map.Entry<Integer, String> entry = iterator.next();
System.out.println("Key: " + entry.getKey());
System.out.println("Value: " + entry.getValue());
iterator.remove();
}
}
Run Code Online (Sandbox Code Playgroud)
结果:
Key: 0
Value: Second
Key: 1
Value: Fourth
Key: 2
Value: First
Key: 3 …Run Code Online (Sandbox Code Playgroud) 是否保证标准实现中的键和值以java.util.Map相同的顺序返回?例如,如果 map 包含映射x1 -> y1and x2 -> y2,那么如果keySet()迭代产生x1, x2,是否保证values()迭代会产生y1, y2而不是y2, y1?我没有看到任何地方保证这是真的,但它似乎有效。谁能给出证实或否认这个前提并给出反例?
public class MapsTest {
@Test
public void hashMapKeysAndValuesAreInSameOrder() {
assertKeysAndValuesAreInSameOrder(new HashMap<>());
}
@Test
public void treeMapKeysAndValuesAreInSameOrder() {
assertKeysAndValuesAreInSameOrder(new TreeMap<>());
}
private void assertKeysAndValuesAreInSameOrder(Map<Integer, Integer> map) {
Random random = new Random();
IntStream.range(0, 100000).map(i -> random.nextInt()).forEach(i -> map.put(i, i));
assertEquals(new ArrayList<>(map.keySet()), new ArrayList<>(map.values()));
}
}
Run Code Online (Sandbox Code Playgroud) 这基本上不是HashMap基于键的排序方式.为此,我可以直接使用TreeMap没有眨眼:)
我现在拥有的是
Map<String, Object> favoritesMap = new HashMap<String, Object>();
and its contents can be
["Wednesdays" : "abcd"]
["Mondays" : "1234"]
["Not Categorized" : "pqrs"]
["Tuesdays" : "5678"]
Run Code Online (Sandbox Code Playgroud)
我想基于键对HashMap进行排序,除此之外,我需要"未分类"才能找到最后一个.
因此,在迭代keySet时所期望的是
["Mondays", "Tuesdays", "Wednesdays", "Not Categorized"] i.e. sorted on keys and "Not Categorized" is the last one
Run Code Online (Sandbox Code Playgroud)
想HashMap在创建时加入,["Not Categorized" : "pqrs"]但最后添加但HashMap不保证顺序:)
解决方案的任何其他指针?
当我们hashmap<Key, Value>使用变量添加值时put(),它们总是排序吗?
因为当我尝试使用简单的代码时,他们正在订购.
例:
Map<Integer, Integer> ctrArMap = new HashMap<Integer, Integer>();
ctrArMap.put( 1, 11);
ctrArMap.put( 2, 12);
ctrArMap.put( 3, 13);
ctrArMap.put( 4, 14);
ctrArMap.put( 5, 15);
System.out.println(ctrArMap);
Run Code Online (Sandbox Code Playgroud)
但就我而言,他们并没有订购.
java ×10
hashmap ×5
dictionary ×1
hashtable ×1
map ×1
performance ×1
sorting ×1
types ×1
variables ×1