Map和Set的使用

搜索

搜索,查找,也可称检索,是在大量的数据元素中找到某个特定的数据元素而进行的工作。
一般把搜索的数据称为关键字(Key),和关键字对应的称为值(Value),所以模型会有两种:

  1. 纯 key 模型,即我们 Set 要解决的事情,只需要判断关键字在不在集合中即可,没有关联的 value;
  2. 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());
        }
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值