数组

数组

定义:开辟连续的内存空间去存储类型相同的数据

自己动手写一个数组

代码:

public class Array<E> {
    private E[] arrs;
    private int size;

    Array(int capcity){
        arrs = (E[])new Object[capcity];
        size = 0;
    }

    Array(){
        this(10);
    }

    public int getSize(){
        return size;
    }

    public E[] getArrs(){
        return arrs;
    }

    public int getCapcity(){
        return arrs.length;
    }

    public boolean isEmpty(){
        return size == 0;
    }

    //在所有元素后插入一个元素
    public void addLast(E e){
        add(size,e);
    }
    //在所有元素首插入一个元素
    public void addFirst(E e){
        add(0,e);
    }

    //在具体的索引处插入元素
    public void add(int index , E e){
        if(index < 0 || index > size){
            throw new IllegalArgumentException("index not suitable");
        }

        if(size >= arrs.length){
           resize(arrs.length * 2);
        }
        for(int i = size - 1; i >= index;i-- ){
            arrs[i+1] = arrs[i];
        }
        arrs[index] = e;
        size++;
    }

    public void set(int index , E e){
        if(index < 0 || index >= size){
            throw new IllegalArgumentException("index range error");
        }
        arrs[index]  = e;
    }
    public E get(int index){
        if(index < 0 || index >= size){
            throw new IllegalArgumentException("index range error");
        }
        return arrs[index];
    }

    public boolean contains(E e){
        for(int i = 0 ; i < size ; i++){
            if(e.equals(arrs[i]))
                return true;
        }
        return false;
    }

    public int find(E e){
        for(int i = 0 ; i < size ; i++){
            if(e.equals(arrs[i]))
                return i;
        }
        return -1;
    }

    public E delete(int index){
        if(index < 0 || index >= size){
            throw new IllegalArgumentException("index illegal");
        }
        E res = arrs[index];
        for(int i = index ; i < size - 1; i++){
            arrs[i] = arrs[i+1];
        }
        size--;
        if(size == arrs.length/4 && arrs.length != 0)
            resize(arrs.length/2);
        return res;
    }

    public E deleteFirst(){
        return delete(0);
    }

    public E deleteLast(){
        return delete(size - 1);
    }

    public void deleteElement(E e){
        int index  = find(e);
        if(find(e) != (-1)){
            delete(index);
        }
    }

    @Override
    public String toString(){
            StringBuilder res = new StringBuilder();
            res.append(String.format("Array: size = %d , capacity = %d\n",size,arrs.length));
            res.append('[');
            for(int  i = 0 ; i < size ; i++){
                res.append(arrs[i]);
                if(i != size - 1){
                    res.append(", ");
                }
            }
            res.append(']');
         return res.toString();
    }

    private void resize(int newcapcity){
         E[] newArr = (E[])new Object[newcapcity];
        for(int i = 0 ; i < size ; i++){
            newArr[i] = arrs[i];
        }
        arrs = newArr;

    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
目标检测(Object Detection)是计算机视觉领域的一个核心问题,其主要任务是找出图像中所有感兴趣的目标(物体),并确定它们的类别和位置。以下是对目标检测的详细阐述: 一、基本概念 目标检测的任务是解决“在哪里?是什么?”的问题,即定位出图像中目标的位置并识别出目标的类别。由于各类物体具有不同的外观、形状和姿态,加上成像时光照、遮挡等因素的干扰,目标检测一直是计算机视觉领域最具挑战性的任务之一。 二、核心问题 目标检测涉及以下几个核心问题: 分类问题:判断图像中的目标属于哪个类别。 定位问题:确定目标在图像中的具体位置。 大小问题:目标可能具有不同的大小。 形状问题:目标可能具有不同的形状。 三、算法分类 基于深度学习的目标检测算法主要分为两大类: Two-stage算法:先进行区域生成(Region Proposal),生成有可能包含待检物体的预选框(Region Proposal),再通过卷积神经网络进行样本分类。常见的Two-stage算法包括R-CNN、Fast R-CNN、Faster R-CNN等。 One-stage算法:不用生成区域提议,直接在网络中提取特征来预测物体分类和位置。常见的One-stage算法包括YOLO系列(YOLOv1、YOLOv2、YOLOv3、YOLOv4、YOLOv5等)、SSD和RetinaNet等。 四、算法原理 以YOLO系列为例,YOLO将目标检测视为回归问题,将输入图像一次性划分为多个区域,直接在输出层预测边界框和类别概率。YOLO采用卷积网络来提取特征,使用全连接层来得到预测值。其网络结构通常包含多个卷积层和全连接层,通过卷积层提取图像特征,通过全连接层输出预测结果。 五、应用领域 目标检测技术已经广泛应用于各个领域,为人们的生活带来了极大的便利。以下是一些主要的应用领域: 安全监控:在商场、银行
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值