Java_SE05-Comparable,Map接口,队列,栈

Comparable接口

  1. Collections的sort方法排序集合时,要求集合中的元素必须实现Comparable接口,该接口有一个抽象方法(int compareTo(Object o))用来定义比较大小的规则,所以只有实现该接口才能比较大小
  2. 该方法是用来将自身this与参数对象比较大小,返回值不关注具体取值,只关注范围
    若返回值>0,当前对象比参数对象大
    若返回值<0,当前对象比参数对象小
    若返回值=0,两个对象相等
  3. 当我们使用一个功能时,该功能要求我们的代码为其提供改变,那么该功能就对我们的代码产生了侵入,修改的程序越多,侵入性越强,侵入性强的功能不利于程序扩展
  4. Collections的sort方法还有另一个问题,即元素若已经定义了比较大小的规则,而该规则不满足排序需求时则无法排序
    注:字符串的排序是按照字符的unicode编码
  5. 比较器—作为一种额外的比较规则使用,可以为某个类的实例间比较大小定义规则
  6. 使用重载的sort方法,需要提供一个额外的比较器,这样做解决了上面sort方法的两个问题
    1)由于提供了额外的比较器,所以该sort方法不再要求集合元素必须实现Comparable接口,所以不会对元素产生侵入
    2)由于提供了额外的比较器,所以比较元素时不再使用元素自身的比较规则,所以可以按照需求进行排序了

队列

  1. java.util.Queue
    队列—可以存放一组元素,但是存取元素必须遵循先进先出原则
    常用实现类:java.util.LinkedList
  2. boolean offer(E e)向队尾追加元素
  3. E poll()获取队首元素,当获取后该元素即从队列中删除了,所以该方法是出队操作
  4. E peek()引用队首元素,与poll方法不同,虽然可以获取队首元素,但不做出队操作

  1. 栈—存储一组元素,但是存取元素必须遵循先进后出原则
    java没有为栈专门提供接口,而是使用双端队列来实现
    双端队列(deque,queue的子接口):两端都可以进出元素的队列
    栈:当需要实现诸如”后退”相关功能时,可以使用栈
  2. void push(E e):将给定元素”压入”栈中。存入的元素会在栈首。即:栈的第一个元素
  3. E pop():将栈首元素删除并返回

Map接口

  1. java.util.Map Map-查找表
    以key-value对(键值对)的形式存储元素
    常用实现类:HashMap
  2. V put(K k,V v);将给定的key-value对存入Map中
    Map要求key不允许重复(依靠key元素equals比较的结果判定是否重复), 若给定的key在Map中已经存在,则是替换value操作,被替换的value会被返回
  3. V get(K k);获取当前Map中指定key所对应的value,若给定的key在Map中不存在,则返回值为null\
  4. boolean containsKey(K k);判断当前Map是否包含给定的key
    boolean containsValue(V v);判断当前Map是否包含给定的value
  5. 遍历Map有三种方式:
    1)遍历所有的key
    Set keySet();将当前Map中的所有key存入一个Set集合后返回
    2)遍历所有的键值对
    Set entrySet();
    Entry是Map的内部类,其每一个实例用于表示Map中的一组键值对
    该方法会将所有的键值对以若干Entry实例的形式存入一个Set集合后返回
    3)遍历所有的value(较少用)
  6. V remove(K k);删除指定的key所对应的键值对, 返回值为对应的value
  7. 当一个类作为HashMap的key使用时,其重写的equals方法与hashCode方法要遵循一定的原则
    原则:
    1)当我们重写equals时,就应当连同重写hashCode
    2)hashCode方法返回的值应当是一个稳定的值
    即:当参与equals比较的属性的值没有发生改变的前提下, 多次调用hashCode方法返回的数字应当不变
    3)hashCode方法应当与equals方法的返回值具有一致性
    即:当两个对象equals比较结果为true,那么他们的hashCode也相同, 返过来虽然不是必须的,但尽量保证当两个对象hashCode值相同时,equals比较也为true,否则会在HashMap中出现链表,影响查询效率

java.io.File

  1. 该类用于表示文件系统中的一个文件或目录
  2. 使用File可以:访问文件或目录的属性信息,访问目录的子项(目录里的东西),但是不能访问文件内容(查看文件数据)
  3. 路径应当使用相对路径,避免底层系统差异
Java中的Comparable接口定义了一个compareTo方法,用于比较类的对象之间的大小关系。实现Comparable接口的类可以使用Arrays.sort()和Collections.sort()进行排序。 实现Comparable接口的类需要重写compareTo方法,该方法返回一个整数值,表示当前对象与另一个对象的大小关系。如果当前对象小于另一个对象,则返回负整数;如果当前对象等于另一个对象,则返回0;如果当前对象大于另一个对象,则返回正整数。 以下是一个示例实现Comparable接口的类: ``` public class Person implements Comparable<Person> { private String name; private int age; public Person(String name, int age) { this.name = name; this.age = age; } public String getName() { return name; } public int getAge() { return age; } @Override public int compareTo(Person o) { return this.age - o.getAge(); } } ``` 在上面的示例中,Person类实现了Comparable接口,并重写了compareTo方法。该方法比较两个Person对象的年龄大小关系。 如果要对Person对象进行排序,可以使用Arrays.sort()或Collections.sort()方法。例如: ``` Person[] persons = new Person[] { new Person("Tom", 25), new Person("Jack", 18), new Person("Mary", 30) }; Arrays.sort(persons); for (Person person : persons) { System.out.println(person.getName() + " " + person.getAge()); } ``` 该示例中,使用Arrays.sort()对Person对象数组进行排序,按照年龄从小到大排序。最后输出排序后的结果。 需要注意的是,实现Comparable接口的类必须能够比较大小,否则可能会抛出ClassCastException异常。因此,在重写compareTo方法时,应该考虑到类的属性是否可以比较大小。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值