0201 map接口
Map接口特点:
(1)Map接口中的数据存储是以键值对方式存在
(2)collection是单列集合,Map是双列集合
(3)Map中不允许存在相同的键值,但value值是可以重复的
(4)Map接口中常用的集合有HashMap集合和LinkedHashMap集合
Map中常用的方法
put(k key,v value);将k键的key,v的value值存入集合中
get(k key);得到key键的value值
remove(k key );将k键为key的数据条删除
代码展示:
public class Demo01 {
public static void main(String[] args) {
//创建map集合
HashMap<String,Integer> map=new HashMap<String,Integer>();
//存值
map.put("喜洋洋",18);
map.put("美羊羊",19);
map.put("美羊羊",20);
//删除
map.remove("喜洋洋");
//取值
System.out.println(map.get("喜洋洋"));
System.out.println(map.get("美羊羊"));
}
}
运行结果为:
null
20
Map中遍历方法
1、getkey()方法,该方法返回一个所有key所在的set集合,得到set集合后,可以用增强for或用迭代器去遍历这个set集合就可以了
例:用增强for遍历
public class Demo02 {
public static void main(String[] args) {
HashMap<String, String> map=new HashMap<String, String>();
map.put("小白", "java1127");
map.put("小黑", "java1128");
map.put("小兰", "java1129");
//1.keyset方法
//现获取key所在的set集合
Set<String> set=map.keySet();
//增强for遍历
for(String s:set){
System.out.println(s+"...."+map.get(s));
}
}
}
例:用迭代器遍例
public class Demo02 {
public static void main(String[] args) {
// TODO Auto-generated method stub
HashMap<String, String> map=new HashMap<String, String>();
map.put("小白", "java1127");
map.put("小黑", "java1128");
map.put("小兰", "java1129");
//1.keyset加迭代器
Set<String> set=map.keySet();
Iterator<String> it=set.iterator();
while(it.hasNext()){
String key=it.next();
System.out.println(key+"..."+map.get(key));
}
}
}
2、entrySet()方法,该方法返回一个存着键值对的set集合,(键值对集合:Map.entry<K,V>,entry<K,V>是map接口中用static修饰的内部类,该类中有独有的获取键和值的方法:getKey(),getValue(),这两个方法可以获取键值对的键和值)
例:用增强for方法,遍例键值对
public class Demo02 {
public static void main(String[] args) {
HashMap<String, String> map=new HashMap<String, String>();
map.put("小白", "java1127");
map.put("小黑", "java1128");
map.put("小兰", "java1129");
//2Entryaet对象
//获取所有结婚证所在的set集合
Set<Map.Entry<String, String>> set=map.entrySet();
//遍历set集合
for(Map.Entry<String, String> entry:set){
System.out.println(entry.getKey()+"..."+entry.getValue());
}
}
}
例:用迭代器,遍例键值对
public class Demo02 {
public static void main(String[] args) {
HashMap<String, String> map=new HashMap<String, String>();
map.put("小白", "java1127");
map.put("小黑", "java1128");
map.put("小兰", "java1129");
//3.迭代器
//获取所有结婚证所在的set集合
Set<Map.Entry<String, String>> set=map.entrySet();
//获取迭代器对象
Iterator<Map.Entry<String, String>> it=set.iterator();
//遍历
while(it.hasNext()){
Map.Entry<String, String> entry=it.next();
System.out.println(entry.getKey()+"..."+entry.getValue());
}
}
}
Map集合中我们要存储自定义类对象时,要在自定义类中重写equls方法和hashcode方法。
例:自定义Person类
public class Person {
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "Person [name=" + name + ", age=" + age + "]";
}
public Person(String name, int age) {
super();
this.name = name;
this.age = age;
}
public Person() {
super();
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + age;
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;
Person other = (Person) obj;
if (age != other.age)
return false;
if (name == null) {
if (other.name != null)
return false;
} else if (!name.equals(other.name))
return false;
return true;
}
}
public class Demo03 {
public static void main(String[] args) {
HashMap<Person, String> map=new HashMap<Person, String>();
//存值
map.put(new Person("小红",18), "java1127");
map.put(new Person("小黑",19), "java1128");
map.put(new Person("小黑",19), "java1128");
//entryset加增强for
Set<Map.Entry<Person, String>> set=map.entrySet();
for(Map.Entry<Person, String> entry:set){
System.out.println(entry.getKey()+".."+entry.getValue());
}
}
}

浙公网安备 33010602011771号