java的Set接口
文章目录
- java的Map接口
- Map的创建
- Map的常用方法
- Map的遍历
- Map的练习
java的Map接口
Map接口存储的是一组键值对象,提供的是key到value的映射,这个key是不可以重复的,但是value可以有多个相同的值和key组成唯一的键值对
本文以HashMap为例,列举Map的创建和常用方法等等。
Map的创建
package cn.zhz.Test;
import java.util.HashMap;
import java.util.Map;
public class CountriesInfo {
public static void main(String[] args) {
//创建集合对象,将国家的信息键值对放置到集合中
Map countries = new HashMap();
countries.put("China", "中国");
countries.put("USA", "美国");
countries.put("Japan", "日本");
countries.put("France", "法国");
//获取集合中存储元素的个数(返回的是键值对的个数)
System.out.println(countries.size());
//获取集合中特定的key对应的value--Object返回值类型,需要进行强制类型转换
String country = (String) countries.get("China");
System.out.println(country);
}
}
Map的常用方法
package cn.zhz.Test;
import java.util.HashMap;
import java.util.Map;
public class CountriesInfo {
public static void main(String[] args) {
//创建集合对象,将国家的信息键值对放置到集合中
Map countries = new HashMap();
countries.put("China", "中国");
countries.put("USA", "美国");
countries.put("Japan", "日本");
countries.put("France", "法国");
//获取集合中存储元素的个数(返回的是键值对的个数)
System.out.println(countries.size());
//获取集合中特定的key对应的value--Object返回值类型,需要进行强制类型转换
String country = (String) countries.get("China");
System.out.println(country);
//获取集合中特定的key对应的value,如果找不到,则返回null
String country2 = (String) countries.get("Australia");
System.out.println(country2);
//判断集合中是否存在某一个国家
System.out.println("国家列表中是否存在China\t" + countries.containsKey("China"));
System.out.println("国家列表中是否存在Australia\t" + countries.containsKey("Australia"));
//删除某个特定的key对应的键值对
System.out.println("国家列表中是否存在USA\t" + countries.containsKey("USA"));
countries.remove("USA");
System.out.println("国家列表中是否存在USA\t" + countries.containsKey("USA"));
System.out.println(countries.size());
//获取键的集合
System.out.println(countries.keySet());
//获取值的集合
System.out.println(countries.values());
//获取键值对的集合
System.out.println(countries);
}
}
Map的遍历
Map的遍历由两种方式:
- 第一种方式:
通过遍历key,通过key来获取value
在第一种方式中又可以有两种方法:
方法一:通过增强型的for循环来进行遍历
方法二:通过迭代器Iterator来实现遍历
- 第二种方式:
遍历key-value对
package cn.zhz.Test;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
public class CountriesInfo {
public static void main(String[] args) {
//创建集合对象,将国家的信息键值对放置到集合中
Map countries = new HashMap();
countries.put("China", "中国");
countries.put("USA", "美国");
countries.put("Japan", "日本");
countries.put("France", "法国");
//获取集合中存储元素的个数(返回的是键值对的个数)
System.out.println(countries.size());
//获取集合中特定的key对应的value--Object返回值类型,需要进行强制类型转换
String country = (String) countries.get("China");
System.out.println(country);
//获取集合中特定的key对应的value,如果找不到,则返回null
String country2 = (String) countries.get("Australia");
System.out.println(country2);
//判断集合中是否存在某一个国家
System.out.println("国家列表中是否存在China\t" + countries.containsKey("China"));
System.out.println("国家列表中是否存在Australia\t" + countries.containsKey("Australia"));
//删除某个特定的key对应的键值对
System.out.println("国家列表中是否存在USA\t" + countries.containsKey("USA"));
countries.remove("USA");
System.out.println("国家列表中是否存在USA\t" + countries.containsKey("USA"));
System.out.println(countries.size());
//获取键的集合
System.out.println(countries.keySet());
//获取值的集合
System.out.println(countries.values());
//获取键值对的集合
System.out.println(countries);
//遍历Map-->思路一:遍历key(Set),通过key找到value
Set keys = countries.keySet();//获取到Map中的所有的key
//方法一:增强型for遍历key的集合(Set)
for (Object obj : keys) {
String key = (String) obj;//获取到Map中的每一个key
String value = (String) countries.get(key);//根据Map中的每一个key获取对应的value
System.out.println(key + "--" + value);
}
//方法二:迭代器Iterator遍历key的集合(Set)
Iterator itor = keys.iterator();
while (itor.hasNext()) {
String key = (String) itor.next();//获取到Map中的每一个key
String value = (String) countries.get(key);//根据Map中的每一个key去获取对应的value
System.out.println(key + "--" + value);
}
//遍历Map 思路二:获取Map中的所有的键值对,然后在键值对中分别获取key和value
Set set = countries.entrySet();//获取Map中的键值对
//遍历键值对的集合,把每一个键值对(obj)--Map.Entry(键值对的类型)拿出来
for(Object obj:set){
Map.Entry me = (Map.Entry) obj;
String key = (String)me.getKey();//获取键值对中的键
String value = (String)me.getValue();//获取兼职对中的值
System.out.println(key+"--"+ value);
}
}
}
Map的练习
如果要求每个人起一个英文名称相对应,应该如何实现存储和一系列操作呢?
声明一个学生类,包含姓名和性别属性
package cn.zhz.Kind;
//声明一个学生类:包含姓名和性别
public class Student {
private String name;
private String sex;
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", sex='" + sex + '\'' +
'}';
}
public Student(String name, String sex) {
this.name = name;
this.sex = sex;
}
public Student() {
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
编写一个测试类
package cn.zhz.Test;
import cn.zhz.Kind.Student;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
import java.util.Set;
public class StudentInfoMgr {
public static void main(String[] args) {
Student stu1 = new Student("张三", "男");
Student stu2 = new Student("李明", "男");
Student stu3 = new Student("王华", "女");
Map stuMap = new HashMap();
stuMap.put("Buck", stu1);
stuMap.put("Jack", stu2);
stuMap.put("Jession", stu3);
//输出共几名学生进入外企
System.out.println("一共有" + stuMap.size() + "名学生");
//输出分别是谁
Set set = stuMap.entrySet();
for (Object obj : set) {
Map.Entry me = (Map.Entry) obj;
String key = (String) me.getKey();
Student student = (Student) me.getValue();
System.out.println(key + "-" + student.getName() + "-" + student.getSex());
}
//实现获取特定的英文名称对应的学生信息
Scanner input = new Scanner(System.in);
System.out.println("请输入您要查找的学生的英文名称:");
String name = input.next();
if(stuMap.containsKey(name)){
//在Map中找到了相应的key,根据key去获取相应的value(学生对象)
Student student= (Student) stuMap.get(name);
System.out.println("该学生的全部信息如下:");
System.out.println(name+"-"+student.getName()+"-"+student.getSex());
}else{
System.out.println("对不起,没有改名学生");
}
}
}
Collections类