HashSet_day13

HashSet

基本类型会自动去重

引用类型需重写hashCode和equals方法实现去重

处理HashSet存储的自定义引用数据类型去重问题:

  • 需要对这个对象类型中重写hashcode和equals方法,然后这个两个的值都根据对象的成员属性值进行计算,而非地址值
  • hash表结构的特点是先调用hashcode,如果值形同的对象才会进一步调用equals方法进行比较内容,如果hashcode值不相同,根本不会比较equals方法的值

TreeSet

TreeSet: 无序,不可重复

  • 底层结构: 红黑树进行存储
  • 特点: 有序(自动从小到达升序排序)
  • 可以定义比较规则,排序规则,并且可以使用去重原则
  • 内部比较器|自然排序: 实现Comparable接口,重写comparaTo方法,在方法中定义比较规则.,默认的比较规则
  • 外部比较器|指定比较器:实现一个Comparator接口,重写compare()方法,方法的内部定义比较规则

Map

Map:存储的每一个数据都是一个键值对形式存在的 k,v

key 无序的,唯一的–>就是一个set集合

value无序的,可重复的

一个key对象一个value,两者之间存在映射关系

如果存储数据的时候,key相同,value的值会覆盖

map中,HashMap的去重,根据Map的key进行计算

​ TreeMap的去重+排序,根据Map的key进行计算

如果一个key,想要对多个value值,可以把多个value存在一个容器中

Map的遍历方式

  1. 获取所有key,根据key拿value keySet()
  2. 获取所有的value, values()这种遍历方式无法获取key,只能遍历所有的value
  3. entrySet()获取所有的键值对,每一个键值对都是一个Map.ENTRY类型的数据,所有的Map.ENTRY类型的数据放在一个set集合中

TreeMap

TreeaMap 去存储自定义的引用数据类型的数据key是自定义的引用数据类型

TreeaMap的特点是:其中数据会自动升序排序,

  • 实现的步骤:
  •  1.去重  实现内部|外部比较器 比较的原则根据key,不能根据value
    
  •  2.根据需求排序
    
  •  	key的内容决定排序和去重的原则,这是TreeMap默认的比较过程
    

Collection工具类

Collections操作容器的工具类:
void sort(List) //对 List 容器内的元素排序,按照升序进行排序。
void shuffle(List) //对 List 容器内的元素进行随机排列
void reverse(List) //对 List 容器内的元素进行逆续排列
void fill(List, Object) //用一个特定的对象重写整个 List 容器
int binarySearch(List, Object)//采用折半查找的方法查找特定对象

如何解决HashMap线程不安全的问题:

1.使用Hashtable容器

2.static <K,V> Map<K,V> synchronizedMap(Map<K,V> m) 使用Collecitons工具类中的synchronizedMap,返回一个线程安全的map

3.juc包下的ConcurrentHashMap<K,V>类 —推荐使用

Properties

Properties Properties 可保存在流中或从流中加载。 key与value都是字符串类型的数据

  • 配置文件使用:
  • 1.项目右键->source floder->file->添加键值对类型的数据
  • 2.通过Properties 的load方法,从资源文件中获取资源流,读入数据

线程

  • 多线程:

  • 多任务同时执行,多条路径执行,如果没有多任务,不需要使用多线程

  • 线程和进程之间的区别:

  • 1.进程包含1~n个线程

  • 2.每个进程有自己的代码和运行空间

  • 3.一系列线程共享继承的资源

  • 4.进程是资源分配的最小单位,线程是cpu调度的最小单位

  • 5.线程之间切换开销小,进程之间开销大.

  • 多线程的开启方式(重点)

  • 1.继承Thread类,重写run()方法,在方法中定义多线程的线程体

  • 2.实现Runnable接口,重写run()方法,在方法中定义多线程的线程体 —推荐

  • 3.实现Callable接口,重写call()方法,在方法中定义多线程的线程体优点: 1)抛出异常 2)返回值

  • 多线程的状态问题

  • 多线程的线程安全问题 (重点)

  • 线程通信问题

  • 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、付费专栏及课程。

余额充值