Map HashMap Hashtable
特点:无序,唯一
public static void main(String[] args) {
Map<String,Integer> map = new HashMap<>();
map.put("lili",1234533);
map.put("nana",765342);
map.put("jack",87653553);
map.put("lili",174356);
System.out.println(map);//{nana=765342, lili=174356, jack=87653553}
keyset values
keyset返回集合中所有的key,类型是Set
values返回集合中所有的value,类型是collection
//keyset 返回集合中所有的key
Set<String> key = map.keySet();
for(String s:key)
{
System.out.print(s+" "); //nana lili jack
}
//返回collection类型的所有value
Collection<Integer> values = map.values();
for(Integer i:values)
{
System.out.print(i+" "); //765342 174356 87653553
}
得到所有value的另一种方法(get(key))
Set<String> key = map.keySet();
for(String s:key)
{
//通过get获得所有value
System.out.print(map.get(s)+" "); //765342 174356 87653553
}
查看集合元素 entry
//Entry是一个接口
//这个Set集合中的每一个元素都是Entry的实现类(相当于对这两个泛型的封装)
Set<Map.Entry<String, Integer>> entries = map.entrySet();
for(Map.Entry<String,Integer> e:entries)
{
//e相当把key和value一起封装,
// 并且相当于Entry下的具体的一个实现类
System.out.println(e.getKey()+"-----"+e.getValue());
}
LinkedHashMap
唯一,有序
底层多了一个链表维护
#hashmap
当两个entry类的key值相同时,第二个entry会把前一个entry的value替换
Treemap
按key的升序排列,唯一
遍历的3种方式
1.Set<Entry<K,V>> entrySet();
Set<Map.Entry<Integer, String>> entrySet = studentMap.entrySet();
for (Map.Entry<Integer, String> entry : entrySet) {//map集合里面的每组数据 都在entry对象中
Integer key = entry.getKey();
String value = entry.getValue();
System.out.println("key:" + key + " ----- value:" + value);
2.Set keySet 返回map的所有key(性能低),可以通过key get到value
Set<Integer> keySet = studentMap.keySet();
Iterator<Integer> it = keySet.iterator();
while (it.hasNext()) {
Integer key = it.next();
String value = studentMap.get(key);
System.out.println("key:" + key + " ----- value:" + value);
3.forEach(Bicosumer bi) 需要重写参数中的接口方法
studentMap.forEach(new BiConsumer<Integer, String>() {
@Override
public void accept(Integer key, String value) {
System.out.println("key:" + key + " ----- value:" + value);
}
});
4.只能获得value Collection values();