Java 泛型

泛型

/**
 *	泛型的定义:在类的后面加尖括号表示要定义一个泛型
 *	使用泛型定义一个属性的时候,它的类型是由创建对象的时候,才能确定它的类型
 *	泛型代表的是不确定的类型,所以在定义对象的时候,无法进行赋值操作,无法构建对象
 *	泛型的声明,代码块都不能进行泛型对应的属性赋值
 *	构造方法,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 方法
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值