泛型
/**
* 泛型的定义:在类的后面加尖括号表示要定义一个泛型
* 使用泛型定义一个属性的时候,它的类型是由创建对象的时候,才能确定它的类型
* 泛型代表的是不确定的类型,所以在定义对象的时候,无法进行赋值操作,无法构建对象
* 泛型的声明,代码块都不能进行泛型对应的属性赋值
* 构造方法,set方法可以对泛型对应的属性进行赋值
* Iterable 可迭代的(迭代器)
*/
public interface Array<T> extends Iterable<T>
public void sertData(){
this.data = data;
}
public T getData(){
return this.data;
}
/*
* 在测试类构建对象的时候,如果没有指定 泛型的具体类型
* 那么 泛型对应的类型是 Object
*/
Person person = new Person();
//发生了多态,向上自动转型
//向上自动转型,会丢失子类的提醒
person.setData("张三");
Object data = person.getData();
//不能调用字符串的方法
// person.substring;
- 泛型的更多使用场景是
- 存储多个数据,且适用于多种数据类型
import java.util.function.Predicate;
/**
* 泛型的更多使用场景是
* 存储多个数据, 且适用于多种数据类型
*
*/
public interface Array<E> extends Iterable<E>{
/**
* 添加元素
* @param index
* @param ele
*/
public void add(int index, E ele);
default void addFirst(E ele){
this.add(0, ele);
}
/**
* 将数据添加到尾部
* @param ele
*/
public void add(E ele);
/**
* 修改指定位置的元素
* @param index
* @param ele
*/
public void set(int index, E ele) ;
/**
* 删除指定位置的元素,并返回被删除的元素
* @param index
* @return
*/
public E remove(int index);
/**
* count > 0 , 代表删除指定个数的 ele元素
* count = 0 , 代表 删除 所有的满足条件的元素
* @param ele
* @param count 删除元素的个数
* @return
*/
public boolean remove(E ele, int count) ;
/**
* 删除第一个满足条件的元素
* @param ele
* @return
*/
default boolean remove(E ele) {
return this.remove(ele, 1) ;
}
default boolean removeAll(E ele) {
return this.remove(ele, 0);
}
/**
* 获取指定索引位置的元素
* @param index
* @return
*/
public E get(int index);
/**
* 获取 某个元素对应的索引位置
* @param ele
* @return
*/
public int indexOf(E ele);
/**
* 获取 某个元素 最后出现的索引位置
* @param ele
* @return
*/
public int lastIndexOf(E ele);
/**
* 获取存储的元素数量
* @return
*/
public int size() ;
/**
* 将 Array 转成数组
* @return
*/
public E[] toArray();
public E find(Predicate<? super E> predicate) ;
/**
* 根据某个条件查找满足条件的所有数组
* @param predicate
* @return
*/
public Array<E> findAll(Predicate<? super E> predicate) ;
/**
* 根据某个条件删除数据
* @param predicate
* @return
*/
public void removeIf(Predicate<? super E> predicate) ;
}
- 数组一旦创建,长度不可改变
{
//负责构建一个默认长度为16的数组,且内容为null
array = new object[DEFAULT_SIZE];
size = 0;
}
if (array.length >= DEFAULT_SIZE * RATE) {
// 数组扩容,
this.array = new Object[array.length * 2];
}
// 将数组拷贝进来
System.arraycopy(array, 0, this.array, 0, array.length);
// 要修改 有效长度
size = array.length ;
Iterable 接口
- 工具类要继承 Iterable 接口(extends Iterable)
- 要重写 Iterable 方法