要养成凡事查文档的习惯。文档地址如下:
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. 日期相关类
Calender
Date
SimpleDateFormat
java.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>
网友评论