要养成凡事查文档的习惯。文档地址如下:
Java API文档点击这里
1. Object类
这是所有类的直接或间接父类。
1.1 equals方法
1.2 getClass方法
该方法和反射相关。
1.3 toString方法
1.4 finalize方法
1.5 包装类
1.6 Math类
1.7 System类
2. 字符串相关类
常用的字符串相关类有:
-
String类:创建后不可变动 -
StringBuffer类: -
StringBuilder类:非线程安全,但效率高 -
StringTokenizer类:分割字符串类
3. 日期相关类
CalenderDateSimpleDateFormatjava.time
4. Java数据结构
大部分数据结构继承自Collection接口及Maps接口。可以类比C++当中的STL。其实就是在Java中实现的一些数据结构,诸如队列、栈、哈希表、枚举等。下面逐一学习。
前面已经说过,在Java中数据结构需要调用的一个公共接口是Collection。其代码如下:
// 只列出常用方法
public interface Collection<E>{
boolean add (E element);
Iterator<E> iterator(); // 迭代
int size();
boolean isEmpty();
boolean contains(Object obj);
boolean containsAll(Collection<?> c);
boolean equals(Object other);
boolean addAll(Collection<? extends E> from T);
boolean remove(Object obj);
boolean removeAll(Collection<?> c);
boolean retainAll(Collection<?> c);
Object[] toArray();
<T> T[] toArray(T[] arrayToFill);
}
从上面的代码可以看出,在Collection接口中还调用了Iterator接口。其实现如下:
public interface Iterator<E>{
E next();
boolean hasNext();
void remome();
default void forEachRemaining(Consumer<? super E> action);
}
在集合类型中可以通过重复调用next()方法来遍历所有元素。在遍历完成后再调用next()方法会抛出一个NoSuchElementExceptiom错误,所以在调用next()方法以前你需要预先调用hasNext()方法来检查一下。
那么,在Java中的for each语法是如何实现的呢?通过Iterable接口。
public interface Iterable<E>{
Iterator<E> iterator();
}
另一个公共接口是Map。Map是一种“键值对”数据类型,它的方法如下:
// 仅列一些常用方法
public interface Set<K, V>{
V put(K key, V value);
V get(K key);
}
List是Collection的一个常用派生接口。常用方法有:
public interface List<E> implements Collection{
void add(int index, E element);
void remove(int index);
E get(index);
}
4.1 队列Queue
在Java中未有实现的队列接口代码如下:
public interface Queue<E>{ // 很明显,这是一个泛型
void add (E element); // 添加元素
E remove(); // 删除元素
int size();
}
Java中队列实现有两种方式:
circular array-
linked list(链表)
但一般情况下不需要自己实现一遍,直接用Queue泛型类即可。如果想要Circular Array实现的queue,调用ArrayDeque类型;如果想要链表实现的队列,调用LinkedList就行了,它本身就已经调用了Queue接口。
4.2 Collection包中的接口
5. Generic:泛型编程
理解:针对不同的类有相同的处理方法。
泛型的继承规则
案例来自《Java核心技术(Core Java)》。
设定Manager是Employee的子类。那么,在泛型中,Pair<Manager>是否为Pair<Employee>的类?完全无关的两个类。
两个泛型类其实无关
观察下面一段代码:
Manager[] topHonchos = {"Ban", "ZZY", "Susan"};
Pair<Employee> result = ArrayAlg.minmax(topHonchos); // 错误!
如上所言,尖括号中的Employee并不代表它此时就是Pair<Manager>父类。
那么,如何在泛型中体现出继承关系呢?
这个时候就需要用到Wildcard Type了。
Wildcard Types
由于我读的是英文原版,所以没找到合适的翻译。故暂时翻译为外卡类。
外卡类的两种表现形式:
- 由上向下继承:
Pair<? extends Employee> - 由下向上继承:
Pair<? super Employee>













网友评论