Map与Collection的区别
/*
- Collection中集合,元素都是孤立存在的,向集合中添加元素采用的是一个一个的添加的方式
- Map中的集合,元素都是成对出现的,每个元素由键和值两部分组成,通过键可以找到对应的值,
- 向集合中添加元素采用的是一对一对的添加的方式。
- Map中有多个子类,主要有HashMap和LinkedHashMap。
- HashMap:存储数据采用哈希表结构,元素的存取顺序不能保持一致(无序)。
- 由于要保证键的唯一、不重复,需要重写键的hashCode()和equals()
- 键和值的泛型在确定时,可以是相同的类型,也可以是不同的类型
*/
Map常用方法
1.public v put(K key,V value);把指定的键与值添加到Map集合中若曾有该键值则返回原来的值,并将新值写入,若未曾有该键值,则创建该键值对,并返回null
2.public V remove(Object key);把指定的键所对应的键值对元素从集合中删除返回被删除的元素的值
3.public V get(Object key);根据指定的键,在集合中获取对应的值
4.public Set keyset();获取集合中所有键,存储到Set集合中,一般是用来为遍历服务
package Work1;
import java.util.Map;
import java.util.Set;
public class HashMap {
public static void main(String[] args) {
Map<String,String> map=new java.util.HashMap<>();
System.out.println(map.put("中国","北京"));//返回null因为map里没有这个键
map.put("美国","华盛顿");
map.put("俄罗斯","莫斯科");
map.put("日本","东京");
map.put("德国","柏林");
System.out.println(map);
//输出结果:{美国=华盛顿, 俄罗斯=莫斯科, 中国=北京, 日本=东京, 德国=柏林}返回是无序的
map.put("韩国","汉城");
System.out.println(map);
//输出结果:{美国=华盛顿, 韩国=汉城, 俄罗斯=莫斯科, 中国=北京, 日本=东京, 德国=柏林}
System.out.println(map.put("韩国","首尔"));//在map中有韩国关键字,所以再put韩国关键字,就会返回原来的键值,再把新键值写进去
System.out.println(map.remove("日本"));//输出结果:东京
System.out.println(map);
//输出结果:{美国=华盛顿, 韩国=首尔, 俄罗斯=莫斯科, 中国=北京, 德国=柏林}
System.out.println(map.get("中国"));//输出结果:北京
Set<String> keys=map.keySet();//获取集合中所有键,存储到Set集合中,一般是用来为遍历服务
for (String key :keys) {
System.out.println(key + ":"+map.get(key));
//美国:华盛顿
//韩国:首尔
//俄罗斯:莫斯科
//中国:北京
//德国:柏林
}
}
}
Entry
Entry是Map的一个内部接口,我们存入Map的每一对键值对都是以它的实现类的对象的形式存储的
entrySet();获取到Map集合中所有的键值对对象的集合(Set集合)
package SE03.n1Collection;
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
public class Demo08Map {
public static void main(String[] args) {
Map<String,String> map1=new HashMap<String, String>();
map1.put("中国","北京");
map1.put("美国","华盛顿");
map1.put("俄罗斯","莫斯科");
Set<Entry<String,String>> entrySet=map1.entrySet();
for (Entry<String, String> entry : entrySet) {
System.out.println(entry.getKey()+"首都是"+entry.getValue());
}
// Entry是Map的一个内部接口,我们存入Map的每一对键值对都是以它的实现类的对象的形式存储的
// 使用Map存储自定义类的键和值,键需要重写hashCode()和equals()方法
Map<Husband, Wife> map2=new HashMap<Husband, Wife>();
map2.put(new Husband("小王"),new Wife("小晨"));
map2.put(new Husband("小薛"),new Wife("小富"));
map2.put(new Husband("小周"),new Wife("小华"));
Set<Entry<Husband, Wife>> entryKey=map2.entrySet();
for (Entry<Husband, Wife> entry : entryKey) {
String Husbandname=entry.getKey().getName();
String Wifename=entry.getValue().getName();
System.out.println(Husbandname+"的老婆是:"+Wifename);
}
}
}
Wife
package SE03.n1Collection;
public class Wife {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "Wife [name=" + name + "]";
}
public Wife(String name) {
super();
this.name = name;
}
public Wife() {
super();
}
}
Husband
package SE03.n1Collection;
public class Husband {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "Husband [name=" + name + "]";
}
public Husband(String name) {
super();
this.name = name;
}
public Husband() {
super();
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((name == null) ? 0 : name.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Husband other = (Husband) obj;
if (name == null) {
if (other.name != null)
return false;
} else if (!name.equals(other.name))
return false;
return true;
}
}