Comparable接口
- Collections的sort方法排序集合时,要求集合中的元素必须实现Comparable接口,该接口有一个抽象方法(int compareTo(Object o))用来定义比较大小的规则,所以只有实现该接口才能比较大小
- 该方法是用来将自身this与参数对象比较大小,返回值不关注具体取值,只关注范围
若返回值>0,当前对象比参数对象大
若返回值<0,当前对象比参数对象小
若返回值=0,两个对象相等 - 当我们使用一个功能时,该功能要求我们的代码为其提供改变,那么该功能就对我们的代码产生了侵入,修改的程序越多,侵入性越强,侵入性强的功能不利于程序扩展
- Collections的sort方法还有另一个问题,即元素若已经定义了比较大小的规则,而该规则不满足排序需求时则无法排序
注:字符串的排序是按照字符的unicode编码 - 比较器—作为一种额外的比较规则使用,可以为某个类的实例间比较大小定义规则
- 使用重载的sort方法,需要提供一个额外的比较器,这样做解决了上面sort方法的两个问题
1)由于提供了额外的比较器,所以该sort方法不再要求集合元素必须实现Comparable接口,所以不会对元素产生侵入
2)由于提供了额外的比较器,所以比较元素时不再使用元素自身的比较规则,所以可以按照需求进行排序了
队列
- java.util.Queue
队列—可以存放一组元素,但是存取元素必须遵循先进先出原则
常用实现类:java.util.LinkedList - boolean offer(E e)向队尾追加元素
- E poll()获取队首元素,当获取后该元素即从队列中删除了,所以该方法是出队操作
- E peek()引用队首元素,与poll方法不同,虽然可以获取队首元素,但不做出队操作
栈
- 栈—存储一组元素,但是存取元素必须遵循先进后出原则
java没有为栈专门提供接口,而是使用双端队列来实现
双端队列(deque,queue的子接口):两端都可以进出元素的队列
栈:当需要实现诸如”后退”相关功能时,可以使用栈 - void push(E e):将给定元素”压入”栈中。存入的元素会在栈首。即:栈的第一个元素
- E pop():将栈首元素删除并返回
Map接口
- java.util.Map Map-查找表
以key-value对(键值对)的形式存储元素
常用实现类:HashMap - V put(K k,V v);将给定的key-value对存入Map中
Map要求key不允许重复(依靠key元素equals比较的结果判定是否重复), 若给定的key在Map中已经存在,则是替换value操作,被替换的value会被返回 - V get(K k);获取当前Map中指定key所对应的value,若给定的key在Map中不存在,则返回值为null\
- boolean containsKey(K k);判断当前Map是否包含给定的key
boolean containsValue(V v);判断当前Map是否包含给定的value - 遍历Map有三种方式:
1)遍历所有的key
Set keySet();将当前Map中的所有key存入一个Set集合后返回
2)遍历所有的键值对
Set entrySet();
Entry是Map的内部类,其每一个实例用于表示Map中的一组键值对
该方法会将所有的键值对以若干Entry实例的形式存入一个Set集合后返回
3)遍历所有的value(较少用) - V remove(K k);删除指定的key所对应的键值对, 返回值为对应的value
- 当一个类作为HashMap的key使用时,其重写的equals方法与hashCode方法要遵循一定的原则
原则:
1)当我们重写equals时,就应当连同重写hashCode
2)hashCode方法返回的值应当是一个稳定的值
即:当参与equals比较的属性的值没有发生改变的前提下, 多次调用hashCode方法返回的数字应当不变
3)hashCode方法应当与equals方法的返回值具有一致性
即:当两个对象equals比较结果为true,那么他们的hashCode也相同, 返过来虽然不是必须的,但尽量保证当两个对象hashCode值相同时,equals比较也为true,否则会在HashMap中出现链表,影响查询效率
java.io.File
- 该类用于表示文件系统中的一个文件或目录
- 使用File可以:访问文件或目录的属性信息,访问目录的子项(目录里的东西),但是不能访问文件内容(查看文件数据)
- 路径应当使用相对路径,避免底层系统差异