2021-07-19-Set集合


layout: post
#标题配置
title: Java中的Set集合
#时间配置
date: 2021-07-19 22:49:00 +0800
#目录配置
categories: 数据结构
#标签配置
tag: 学习笔记

  • content
    {:toc}

Set集合概述和特点

一.Set集合特点

  1. 可以去除重复(*)

  2. 存取顺序不一致

  3. 没有带索引的方法,所以不能使用普通for循环遍历,也不能通过索引来获取,删除Set集合里面的元素

    (可以使用迭代器以及增强for循环)

二.TreeSet集合概述和特点

1.TreeSet集合特点(使用TreeSet必须指定规则)

(1)不包含重复重复元素的集合
(2)没有带索引的方法
(3)可以将元素按照规则进行排序

2.自然排序Comparable的使用

(1)使用空参构造创建TreeSet集合
(2)自定义的Student类实现Comparable接口
(3)重写里面的compareTo方法

自然排序简单原理

(1)如果返回值为负数,表示当前存入的元素是较小值,存左边
(2)如果返回值为0,表示当前存入的元素跟集合中元素重复了,不存
(3)如果返回值为正数,表示当前存入的元素是较大值,存右边

字符串的compareTo方法
1.首先比较第一个字母,如果第一个字母是一样的,那么继续比较后面的字母
2.当不一样的时候,就拿着对应的码表值97,减去b的码表值98
比较器排序Comparator的使用
(1)TreeSet的带参构造方法使用的是比较器排序对元素进行排序的
(2)比较器排序,就是让集合构造方法接收Comparator的实现类对象,
重写compare(T o1,T o2)方法
(3)重写方法时,一定要注意排序规则必须按照要求的主要条件和次要条件来写

两种比较方式小结

**自然排序:**自定义类实现Comparable接口,重写compareTo方法,根据返回值进行排序
比较器排序:创建TreeSet对象的时候传递Comparator的实现类对象,重写compare方法,根据返回值进行排序

package 日常练习.数据结构练习.Set;

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

public class MyTreeSet5 {
    public static void main(String[] args) {
        TreeSet<String> ts = new TreeSet<>(new Comparator<String>() {
            @Override
            public int compare(String o1, String o2) {
                int result = o1.length() - o2.length();
                result = result == 0 ? o1.compareTo(o2) : result;
                return result;
            }
        });
        ts.add("c");
        ts.add("ab");
        ts.add("df");
        ts.add("qwer");

        System.out.println(ts);
    }	
}

还可以使用lambda表达式

package 日常练习.数据结构练习.Set;

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

public class MyTreeSet5 {
    public static void main(String[] args) {
        TreeSet<String> ts = new TreeSet<> (
            (String o1, String o2) -> {
                int result = o1.length() - o2.length();
                result = result == 0 ? o1.compareTo(o2) : result;
                return result;
            }
        );
        ts.add("c");
        ts.add("ab");
        ts.add("df");
        ts.add("qwer");

        System.out.println(ts);
    }
}

在使用的时候,默认使用自然排序,当自然排序不满足现在的需求时,使用比较器排序

两种方式中,关于返回值的规则:
(1)如果返回值为负数,表示当前存入的元素是较小值,存左边
(2)如果返回值为0,表示当前存入的元素跟集合中元素重复了,不存
(3)如果返回值为正数,表示当前存入的元素是较大值,存右边

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

拾光1024

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

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

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

打赏作者

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

抵扣说明:

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

余额充值