Map介绍迭代Set去重代码案例

Map
1.Map可以根据键来提取对应的值
2.Map的键不允许重复,如果重复,对应的值会被覆盖
3.Map存放的都是无序的数据
4.Map的初始容量是16,默认的加载因子的0.75
在这里插入图片描述
Map集合的迭代

public class TestMap {
    public static void main(String[] args) {
        //1.创建Map对象
        /*Map中的数据要符合映射规则,一定注意要同时指定K和V的数据类型
        * 至于K和V具体要指定成什么数据类型,取决于具体的业务要求*/
        Map<Integer,String> map=new HashMap<>();
        //2.向map集合中添加元素,注意方法是put(),并且需要同时存入一对值
        map.put(9527,"白骨精");
        map.put(9528,"黑熊精");
        map.put(9529,"鲤鱼精");
        map.put(9530,"孔雀精");
        map.put(9527,"汤森");
        System.out.println(map);
        /*1.map中的value可以重复,比如我们可以存入两个”孔雀精“
        * 2.map中的key不允许重复,如果重复,后面的value会把前面的value覆盖掉*/

        //3.测试常用方法
        // map.clear();//清空集合
        System.out.println(map);

        System.out.println(map.isEmpty());//判断集合是否为空
        System.out.println(map.size());//获取的是map中键值对的个数
        System.out.println(map.containsKey(9527));//true,判断map中是否包含指定的键
        System.out.println(map.containsValue("白骨精"));//false,判断map中是否包含指定的值
        System.out.println(map.get(9527));//根据key值获取对应的value
        System.out.println(map.remove(9529));//根据Key值删除这个键值对
        System.out.println(map.containsKey(9529));
        System.out.println(map.containsValue("鲤鱼精"));

        Collection<String> values = map.values();//将map中的所有值取出存入collection集合中
        System.out.println(values);

        //4.map集合迭代的方式一
        /*方式一:
        * 想遍历map中的数据,但是map本身没有迭代器,所以我们需要把map先转成set集合
        * Set<Ket>:把map中所有的key值存入set集合中--keySet()*/
        //将map中所有的key值取出,存入set集合中ketSet();
        Set<Integer> s = map.keySet();
        //获取set集合的迭代器
        Iterator<Integer> it = s.iterator();
        //判断集合是否有下一个集合可以迭代
        while (it.hasNext()){
            //获取本轮循环到的Key,并通过key值获取value的值
            Integer key = it.next();
            String value = map.get(key);
            System.out.println("{"+key+"**"+value+"}");
        }
        //map集合的迭代方式二
        /*想要遍历map集合,需要先转成set集合
        * 是把map中的每一对键值对看成是Entry
        * map中有几对键值对,set中就有几个Entry*/
        Set<Map.Entry<Integer, String>> set2 = map.entrySet();
        //获取set集合迭代器
        Iterator<Map.Entry<Integer, String>> it2 = set2.iterator();
        //判断集合是否有下一个元素可以迭代
        while (it2.hasNext()){
            Map.Entry<Integer, String> entry = it2.next();
            System.out.println(entry);
        }

    }

Set
概述
1.Set是一个不包含重复元素的collection
2.Set集合中的数据是无序的(因为set集合没有下标)
3.Set集合中的元素不可以重复-常用来给数据去重
Set测试

/*本类用于测试Set*/
public class TestSet {
    public static void main(String[] args) {
        //1.创建对应的集合对象
        Set<String> set=new HashSet<>();
        //2.向set集合中存入数据
        set.add("紫霞仙子");
        set.add("至尊宝");
        set.add("蜘蛛精");
        set.add("紫霞仙子");
        set.add(null);
        /*1.set集合中的元素都是没有顺序的
        * 2.set集合中的元素不能重复
        * 3.set集合允许存null值,但是最多存一个*/
        System.out.println(set);

        //测试常用方法
        System.out.println(set.contains("唐僧"));//false
        System.out.println(set.isEmpty());//false
        System.out.println(set.remove(null));
        System.out.println(set);
        System.out.println(set.size());//获取集合中元素的总数
        System.out.println(Arrays.toString(set.toArray()));//将集合转为数组

        //集合间的操作
        Set<String>set2=new HashSet<>();
        set2.add("兔子");
        set2.add("老虎");
        set2.add("海豚");
        set2.add("狮子");
        System.out.println(set2);
        set.addAll(set2);//将set2的元素添加到set
        System.out.println(set);
        System.out.println(set.containsAll(set2));//判断set是否包含set2的集合
        set.retainAll(set2);
        System.out.println(set);
        set.removeAll(set2);
        System.out.println(set);

        //使用iterator迭代set2集合
        Iterator<String> it = set2.iterator();
        while (it.hasNext()){
            System.out.println(it.next());
        }
    }
}

关于Set去重测试
首先创建自定义类

/*本类用作set集合自定义类型是否可以去重的物料类*/
//1.创建自定义的引用类型
public class Student {
    //2.属性
    String name;
    int age;
    //3.提供本类的全参构造
    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Student student = (Student) o;
        return age == student.age && Objects.equals(name, student.name);
    }

    @Override
    public int hashCode() {
        return Objects.hash(name, age);
    }
}

如果set集合中存放的是我们自定义的类型,那么需要给自定义类型中添加重写的equals()与hashCode() ,set集合才会实现按照类型+属性+属性值来去重, 否则会认为s2 s3对象是两个不同的对象,因为地址值不同,所以不会去重

public class TestSet2 {
    public static void main(String[] args) {
        //4.创建集合对象Set
        Set<Student> set=new HashSet<>();
        //5.创建自定义类Student对象
        Student s1=new Student("张三",3);
        Student s2=new Student("李四",4);
        Student s3=new Student("李四",4);
        //6.将创建好的对象,存入Set集合
        set.add(s1);
        set.add(s2);
        set.add(s3);
        System.out.println(set);
        /*如果set集合中存放的是我们自定义的类型,那么需要给自定义类型中添加重写的equals()与hashCode()
        * set集合才会实现按照类型+属性+属性值来去重
        * 否则会认为s2 s3对象是两个不同的对象,因为地址值不同,所以不会去重*/
    }
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值