集合自序整理集


     1、集合概述

  集合和数组一样都是对多个数据进行存储操作的容器

1. 集合和数组的区别
    • 集合长度可变,数组长度固定
    • 集合可以存储不同数据类型元素,数组只能存储单一数据类型元素
    • 集合只能存储引用类型元素,数组既可以存储引用类型元素又可以存储基本类型元素

 

2. 集合框架图

     2、Collection接口
  单例集合,它包含了集合的基本操作和属性,它是List接口和Set接口的父接口  
1. Conllection接口基本方法
Collection接口通用方法来对集合实现基本操作:

    add():添加元素
    clear():清空元素
    remove():删除元素
    size():元素数量
    toArray():集合转数组
    contains():判断元素是否存在
    isEmpry():判断集合是否为空
     3、List集合 
  在Collection中LIst集合是进入先后有序保存可重复的类型,可对其中每个元素的插入位置进行精准地控制,可以通过索引来访问元素和遍历元素;在List集合中我们常使用到的就是ArrayList集合和LinkedList集合这个两个类  
1. List集合基本方法
List接口定义的特有基本功能:

    set():把索引查询到位置的元素修改成指定的值,并返回修改前的值
    get():获取指定位置的元素
    indexOf():索引指定元素
    listIterator():列表迭代器
    subList():截取集合
2. ArrayList集合
  ArrayList集合实现List接口,它得到来LIst集合框架的基础功能;ArrayList集合底层是通过数组来实现的,随着元素的增加而动态扩充;
    • 优点:查询快、效率高、可以存储重复值
    • 缺点:增删慢、线程不安全
  2.1. 泛型
  对于ArrayList来说带有尖括号<>则代表泛型,表示着集合当中所有的元素全都是统一的类型,泛型只能是引用类型而不能是基本类型
创建泛型

存储指定数据结构:
        ArayyListlist = new ArayyList<>();
       添加元素
       list.add("李逍遥")
       删除元素
       list.remove(0)/list.remove("李逍遥")
       获取指定元素
       list.get(0)
        
存储对象:
        ArayyListlist = new ArayyList();

 
2.2. ArrayList存储类型

  在ArrayList集合中存储的指定数据结构都是以对象为单位,所有的数据类型都必须转换成包装类

      • 自动装箱:基本类型转换成包装类(int => Integer)
      • 自动拆箱:包装类转换成基本类型(Integer => int)  
2.2.1. 基本类型与包装类型
基本类型 包装类(引用类型,包装类都位于java.lang包下)
bety Bety
short Short
int Integer
long Long
float Float
double Double
char Character
boolean Boolean
  2.3. ArrayList见解
      • ArrayList集合之所以和数组有着相似性功能,是因为ArrayList类内部封装类一个Object类型的数组,在ArrayList集合当中会有很多方法,比如index、indexOf都是在内部数组中调用Array对于的方法

 

      • 频繁的往ArrayList中添加和修改元素都会引起装箱和拆箱操作,会存在影响内部Object数组的效率

 

      • 数组扩容,每当ArrayList集合执行add()操作时,内部数组就会自动检查容量是否足够,容量足够则正常添加元素;容量不够时,数组会以自身容量的两倍来创建一个新的数组,将旧数组中数据存入到新数组,再旧数组丢弃掉;对于这个临界点扩容的操作会存在影响一些效率
 
3. LinkedList集合
LinkedList集合实现了LIst、Deque接口,底层是一个双向链表,属于线性表
    • 优点:增删快、允许空值存在、线程安全
    • 缺点:查询慢
  3.1. LinkedList使用
创建LinkedList方法
    LinKedListlist = new LinKedList<>();
    添加到首列/添加到末列/添加元素
    list.addFirst("冰墩墩")
    list.addLast("雪容融")
    list.add("李逍遥")
    list.push("等同于add()")
    删除首列元素/删除元素
    list.removeFirst("冰墩墩")
    list.removeLast("雪容融")
    list.remove("李逍遥")
    
     4、Map接口

  Map接口提供的是一种映射关系,存储元素是采用键值对方式(key-Value),能根据key快速的查询到Value值

    • 特点:支持泛型、key值可重复/Value值不可重复
4.1. HashMap集合
  HashMap是Map接口实现类,底层是基于数组+链表(哈希表)实现的;HashMap集合整体就是一个数组,数组每个下标就代表着一个链表,链表节点中Vaule是Object类型
      • 优点:无序排列
      • 缺点:线程不安全
 
4.2. HashMap存储图

 
4.3. HashMap使用
创建HashMap方法:
    HashMapmap = new HashMap();
    添加元素
    map.put("政治",90.0)
    删除元素
    map.remove("政治")
遍历HashMap
for(Map.Entryentry:map.entrySet()){
    sout("key:"+entry.getKey+",Value:"+entry.getValue);
}