JAVA集合类

JAVA——集合总结

一、集合类

1、集合类的特点:集合只用于存储对象,集合长度是可变的,集合可以存储不同类型的对象。

2、集合类和数组的区别

(1)数组虽然也可以存储对象,但长度是固定的;而集合长度是可变的。
(2)数组中可以存储基本数据类型,集合只能存储对象

二、Collection接口概述

1、Collection集合

  • (1)Collection 是层次结构中的根接口。
  • (2)Collection 表示一组对象,这些对象为 collection 的元素。这些元素有唯一的,有有序的,有无序的。

2、集合的集合体系

3、Collection接口成员方法:

  • 添加功能 boolean add(object obj) 添加一个元素
  • boolean addAll(Collection c) 添加一个集合的元素
  • 删除功能 void clear() 移除所有元素
  • Boolean remove(object o) 移除一个元素
  • Boolean removeAll(Collection c) 移除一个集合
  • 判断功能 boolean contains(Object o) 判断集合中是否包含指定的元素
  • boolean containsAll(Collection c) 判断集合中是否包含指定的集合元素
  • boolean isEmpty() 判断集合是否为空
  • 获取功能 Iterator iterator() (重点)
  • 长度功能 Int size() 集合中元素的个数
  • 交集功能 boolean retainAll(Collection c)
  • 把集合转换为数组 Object[] toArray()

4、集合的使用步骤

  • A:创建集合对象
  • B:创建元素对象
  • C:把元素添加到集合
  • D:遍历集合

5、Collection集合的遍历

  • (1)将集合转化为数组 :Object[] toArray():把集合转成数组,可以实现集合的遍历
  • (2)利用Iterator迭代器
    步骤:
  • A:通过集合对象获取迭代器对象 
  • B:通过迭代器对象的hasNext()方法判断是否有元素 
  • C:通过迭代器对象的next()方法获取元素并移动到下一个位置
Collection c = new Collection();</br>
Iterator it = c.iterator();</br>
While(it.hasNext()){</br>
 String s = (String)it.next();</br>
 System.out,println(s);</br>
}
迭代器为什么是一个接口,而不定义为一个类呢?
  • 1. 假设迭代器定义的是一个类,我们就可以创建该类对象,调用该类方法实现集合的遍历。而Java提供了很多集合类,这些集合类的数据结构是不同的,所以,存储方式和遍历方式也应该不同,所以,迭代器没有定义为类。
  • 2. 无论何种集合,都具备元素获取和判断的功能,所以通过接口将这两种方法提取出来,不提供具体实现。具体的实现以内部类的形式体现。

三、List集合

1、概述

有序的 collection(也称为序列)。此接口的用户可以对列表中每个元素的插入位置进行精确地控制。用户可以根据元素的整数索引(在列表中的位置)访问元素,并搜索列表中的元素。

2、List集合的特有方法

  • 添加功能:void add(int index,E element)
  • 删除功能:E remove(int index)
  • 获取功能:E get(int index)
  • 修改功能:E set(int index,E element)
  • 迭代器:ListIterator listIterator()

3、List集合的特有遍历功能:由size()和get()组成

List list = new ArrayList();
//添加元素
……
//遍历
for (int x = 0; x < list.size(); x++) {
        String s = (String) list.get(x);
    System.out.println(s);
}

4、List子类的特点

  • (1)ArrayList:底层数据结构是数组,查询快,增删慢;线程不安全,效率高;
  • (2)Vector:底层数据结构是数组,查询快,增删慢;线程安全,效率低;
  • (3)LinkedList:底层数据结构是链表,查询慢,增删快,;线程不安全,效率高。
到底使用谁呢?看需求。

【分析】

  • 如果要安全:用Vector
  • 不要求:ArrayList或者LinkedList
  • 查询多;ArrayList
  • 增删多:LinkedList

四、Set集合

1、set集合的特点:无序、唯一

2、HashSet集合:底层数据结构是哈希表(一个元素为链表的数组)

  • (1)哈希表底层依赖两个方法:hashCode()和equals()
  • 执行顺序: 首先比较哈希值是否相同 相同:继续执行equals()方法 返回true:元素重复了,不添加 返回false:直接把元素添加到集合 不同:就直接把元素添加到集合
  • (2)如何保证元素唯一性的呢?
由hashCode()和equals()保证的

3、TreeSet集合:底层数据结构是红黑树(是一个自平衡的二叉树)

  • 保证元素的排序方式 - a:自然排序(元素具备比较性):让元素所属的类实现Comparable接口
  • b:比较器排序(集合具备比较性):让集合构造方法接收Comparator的实现类对象(重写Comparator()对象的Compare()方法)
 TreeSet<tts = new TreeSet<T>(new Comparator<T>() {
            @Override
            public int compare(T T1,T T2){
            }
        });

五、Map集合

1、概述

  • (1)将键映射到值的对象
  • (2)一个映射不能包含重复的键
  • (3)每个键最多只能映射到一个值

2、Map接口和Collection接口的不同

  • A:Map 存储的是键值对形式的元素,键唯一,值可以重复。
  • B:Collection 存储的是单独出现的元素,子接口Set元素唯一,子接口List元素可重复。

3、Map接口功能概述

  • A:添加功能:V put(K key,V value)
  • B:删除功能:V remove(Object key) void clear()
  • C:判断功能: boolean containsKey(Object key)
         boolean containsValue(Object value)
         boolean isEmpty()
  • D:获取功能:V get(Object key)
  • E:长度功能:int size()

4、Map集合的遍历

(1)方式一:键找值
- a:获取所有键的集合
- b:遍历键的集合,得到每一个键
- c:根据键到集合中去找值
(2)方式二:键值对对象找键和值
- a:获取所有的键值对对象的集合
- b:遍历键值对对象的集合,获取每一个键值对对象
- c:根据键值对对象去获取键和值

Map<String,Stringhm = new HashMap<String,String>();

            hm.put("it002","hello");
            hm.put("it003","world");
            hm.put("it001","java");
方式1 键找值
Set<Stringset = hm.keySet();
for(String key : set) {
    String value = hm.get(key);
    System.out.println(key+"---"+value);
}
方式2 键值对对象找键和值
Set<Map.Entry<String,String>set2 = hm.entrySet();
for(Map.Entry<String,Stringme : set2) {
        String key = me.getKey();
        String value = me.getValue();
System.out.println(key+"---"+value);

六、Collections

1、是针对集合进行操作的工具类
2、(面试题)Collection和Collections的区别
- A:Collection 是单列集合的顶层接口,有两个子接口List和Set
- B:Collections 是针对集合进行操作的工具类,可以对集合进行排序和查找等 

3、常见的几个小方法:

  •  A:public static <T>void sort(List<T> list)
  •  B:public static <T>int binarySearch(List<?> list,T key)
  •  C:public static <T> T max(Collection<?> coll)
  •  D:public static void reverse(List<?> list)
  •  E:public static void shuffle(List<?> list)

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

余额充值