Java笔记(十二)

目录

自然排序Comparable的使用

比较器排序Comparator的使用

增强for循环

增强for的格式

  哈希值

常见数据结构——栈

常见数据结构——队列​

常见数据结构——数组

常见数据结构——链表

链表是一个增删快,查询慢的模型(对比数组)链表存储数据的方式​

链表的大致结构

 链表增删数据的步骤

常见数据结构——哈希表


自然排序Comparable的使用

String Integer类都实现了Comparable接口

Comparable接口对实现它的每个类的对象增强一个整体排序,这个排序被称为类的自然排序,类的campareTo方法被称为其自然比较方法

存储学生对象并遍历,创建集合使用无参构造方法

要求:按照年龄从小到大进行排序,年龄相同时,按照姓名的字母进行排序

注:

  • 用TreeSet集合存储自定义对象,无参构造方法使用的是自然排序对元素进行排序的
  • 自然排序,就是让元素所属的类实现Compareble接口,重写CompareTo(To)方法
  • 重写方法时,一定要注意排序规则必须按照要求的主要条件和次要条件写

 红色圈出来的两步是必须要操作的,要不然无法将数据存储在集合里面,但是现在这样却只能保存一个数据,具体原因在compareTo的return值

但此时运行时,却只能存储一个数据

 当我把compareTo的return值改成1之后,就能将所有的数据保存在集合里面了,遍历时是正序输出(遍历输出顺序与存储输入的顺序一致)

 将return值改为-1后,就会进行倒序输出(遍历输出顺序与存储输入的顺序相反)

 把compareTo的return值进行修改,实现按照年龄从小到大遍历输出

 

 把compareTo方法的返回值进行修改,实现按照年龄从大到小进行排序

 实现如果年龄相同则按照姓名的字母顺序排列

 

 对于CompareTo方法

升序时 this在前面,降序时 this在后面

这里TreeSet用的无参构造,自动从小到大排序,判断大小的标准是compareTo的返回值,如果返回值是1就放在后面,返回值是-1就放在前面。只说1是正序是不对的

比较器排序Comparator的使用

创建一个集合,对学生的进行遍历,学生类的属性有姓名,数学成绩,语文成绩。

按照总成绩从大到小的顺序进行排列,如果总成绩相同则按照语文成绩进行排列,如果语文成绩还相同,则按照姓名的字母顺序进行排列。

  • 用TreeSet集合存储自定义对象,带参构造方法使用的是比较器排序对元素进行排序的
  • 自然排序,就是让集合构造方法接受Comparator的实现类对象,重写Compare(To 1,To 2)方法
  • 重写方法时,一定要注意排序规则必须按照要求的主要条件和次要条件写

增强for循环

简化数组和Collection集合的遍历

  • 实现Iterable接口的类允许其对象成为增强for语句的目标
  • 它是JDK5之后出现的,其内部原理是一个Iterator迭代器

增强for的格式

for(元素数据类型 变量名:数组或者Collection集合){

  //在此处使用变量即可,该变量就是元素 

}

int [] arr={1,2,3,4,5}

for(int i:arr){

System.out.println(i);

}

 

哈希值

哈希值是JDK根据对象的地址或者字符串或者数字算出来的int类型的数值

Object类中有一个方法可以获取对象的哈希值

  • public int hashCode():返回对象的哈希值码

对象的哈希值特点

  • 同一个对象多次调用hashCode()方法返回的哈希值是相同的
  • 默认情况下,不同对象的哈希值是不同的。而重写hashCode()方法,可以实现让不同对象的哈希值相同

重写hashCode()方法

 重写后的运行结果(注释后面写的是未重写hashCode()方法的运行结果)

 

常见数据结构——栈

 

 常见数据结构——队列

 常见数据结构——数组

数组是一种查询快,增删慢的模型

查询数据通过索引定位,查询任意数据耗时相同,查询效率高

删除数据时,要将原始数据删除,同时后面每个数据前移,删除效率低

添加数据时,添加位置后的每个数据后移,再添加元素,添加效率极低

常见数据结构——链表

链表是一个增删快,查询慢的模型(对比数组)


链表存储数据的方式

链表的大致结构

 链表增删数据的步骤

常见数据结构——哈希表

哈希表底层使用的是数组与单向链

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

笃岩_

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

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

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

打赏作者

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

抵扣说明:

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

余额充值