Set : 无序的 不可重复 HashSet: TreeSet: Map: HashMap TreeMap Collections: Properties :

本文深入探讨了Java中数据结构的使用,包括ArrayList、Vector、LinkedList、HashSet、TreeSet及其底层实现。重点介绍了HashMap和TreeMap,强调了它们的特性、效率和去重策略。通过重写hashcode和equals方法来确保数据正确存储。同时,文章还讨论了Map接口的遍历方式和HashMap的扩容机制。对于TreeSet,特别指出其内部排序规则和自定义比较器的实现。最后,提到了Properties类在处理键值对字符串数据时的角色以及配置文件的软编码实践。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

List :有序的,可重复的
      新增了一些根据索引操作的方法
      ArrayList
      Vector
      LinkedList

Set : 无序的  不可重复
  新增功能: static <E> Set<E> of(E... elements) 返回包含任意数量元素的不可修改集。
           其他方法从Collection继承
  遍历方式:
      foreach
      iterator

  注意:
      存放数据的顺序与内部真实存储的顺序可能不一致

HashSet  --> 是由HashMap维护的
     无序的,不可重复

     底层结构: 哈希表(数组+链表+红黑树)
     特点: 查询,增删效率较高
           无序,去重
     应用场景 : 存储数据由单个值决定的情况下,想要去重的情况下,适合使用HashSet
     新增内容 : 无新增方法

 练习: 定义一个HashSet集合,存储自定义引用数据类型数据,是否对象根据成员内容去重

 哈希表中hashcode与equals之间的关系(前提是重写hashcode与equals都是根据成员变量计算)
    equals相等hashcode一定相等
    hashcode相等,equals不一定相等

哈希表存储自定义引用数据类型数据的去重:
 需要在数据的类型中重写hashcode与equals方法,实现根据内容(成员变量的值)进行比较和计算

 

 

 

TreeSet --> 是由TreeMap维护的
 无序,去重
 底层结构 : 红黑树(平衡二叉树)
 特点 : 默认升序排序
 新增方法 : 数据的大小比较相关的方法,因为红黑树结构中数据已经比较过大小,默认升序

 思考: TreeSet集合中能够成功存储不同类型的数据?
      使用TreeSet存储自定义的引用数据类型,如何是否去重(根据内容去重),实现默认升序排序?

 

思考: TreeSet集合中能够成功存储不同类型的数据?
     使用TreeSet存储自定义的引用数据类型,如何是否去重(根据内容去重),实现默认升序排序?

ClassCastException : 类型转换异常
问题: 在存储自定义引用数据类型数据的时候,对象数据不确定比较规则,在TreeSet无法实现比较,无法排序
需要: 指定学生数据的比较规则
        内部比较规则|内部比较器|自然排序
            实现一个java.lang.Comparable接口,重写compareTo方法,在compareTo方法内部指定比较规则
            定义在类的内部,是一种默认的比较规则
        外部比较规则|外部比较器|定制排序

实现内部比较器: 定义一个TreeSet集合存储学生信息,要求根据学生姓名进行排序,实现根据姓名降序排序

学生类

 

 

Map <K,V>
  存储键值对数据
  元素的集合,键值对的集合
  K-V 键值对
  key,value可以为任意引用数据类型的数据
  key--> 唯一的,无序的 --> Set集合
  value --> 无序的,可重复的  -->Collection

  键值对为一个映射关系
  key--> 映射-->value
  一个key只能对应一个value
  一个key可以实现对应一个集合作为value,集合中可以存放多个值

 

 

Map集合的遍历方式:
    1.keySet() 获取集合中所有的key,然后遍历key,根据key获取value
    2.values() 获取集合中所有的value
    3.entrySet() 返回多个Map.Entry类型的键值对对象,一个set集合

 

HashMap
    底层: 哈希表(数组+链表+红黑树)
    特点: 查询,增删效率较高
    新增方法: 无新增方法
    遍历方式: 与map相同
    并允许null值和null键

DEFAULT_LOAD_FACTOR : 默认的加载因子     0.75
DEFAULT_INITIAL_CAPACITY : 默认初始容量  1<<4 = 16
threshold 扩容临界值 | 阀值  CAPACITY*LOAD_FACTOR

扩容: newCap = oldCap << 1 每次扩容原数组容量的2倍

练习: 定义一个HashMap结构,用来存储指定类型的数据,要求存储key为Teacher,value为Teacher所教授的学科

去重: key中存储数据的类型要求重写hashcode与equals方法

练习: 定义一个HashMap结构,用来存储指定类型的数据,要求存储key为Teacher,value为Teacher所教授的学科

 

 

TreeMap
    根据key实现去重
    底层结构: 红黑树
    特点: 根据key对数据做升序排序
    新增功能: 比较相关的一些方法

    根据key做去重,根据key做排序
    要求: key指定比较规则|方式|比较器|排序
        内部比较器
        外部比较器

   定义TreeMap存储键值对数据,key为Teacher

 

 

 

Properties :
    存储的键值对都是字符串
     Properties可以保存到流中或从流中加载。

     软编码 : 经常改动的内容不要定义在源代码中,定义在一个外部的文件中-->配置文件,从程序中每次动态从文件中进行读取内容,使用读入的最新内容

配置文件 : properties格式,符合Properties特点: 键值对  都是字符串

创建 db.properties  

 

哈希表

HashMap哈希表

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值