目录
1.集合框架的介绍
简单来说,java集合框架就是java写好的一些数据结构,并定义在java.until包下面。并且以后的集合,都需要导入这个包。
下面是我们经常遇到的一些类和接口:
1.1Collection示例
这里我们强制转化数组类型会报错,原因是在java中,Object是所有class类的父类,而Object[ ]也是Object的子类,因此Object[ ]与其他类之间属于平级关系,并不能进行相互转换
2.Map示例
3.泛型的理解
假设我们先简单写一个顺序表:
class MyArrayList {
private int[] elem;
private int usedSize;
public MyArrayList() {
this.elem = new int[10];
}
public void add(int val) {
this.elem[usedSize] = val;
usedSize++;
}
public int get(int pos) {
return this.elem[pos];
}
但是问题来了:这个顺序表只能放int类型的数据,而不能放我们想放的任意数据,那我们如何改进呢?因为Object[ ]类是所有类的父类,我们改成这个类可以吗?
class MyArrayList {
private Object[] elem;
private int usedSize;
public MyArrayList() {
this.elem = new Object[10];
}
public void add(Object val) {
this.elem[usedSize] = val;
usedSize++;
}
public Object get(int pos) {
return this.elem[pos];
}
但是这样改完之后,我们可以放任何数据,但每次取出数据的时候,我们都需要强制类型转换,就特别麻烦。那我们能不能指定这个顺序表的类型,此时我们就引入了泛型的概念:
class MyArrayList<E> {
private E[] elem;
private int usedSize;
public MyArrayList() {
this.elem = (E[])new Object[10];
//this.elem = new E[10];//这个是错的代码,因为泛型不能实例化泛型
//上述代码相当于 private E[] elem = new E[10];
}
public void add(E val) {
this.elem[usedSize] = val;
usedSize++;
}
public E get(int pos) {
return this.elem[pos];
}
此时加入<E>将顺序表改为了泛型类,我们先来调用自己写的泛型类:
因此泛型就可以指定放我们想放的类型。
泛型不能直接实例化:
public T[] objects = new T[10]
这个是错误的,泛型类型的数组不能直接实例化。
3.1简答题
泛型是怎么编译的:
我们先看个简单例子:
此时我们看到打印的并没有<String>类型,因此泛型的打印是一种编译时期的机制,即擦除机制。将<E>变为了Object类型。