【CS61B】Lec10-Iterators, Object Methods

  • ~2.00K 字
  1. 1. Lec10 - Iterators, Object Methods
    1. 1.1. Iterators
    2. 1.2. Object Method
      1. 1.2.1. toString()
      2. 1.2.2. this
      3. 1.2.3. equals()

Lec10 - Iterators, Object Methods

Iterators

使用迭代器可以让自己的数据类型可以被迭代(支持for-each loop)

  • 需要让对应类实现Iterable接口
  • 具有Iterator方法来返回迭代器对象(实现一个嵌套类)
  • 迭代器需要具有hasNext()和next()方法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
package Lec10;

import java.util.Iterator;

public class ArraySet<T> implements Iterable<T> {
private T[] items;
private int size;

public ArraySet(){
items = (T[]) new Object[100];
size = 0;
}
private class ArraySetIterator implements Iterator<T>{

private int pos;
ArraySetIterator(){
pos = 0;
}
@Override
public boolean hasNext() {
if (pos<size){
return true;
}
return false;
}

@Override
public T next() {
T itemToReturn = items[pos];
pos++;
return itemToReturn;
}
}
public Iterator<T> iterator(){
return new ArraySetIterator();

}

}

(注:仅有迭代器部分,没有其他具体实现)

Object Method

Java中所有类都是Object的子类

toString()

给予一个object的字符串表示

println方法也调用了toString()方法

该方法类似于python中的repr方法,可以给类一个自定义的字符串输出形式

1
2
3
4
5
6
7
8
9
10
@Override
public String toString(){
StringBuilder stringToReturn = new StringBuilder("{");
for(T x: this){
stringToReturn.append(x);
stringToReturn.append(", ");
}
stringToReturn.append("}");
return stringToReturn.toString();
}

this

this是当前对象的一个引用,可以使用this来访问自己的实例变量和方法

但java中this是不必须的

若方法中的局部变量和实例变量重名,此时必须要用this加以区分

equals()

equals()方法通过判断两个对象的地址来判断是否相同

当然,可以通过重写方法来改变其他判断相同的方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
@Override
public boolean equals(Object o){
if (o instanceof ArraySet uSet){
if (this.size != uSet.size()){
return false;
}
for (T x: this){
if (!uSet.contains(x)){
return false;
}
}
return true;
}
return false;
}

其中,关键字A instanceof B的用处如下

  • 检查o是否指向类B,若不是返回false
  • 若是,返回true并将A作为B类并命名为B后面的名字
  • o是null也可以运行
赞助喵
非常感谢您的喜欢!
赞助喵