day -15-集合学习笔记

day 15笔记

一.HashSet
1.此类实现set接口
2.数据结构:是以hash表结构来进行存储的
3.特点:
	A.无序 无索引
	B.不能重复
	C.此类不是同步实现的1,在多线程是不安全的

在这里插入图片描述

二.set集合存储元素唯一的原因

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-szm30nWl-1642768630274)(C:/Users/%E6%82%B2%E9%99%8C/AppData/Roaming/Typora/typora-user-images/image-20220121194926941.png)]

三.LinkedHashSet
1.是HashSet的子类
2.具有可预知迭代顺序 Set 接口的哈希表和双链接列表实现
3.特点:
	A.有序
	B.不可以重复
	C.此实现类不是同步的,在多线程也是不安全的
	
四.案例

需求:从键盘输入一串字符串,有序,去重,

代码:

package com.qf.lt.oop03;

import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;

public class Test03 {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        System.out.println("输入一串字符串:");
        String str = input.next();
        //实例化Map列表
        Map map = new HashMap();
        //转换为字符数组
        char[] cha = str.toCharArray();
        for (int i=0;i< cha.length;i++){
            //判断map列表里面是否有了此数据,没有就加进去
            if (!map.containsKey(cha[i])){
                map.put(cha[i],1);
            }else {
                //
                map.put(cha[i], (Integer)(map.get(cha[i]))+1);
            }
        }
        System.out.println(map);
    }
}

五.TreeSet
1.特点:使用元素的自然顺序对元素进行排序  Comparator 进行排序  底层是红黑树
2.排序解释:
	A.对数值(基本数据类型  整数  小数)来进行  升序进行排序
	B.字符串进行排序是按照 字符串首字母字符的编号来进行排序
	C.自定的实体类TreeSet是不能进行排序
3.自定义必须指定的排序的规则
	A.定义的类  实现Comparable   重写方法compareTo()
	B.定义的规则:
		this - object >0  表示当前对象  大于比较对象
		this - object <0  表示当前对象  小于比较对象
		this - object=0  表示当前对象  等于比较对象

student类:

package com.qf.lt.oop02;

public class Student /*implements Comparable*/{
    private String name;
    private int age;

    public Student() {
    }

    public Student(String name, int age) {
        this.name = name;
        this.age = 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 "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }

    /*@Override
    public int compareTo(Object o) {

        Student stu = (Student) o;
        return this.age- stu.getAge();
    }*/
}

测试类:

package com.qf.lt.oop02;

import java.util.Comparator;
import java.util.Set;
import java.util.TreeSet;

public class Test {
    public static void main(String[] args) {

        //使用内部类
        Set set = new TreeSet(new Comparator() {
            @Override
            public int compare(Object o1, Object o2) {
                Student stu1 =  (Student)o1;
                Student stu2 =  (Student)o2;
                return stu1.getAge()-stu2.getAge();
            }
        });
        Student stu01 = new Student("张三",15);
        Student stu02 = new Student("李四",26);
        Student stu03 = new Student("王五",20);
        set.add(stu01);
        set.add(stu02);
        set.add(stu03);


       /* //重写student里面实现接口Comparable接口,重写接口里面的Comparator方法
        Set set = new TreeSet();
        Student stu01 = new Student("张三",15);
        Student stu02 = new Student("李四",26);
        Student stu03 = new Student("王五",20);
        set.add(stu01);
        set.add(stu02);
        set.add(stu03);*/

        System.out.println(set);

    }
}

六.Map的概念
1.在生活中,会将一些事物进行对应  ip==>主机  丈夫==>妻子  .....都是一一对应的关系
2.map集合就是一个个一一对应的关系,键值对进行映射  通过键来映射值   key==>value
.键映射值得对象。一个映射不能包含重复的键;每一个键最多只能映射一个值
4.子类: HashMap   TreeMap  Hashtable

在这里插入图片描述

七.HashMap常用的方法
方法的名称方法的描述
void clear()删除map集合中所有的元素
boolean containsKey(Object key)集合中是否包含指定的key
boolean containsValue(Object value)集合中是否包含指定的值
Set<Map.Entry<K,V>> entrySet()用于来遍历map集合
V get(Object key)通过键获取值
boolean isEmpty()判断集合是否为空
Set keySet()获取map集合中所有的key
Collection values()获取Map集合中所有的值
V put(K key, V value)如果key不存在则执行添加,如果key存在则修改value
V remove(Object key)根据key删除整个键值对
int size()获取集合的长度
package com.qf.lt.oop03;

import java.util.Collection;
import java.util.HashMap;
import java.util.Map;

public class Test {
    public static void main(String[] args) {

        Map map =new HashMap();
        //添加数据
        map.put("邓超","杨幂");
        map.put("谢霆锋","王菲");
        map.put("张三","李四");


        //指定元素的key
        map.containsKey("张三");
        //获取指定元素的键值对
        System.out.println(map.get("邓超"));
        //获取map集合里面的所有key或者value
        System.out.println(map.keySet());
        Collection col = map.values();
        System.out.println(col);


        System.out.println(map);


    }
}

八.Map的第一中遍历方法

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Ue9gecKF-1642768630275)(C:/Users/%E6%82%B2%E9%99%8C/AppData/Roaming/Typora/typora-user-images/image-20220121203130996.png)]

代码:

package com.qf.lt.oop03;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;

public class Test01 {
    public static void main(String[] args) {
        Map map =new HashMap();
        //添加数据
        map.put("邓超","杨幂");
        map.put("谢霆锋","王菲");
        map.put("张三","李四");

        //拿到key值,进行遍历
        Set set = map.keySet();
        //使用增强for循环
       /* for (Object obj :set){
            System.out.println(obj+"\t"+map.get(obj));
        }*/
        //使用迭代器
        Iterator iter = set.iterator();
        while (iter.hasNext()){
            //转
            Object o = iter.next();
            System.out.println(o+"\t"+map.get(o));
        }

    }
}

九.Map的第二种遍历方法

通过封装对象存储在集合中

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Ldfmbd6y-1642768630276)(C:/Users/%E6%82%B2%E9%99%8C/AppData/Roaming/Typora/typora-user-images/image-20220121203352918.png)]

代码:

package com.qf.lt.oop03;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;

public class Test02 {
    public static void main(String[] args) {
        Map map =new HashMap();
        //添加数据
        map.put("邓超","杨幂");
        map.put("谢霆锋","王菲");
        map.put("张三","李四");
        //进行封装成对象
        Set set = map.entrySet();
       /* //增强for循环
        for(Object obj:set){
            Map.Entry entry = (Map.Entry) obj;
            System.out.println(entry.getKey()+"\t"+entry.getValue());
        }*/

        //迭代器
        Iterator iterator = set.iterator();
        while (iterator.hasNext()){
            Object obj = iterator.next();
            Map.Entry entry = (Map.Entry) obj;
            System.out.println(entry.getKey()+"\t"+entry.getValue());
        }

    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一个胖小白

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值