为了账号安全,请及时绑定邮箱和手机立即绑定

【九月打卡】第4天 Java常见集合与应用(Set)

标签:
活动

课程名称:Java体系课

章节名称:Java常见集合与应用(Set)

课程内容:

  • 三种集合的遍历方式
  • Set集合
  • Set集合如何确保数据的唯一性
  • HashSet
  • LinkedHashSet
  • TreeSet

学习收获:

  • 三种集合的遍历方式
  1. 利用增强型for循环遍历
  2. 利用lambda表达式和forEach方法
  3. 利用Iterator迭代器遍历
List<String> bookList = new ArrayList<String>();
        bookList.add("三国演义");
        bookList.add("水浒传");
        bookList.add("西游记");
        bookList.add("红楼梦");
        //方式1:通过标准for循环对每一个List元素赋值给book进行循环处理
        for(String book : bookList){
            System.out.println(book);
        }
        //方式2:利用forEach方法+Lambda表达式简化循环过程
        bookList.forEach(book->{
            System.out.println(book);
        });
        //方式3:利用Iterator迭代器对象循环输出
        Iterator<String> itr = bookList.iterator();
        while (itr.hasNext()){
            String book = itr.next();//提取出下一个元素,同时将指针向后移动
            System.out.println(book);
        }
  • Set集合
    Set集合代表一个元素无序、不可重复的集合
    Set集合与List集合使用方法基本相同,只是处理行为略为不同
  • Set集合如何确保数据的唯一性
    1、Set集合在新增数据时先判断数据的hashCode()是否已存在,若hashCode()在Set集合存在再调用equals()进行值比较;hashCode()与equals()都存在的情况下,Set集合才认为数据已存在,不予新增
    2、出于执行效率考虑。hashCode()返回的整数结果决定了Set集合中的存放位置,hashCode()计算速度很快,但可能出现哈希碰撞;equals()则对值进行比较,处理速度相对较慢。
    3、可以重写hashCode和equals方法来定义重复标准。hashCode运算中使用的成员属性要与equals逻辑对比中使用的成员属性保持一致,以防误判。如:都是用手机sn码为标准
  • HashSet
  1. 无序、不能重复add添加,其余方法与List类似,都是Collection接口定义的方法,但无法使用get(),因为get属于List接口
  2. HashSet是Set接口的典型实现,大多数时候使用Set集合时就是使用这个实现类
  3. HashSet按Hash算法来决定集合元素的顺序,具有很好查找性能。
  4. 当向HashSet集合中存入一个元素时,根据该对象的hashCode值决定该对象在HashSet中的位置
  5. Hash一般翻译作散列、杂凑,或音译为哈希,是把任意长度的数据通过散列算法变换成固定的输出,该输出就是散列值
  • LinkedHashSet
    HashSet的子类,除HashSet的特性外,它同时使用链表维护元素的次序,可以保障按插入顺序提取数据
    需要维护元素的插入顺序,因此性能略低于HashSet的性能
    迭代访问LinkedHashSet里的全部元素时将有很好的性能,因为它以链表来维护内部的顺序
  • TreeSet
    TreeSet是SortedSet接口的实现类,TreeSet可以确保集合元素处于排序状态
    TreeSet采用红黑树的数据结构来存储集合元素
    TreeSet默认采用自然排序对元素升序排列,也可以实现Comparable接口自定义排序方式
    1、在TreeSet的有参构造方法是构造一个新的TreeSet,根据指定的比较器排序。所有插入到集合中的元素必须通过指定的比较器(Comparator)相互比较;
    2、在TreeSet的构造方法中,如果传入的参数有Comparable 接口的实现类作为参数会调用Comparable 接口中重写的compare() 方法去排序。
    3、如果传入的参数没有Comparable 接口的实现类作为参数,则会自然排序。
    4、数值排序:
    升序排列return o1-o2
    降序排列return o2-o1
    字符串排序:
    升序return o1.compareTo(o2);
    降序return o2.compareTo(o1);

课程截图

图片描述
图片描述

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
JAVA开发工程师
手记
粉丝
0
获赞与收藏
0

关注作者,订阅最新文章

阅读免费教程

  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消