List集合 List集合实现类 集合与数组的区别 迭代器 泛型

集合


  • 用于存储一种或者多种引用数据类型,并且长度可变的容器。
  • 集合的外延有:List集合、Set集合、Queue集合

List集合

是用于有序存储可重复元素的集合。

List接口继承了Collection接口,声明有序存储对象(可重复)功能的公共接口。

List集合的实现类有:ArrayList、Vector、LinkedList

集合中只能存储引用数据类型,不能存储基本数据类型

List集合常用方法:
    add(E e) - 向列表末尾追加元素
    add(int index,E e) - 在指定位置上添加一个对象
    addAll(Collection<? extends E> c)  - 将集合元素添加到指定集合的末尾
    get(int index)   返回指定位置的对象
    remove(int index)  删除指定位置的对象
    set(int index, E element)  - 用指定元素替换列表中指定位置的元素(可选操作)。
    indexOf(Object o)  - 返回第一个匹配对象的位置
    lastIndexOf(Object o)  - 返回最后一个匹配对象的索引
    size()   -  返回此列表中的元素数。

List集合实现类

List继承自Collection接口,有序元素可重复的集合。

List集合的实现类:
    ArrayList、 LinkedList、Vector、 Stack
    
(1)ArrayList
    数组实现,查找快,增删慢,由于是数组实现,在增加和删除的时候会牵扯到数组扩容以及
    拷贝元素,所以慢。数组是可以直接按索引查找,所以在查找的时候较为快。
    
(2)LinkedList
        链表实现,增删快、查找慢
        由于链表实现,增加时候只要让前一个元素记住自己就可以,删除时候让前一个元素记住后
        一个元素,后一个元素记录前一个元素这样大的增删效率比较高,但查询时需要一个一个的
        遍历,所以效率较低
        
    getFirst() 
      返回此列表的第一个元素。
      
(3)Vector
    是基于数组实现,线程同步的遗留集合类,和ArrayList原理相同,但线程安全,效率低
    
(4)Stack
    后进先出

ArrayList类

  • 基于数组实现的,长度可变的、分配连续内容空间的List集合

Collection集合

Java语言中集合的框架顶层是:Collection集合、Map集合
其中Collection集合操作元素的基本单位是:单个元素
其中Map集合操作元素的基本单位是:单对元素。

Queue 队列

    队列先进先出
    
    add()和remove在失败的时候会抛出异常(不推荐)
    
1. offer()   添加元素
2. poll()  返回第一个元素,并在队列中删除
3. element()    返回第一个元素
4. peek()       返回第一个元素。

数组和集合的比较

1.数组的特点
    a. 数组本质上就是一段连续的内存空间,用于记录多个类型相同的数据
    b. 数组一旦声明完毕,则内存空间固定不变。
    c. 插入和删除操作的时候不方便,可能会移动大量的元素导致效率太低
    d. 支持下标访问,可以实现随机访问。
    e. 数组中的元素可以是基本数据类型,也可以是引用数据类型。
    
2. 集合的特点
    a. 内存空间可以不连续,数据类型可以不相同
    b. 集合的内容空间可以动态调整
    c. 集合的插入删除操作可以不移动大量元素
    d. 部分支持下标访问,部分不支持
    e. 集合中的元素必须是引用数据类型

迭代器遍历

迭代器(Iterator) 
    迭代器是一种使用迭代法遍历集合的对象
    
Iterable集合是java集合框架的顶级集合

Iterator接口中常用的方法:
    hasNext()   -   判断是否还有其他元素
    next()      -   获取下一个元素
    remove()    -   删除最后一次调用next方法返回的元素

迭代器遍历步骤

  1. 调用Iterator()得到一个指向集合序列第一个元素的迭代器
  2. 用循环调用hasNext()方法,如果有元素,返回true
  3. 在循环中,使用next()方法获取集合中的下一个元素

增强for

语法格式:
     for(元素类型   e:数组名/Iterable实例){
    }

增强for和普通for有什么区别?
    增强for的内部也就是调用iterator实现的,但是增强for循环有一小点缺陷,比如说不能再
    增强for循环中动态的删除集合内容,不能获取下标等。

泛型

  • 泛型:是一种把类型明确的工作推迟到创建对象或调用方法的时候才去明确的特殊类型
    又称之为参数化类型,把类型当作参数一样传递。
  • 泛型是JDK1.5新特性

语法格式

<数据类型>
此处的数据类型只能是引用数据类型/类类型

泛型好处

1.将运行期间的问题提到了编译期间
2.避免了强制类型转换
3.优化了程序设计,解决了黄色警告线

泛型分类

泛型类
    把泛型定义在类上
    格式:public class 类名<泛型类型1,…>
    注意:泛型类型必须是引用类型
    
泛型方法
    把泛型定义在方法上
    格式:public <泛型类型> 返回类型 方法名(泛型类型1....)
    
泛型接口
    把泛型定义在接口上
    格式:public  interface 接口名<泛型类型1…>

符号

T(type)、V(value)、E(element)、K(key) 这四个都只是符号,表示泛型名称
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值