普歌-逆越团队-集合(框架)知识点(详细版)

集合详细知识点(用四篇文章来详解)

一、集合的注解

1. 什么是集合?

  • 集合是Java提供的一种容器,用来存储多个数据

2. 集合的特点是什么?

  • 对象封装数据,对象多了也需要存储。集合用于存储对象
  • 对象的个数确定可以使用数组,对象的个数不确定的可以用集合。因为集合是可变长度的。

3. 集合和数组的区别有哪些?

  • 集合长度可变( 可以动态扩展容量),数组是固定长度。
  • 集合仅可以存储引用数据类型,数组既可以存储基本数据类型也可以存储引用数据类型。
  • 集合可以存储不同数据类型,数组只可以存储同一种数据类型。

4. 集合的好处有哪些?

  • 容器自动增长
  • 提供了高性能的数据结构和算法,提高了程序的速度和质量。(实现了常用的数据结构,提供了一系列公开的方法用于增加、删除、修改、查找和遍历数据

5. 线程安全

  • Vector
  • HashTable
  • ConcurrentHashMap
  • StringBuffer
    线程不安全
  • ArrayList
  • LinkedList
  • HashMap
  • HashSet
  • TreeMap
  • TreeSet
  • StringBuilder

6. 常见的集合类有哪些?
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述在这里插入图片描述
7. 集合底层数据结构

Collection接口

  • List

     ArrayList:动态数组【增删慢,查询快】,线程不安全,效率高,可以存储重复元素。
     Vector:数组,查询快,增删慢,线程安全,效率低,可以存储重复元素。
     LinkedList:双向循环链表【查询慢,增删快】,线程不安全,效率高,可以存储重复元素。
    
  • Set

    HashSet:基于HashMap实现,底层是一个哈希表结构【查询速度非常快】
    LinkedHashSet:继承HashSet,内部通过LinkedHashMap
    TreeSet:红黑树
    

Map接口

   -  HashMap:【查询的速度特别快】【非线程安全】
              jdk1.8前:数组+链表
              jdk1.8后:数组+链表/红黑树(如果链表的长度超过了8位,那么就会把链表转换为红黑树(提高查询的速 度))减少搜索时间


   -  LinkedHashMap:继承自HashMap,底层仍然是数组和链表或红黑树组成另外,增加了一条双向链表,保证键值对的加入顺序,多了一条链表(记录元素的存储顺序),保证元素有序



   -  HashTable:数组+链表,数组是HashTable主体,链表是为了解决哈希冲突


   -  TreeMap:红黑树

二、Collection接口

1. Collection集合的概述
** Collection集合是util包下的接口,使用时需要导包。是所有单列集合最顶层的接口,里面定义的所有单列集合的共性方法。

使用集合中的方法时,首先要创建一个集合对象:
Collection< String > coll = Arraylist <>(); 这是一个多态(接口指向实现类)

所有实现Collection接口的类都必须提供两个标准的构造函数:无参数的构造函数用于创建一个空的 Collection,有一个Collection参数的构造函数用于创建一个新的Collection,这个新的Collection与传入的Collection有相同的元素。后一个构造函数允许用户复制一个Collection。**

2. Collection集合的常用方法
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
3. Collection接口中常用集合的分类及特点
在这里插入图片描述

4. List接口和Set接口的区别
在这里插入图片描述
在这里插入图片描述
5. List接口

(1)ArrayList:底层数据结构是数组,查询快,增删慢,线程不安全,效率高,可以存储重复元素。
(2)LinkedList:底层数据结构是链表,查询慢,增删快,线程不安全,效率高,可以存储重复元素。
(3)Vector:底层数据结构是数组,查询快,增删慢,线程安全,效率低,可以存储重复元素。

6. Set接口

(1)Set集合类似于一个罐子,程序可以依次把多个对象“丢进”Set集合,而Set集合通常不能记住元素的添加顺序。
实际上Set就是Collection只是行为略有不同(Set不允许存储重复元素)。

(2)Set集合不允许包含相同的元素,如果试图把两个相同元素加入同一个Set集合中,
则添加操作失败,add()方法返回false,且新元素不会被加入。

(3)Set集合不能存储重复的元素的原因:因为Set集合是通过HashMap实现的,存进去的数据相当于Key,
但Key是不能重复的。

7. Collection和Collections的区别?

*   Collection:是单列集合的顶层接口,有子接口List和Set。
*   Collections:是针对集合操作的工具类,有对集合进行排序和二分查找的。

三、Map接口

1. Map集合的概述
Map用于保存具有映射关系的数据,Map里保存着两组数据:key和value,它们都可以是任何引用类型的数据
key不能重复。所以通过指定的key就可以取出对应的value
Map<键,值>或者<K,V>

  (映射:映射就是给一个对象(可以是变量、物体、等等)起一个唯一的别名。例如:把编号9527映射
    到唐伯虎上,只需要告诉程序你要找编号9527,程序就能找到唐伯虎。这就是映射)

2. Map集合的作用
和查字典类似,通过key找到对应的value,通过页数找到对应的信息。用这种【对应关系方便查找】。

3. Map集合的特点

a. Map集合是一个双列集合,一个元素包含两个值(一个key,一个value)  
b. Map集合中的元素,K和V的数据类型可以相同,也可以不同,可以是任何引用类型的数据
c. Map集合中的元素,【K是不允许重复的,V是可以重复的】
d. Map集合中的元素,K和V是一一对应的

4. Map集合的常用子类
HashMap集合 、LinkedHashMap集合 (HashMap集合的子类)、ConcurrentHashMap集合、TreeMap集合。

5. Map集合的常用方法
在这里插入图片描述
6. Map集合的子接口

HashTable:数据结构是数组+链表;线程安全,修改时会锁住整张表;不可null键 null值;采用链地址法解决哈希冲突。

* HashMap:数据结构是数组+链表;线程不安全;可一个null键多个null值;采用链地址法解决哈希冲突。

*LinkedHashMap:跟HashMap类型,但会维护一个双向链表来保持插入的顺序是有序的。
 
*TreeMap:数据结构是红黑树;对map的key可以进行排序。
 
*ConcurrentHashMap:数据结构是 JDK1.7 【分段数组+链表】,JDK1.8【数组+链表/红黑树】

7. 辅助工具类

Array 和 ArrayList 有何区别?

* Array 可以存储基本数据类型和对象,ArrayList 只能存储对象。
* Array 是指定固定大小的,而 ArrayList 大小是自动扩展的。
* Array 内置方法没有 ArrayList 多,比如 addAll、removeAll、iteration 等方法只有 ArrayList 有。

对于基本类型数据,集合使用自动装箱来减少编码工作量。但是,
当处理固定大小的基本数据类型的时候,这种方式相对比较慢。

如何实现 Array 和 List 之间的转换?

* Array 转 List: Arrays. asList(array) ;【数组转集合】
* List 转 Array:List 的 toArray() 方法。【集合转数组】

comparable 和 comparator的区别?

* comparable接口实际上是出自java.lang包,它有一个 compareTo(Object obj)方法用来排序;
* comparator接口实际上是出自 java.util 包,它有一个compare(Object obj1, Object obj2)方法用来排序;


一般我们需要对一个集合使用自定义排序时,我们就要重写compareTo方法或compare方法,
当我们需要对某一个集合实现两种排序方式,比如一个song对象中的歌名和歌手名分别采用一种排序方法的话,
我们可以重写compareTo方法和使用自制的Comparator方法或者以两个Comparator来实现
歌名排序和歌星名排序,第二种代表我们只能使用两个参数版的Collections.sort().

Collection 和 Collections 有什么区别?

* java.util.Collection 是一个集合接口(集合类的一个顶级接口)。
  它提供了对集合对象进行基本操作的通用接口方法。
  Collection接口在Java 类库中有很多具体的实现。
  Collection接口的意义是为各种具体的集合提供了最大化的统一操作方式,
  其直接继承接口有List与Set。
* Collections则是集合类的一个工具类/帮助类,其中提供了一系列静态方法,
  用于对集合中元素进行排序、搜索以及线程安全等各种操作。


希望各位大神给作者多提一些建议,文中有错误或者不当之处,评论区里请留言,作者定会及时改正。大家喜欢的话点个赞,评论一下哇!谢谢支持!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值