Stoker的Java入门教学HashSet、TreeSet以及 Map

Java入门之HashSet、TreeSet以及 Map

一.HashSet

无序集合,存储和取出的顺序不同,没有索引,不存储重复元素。
HashSet 一般用于去重。

利用HashSet 集合去除ArrayList集合中的重复元素

        ArrayList<String> list = new ArrayList<>();
        list.add("a");
        list.add("a");
        list.add("b");
        list.add("b");
        list.add("c");
        list.add("c");
        list.add("d");
        list.add("d");
        HashSet<String> set = new HashSet<>();
        set.addAll(list);
        //清空原list
        list.clear();
        //把set中去重好的元素 装到list中
        list.addAll(set);
        System.out.println(list);

LinkedHashSet去重

        LinkedHashSet<String> set = new LinkedHashSet<>();

        set.add("c");
        set.add("m");
        set.add("a");
        set.add("b");
        set.add("c");
        set.add("d");
        Iterator<String> iterator = set.iterator();
        while (iterator.hasNext()) {
            String next = iterator.next();
            System.out.println(next);
        }

HashSet的其他使用方法和注意事项在上篇文章中有详细介绍,在此就不多做赘述了。

二.TreeSet

TreeSet 无序 无下标 不重复
功能:排序
下面用两个简单的例子来看一下TreeSet的排序功能:
1.用comparator 比较器接口的排序方法

用TreeSet 保存四个字符串
按字符串长度排序 comparator 比较器接口
编写比较规则
将比较的规则直接传入到TreeSet的构造方法中

class CompareChar implements Comparator<Character>{

    @Override
    public int compare(Character o1, Character o2) {
        int num = o1.compareTo(o2);
        return num == 0 ? 1 : num;
    }

}

        TreeSet<String> set = new TreeSet<>(new CompareLength());
        set.add("wanglong");
        set.add("zhuxiaojie");
        set.add("liuliu");
        set.add("sheng");
        System.out.println(set);

2.需要在自己创建类中重写排序规则的排序方式

     * 键盘录入5个学生信息(姓名,语文成绩,数学成绩,英语成绩)
     * 录入的学生信息格式(姓名,语文成绩,数学成绩,英语成绩)
     * 按照总分从高到低输出到控制台。输出学生所有信息
        System.out.println("请输入学生信息" + "录入的学生信息格式(姓名,语文成绩,数学成绩,英语成绩)");
        Scanner scanner = new Scanner(System.in);
        TreeSet<Student> set = new TreeSet<>();
        //循环输入五次
        while (set.size() < 5) {
            //接受用户输入 生生,120,120,120
            String string = scanner.nextLine();
            //切割字符串
            String[] strings = string.split(",");
            //取出数组的元素 并且把字符串转成整数
            int chinese = Integer.parseInt(strings[1]);
            int math = Integer.parseInt(strings[2]);
            int english = Integer.parseInt(strings[3]);
            //创建学生对象
            Student student = new Student(strings[0], chinese, math, english);
            set.add(student);
        }
        System.out.println(set);    


            //在Student类中重写排序规则
            //重写排序规则 按总分排 并且不能去重
    @Override
    public int compareTo(Student o) {
        int num = this.sum - o.sum;
        return num == 0 ? 1 : num;
    }
三.Map
  • 双列集合
  • Map(双列集合的父接口)
  • 1.以键值对形式来存储数据 key—value
  • 2.键值唯一(键值不能重复)

  • 依赖关系:HashSet 依赖于 HashMap

  • 实际上向HashSet中添加元素,
  • 相当于向 Map的 key列添加元素。

  • HashMap:去重的功能 (该功能属于key列)

  • TreeMap:排序的功能 (该功能属于key列)

Map中常用的几种方法
添加键值对元素(put)
put方法的返回值 是被覆盖的value的值

        HashMap<String, Integer> map = new HashMap<>();
        //添加 键值对元素
        //put方法的返回值 是被覆盖的value的值
        Integer v1 = map.put("wanghong", 15);
        Integer v2 = map.put("dondong", 20);
        Integer v3 = map.put("shengsheng", 18);
        Integer v4 = map.put("liuliu", 30);
        Integer v5 = map.put("wanghong", 24);
        System.out.println(map);
        System.out.println(v1);
        System.out.println(v2);
        System.out.println(v3);
        System.out.println(v4);
        System.out.println(v5);

常用方法:
包含 key
包含 value
获取所有key的Set集合
获取所有value集合
通过key删除整个键值对
清空map


        HashMap<String, Integer> map = new HashMap<>();
        map.put("wanghong", 10);
        map.put("hong", 8);
        map.put("wang", 16);
        map.put("wan", 18);
        //判断map中是否包含key
        boolean b1 = map.containsKey("hong");
        System.out.println(b1);
        //判断map中是否包含value
        boolean b2 = map.containsValue(10);
        System.out.println(b2);
        //获取所有key的Set集合(核心方法)
        Set<String> keySet = map.keySet();
        System.out.println(keySet);
        //获取所有value集合
        Collection<Integer> values = map.values();
        System.out.println(values);
        //通过key删除整个键值对
        Integer remove = map.remove("wanghong123");
        System.out.println(remove);
        //清空map
        map.clear();
        System.out.println(map);

两种方法遍历Map
1.迭代器遍历

        HashMap<Person, String> map = new HashMap<>();
        map.put(new Person("王宏", 24),"江苏");
        map.put(new Person("东东", 26),"河南");
        map.put(new Person("生生", 20),"安徽");
        //取出所有key的Set集合
        Set<Person> keySet = map.keySet();
        //取出迭代器
        Iterator<Person> iterator = keySet.iterator();
        //遍历所有key
        while (iterator.hasNext()) {
            //取出集合中的key值
            Person key = (Person) iterator.next();
            //利用key取出对应的value
            String value = map.get(key);
            System.out.println("key=" + key + "  " + "value = " + value);
        }

2.利用Entry对象来遍历

        //利用Entry对象来遍历map
        //Entry对象封装了一个键值对对象
        //一个key 一个对应的value
        HashMap<String, Integer> map = new HashMap<>();
        map.put("王宏1", 13);
        map.put("王宏2", 11);
        map.put("王宏3", 12);
        //获取所有Entry对象的Set集合
        Set<Entry<String, Integer>> entrySet = map.entrySet();
        Iterator<Entry<String, Integer>> iterator = entrySet.iterator();
        while (iterator.hasNext()) {
            //取出集合中的每个entry对象
            Entry<String, Integer> entry = (Entry<String, Integer>) iterator.next();
            //从entry中取出 key-value
            System.out.println(entry.getKey() + "  " + entry.getValue());
        }
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值