搜索
搜索,查找,也可称检索,是在大量的数据元素中找到某个特定的数据元素而进行的工作。
一般把搜索的数据称为关键字(Key),和关键字对应的称为值(Value),所以模型会有两种:
- 纯 key 模型,即我们 Set 要解决的事情,只需要判断关键字在不在集合中即可,没有关联的 value;
- Key-Value 模型,即我们 Map 要解决的事情,需要根据指定 Key 找到关联的 Value。
Map的使用-- 统计
Map.Entry<K, V> 即 Map 中定义的 K 类型的 key 和 V 类型的 value 的映射关系的类。
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.TreeMap;
/**
* @ Created with IntelliJ IDEA.
* @ClassName TestMap
* @Description
* @Author by小房
* @Date 2020/5/12 16:55
*/
class Student {
public String name;
public int age;
public String grade;
public String school;
public Student(String name, String grade, String school, int age) {
this.name = name;
this.grade = grade;
this.school = school;
this.age = age;
}
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", age=" + age +
", grade='" + grade + '\'' +
", school='" + school + '\'' +
'}';
}
}
public class TestMap {
public static void main(String[] args) {
Student s1 = new Student("小郭","大四","陕理工",22);
Student s2 = new Student("拾柒","研一","邮电",23);
Student s3 = new Student("十一","大一","陕理工",20);
Student s4 = new Student("十三","研二","西安交大",24);
Map<String,Student> studentMap = new TreeMap<>();
//设置 key 对应的 value
studentMap.put(s1.name,s1);
studentMap.put(s2.name,s2);
studentMap.put(s3.name,s3);
studentMap.put(s4.name,s4);
// 当前键值对 name -> student. 给定姓名就可以查找到对应的学生信息
String name = "小郭";
Student student = studentMap.get(name);
System.out.println(student);
Student s5 = new Student("小郭","研一","陕理工",122);
studentMap.put(s5.name,s5);
Student student1 = studentMap.get(name);
System.out.println(student1);
// 遍历一个 Map
// Entry 条目. 也就是键值对.
for (HashMap.Entry<String, Student> entry : studentMap.entrySet()) {
System.out.println(entry.getKey() + ": " + entry.getValue());
}
//迭代器
Iterator<Map.Entry<String, Student>> iterator = studentMap.entrySet().iterator();
while (iterator.hasNext()) {
Map.Entry<String,Student> entry = iterator.next();
System.out.println(entry.getKey() + ": " + entry.getValue());
}
}
}
迭代器
概念: 一般遍历数组都是采用for循环或者增强for,这两个方法也可以用在集合框架,但是还有一种方法是采用迭代器遍历集合框架,它是一个对象,实现了Iterator 接口或ListIterator接口。迭代器,使你能够通过循环来得到或删除集合的元素。ListIterator 继承了Iterator,以允许双向遍历列表和修改元素。
方法:
1、hasNext() :该方法会判断集合对象是否还有下一个元素,如果已经是最后一个元素则返回false。
2、next():把迭代器的指向移到下一个位置,同时,该方法返回下一个元素的引用。
3、remove() :从迭代器指向的集合中移除迭代器返回的最后一个元素。
Set 的使用 – 去重
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
public class TestSet {
public static void main(String[] args) {
Set<String> set = new HashSet<>();
// 1. add 插入元素, add 多个相同元素, 最终在 Set 中只有一份. (去重)
set.add("java");
set.add("java");
set.add("java");
set.add("c++");
set.add("Python");
set.add("JS");
// 2. Set 典型应用, 判定某个元素是否在 Set 中存在.
System.out.println(set.contains("java"));
// 3. 删除元素
set.remove("c++");
System.out.println(set.contains("c++"));
// 4. 打印所有元素
System.out.println(set);
// 5. 使用 for each 遍历
for (String s : set) {
System.out.println(s);
}
// 6. 使用迭代器来遍历集合类
Iterator<String> iterator = set.iterator();
while (iterator.hasNext()) {
System.out.println(iterator.next());
}
}
}