集合的增删改查

本文深入解析Java集合框架,包括数组、Collection、List、ArrayList、Vector、LinkedList等核心概念与特性,探讨不同集合类的适用场景及操作方法。

集合

存储数据的容器 !

    数组:
    Object[] objs = new Object[10];     
    上述是一个Object数组, 在Java中万物皆对象 , 也就是表示上述数组可以存储任何的数据 !

    数组的长度一经确定, 无法被改变 !

Collection

集合两大体系中的一个 .   Collection 是单值存储集合的最大父接口 !

面试题 : Collection 与 Collections 的区别? ***

Collection 是集合中, 单值存储的最大父接口 ! 是java中单值存储数据的集合的 顶级抽象接口 !!
Collections 是操作集合的工具 , 与Collection 没有关系, 也没有对比性 !

Collection的子接口 List

ArrayList *****

特性:
    来自JDK 1.2 版本
    默认的初始容量 10 ; 
    扩容算法:   原长度 加上 原长度右移一位 (约等于1.5倍)
    允许存储null值
    允许存储重复的值
    因为内部实现是数组, 所以数据的 存储是有序的 , 便于遍历与查找 !
    线程非安全的

ArrayList常用方法

基本操作:

-   boolean add(E e) :  向集合中添加一个元素 , 返回值永远为true *****
-   boolean add(int index ,E e) :   向指定的索引位置,插入一个元素, 原数据自动后移!
-   boolean set(int index ,E e) :   替换指定索引位置的元素内容 !
-   E get(int index) :  获取指定索引处的元素内容!   *****
-   E remove(int index) :   获取并移除指定索引处的元素   *
-   E remove(E e)   :   删除指定的元素
-   int size()  :   获取当前集合有效数据的个数 ! *
-   clear() :   清空集合 掌握
-   boolean isEmpty()  如果列表不包含元素,则返回 true。 了解 

 

对一组数据的操作(了解)
-   boolean addAll(Collection 集合)   :   将参数集合中的所有数据, 追加到当前的集合中 !
-   boolean addAll(int index,Collection 集合) :   将参数集合中的所有数据, 追加到当前集合的指定位置 !
-   boolean removeAll(Collection 集合)    :   从当前集合中, 移除与参数集合匹配的所有元素 !
-   boolean retainAll(Collection 集合)    :   从当前集合中, 保留与参数集合匹配的所有元素 !

 

判断集合中是否包含某元素 (掌握)
-   boolean contains(Object o);

判断集合中是否包含某多个元素 (了解)
-   boolean containsAll(Collection collection);

 

将List集合转换为数组 , 然后进行操作 (了解)
-   Object[] toArray();

-   E[] toArray(E[] t);

 

查找集合中元素的位置:

-   int indexOf(E e) (熟悉)
        顺序查找指定元素e 在集合中的位置, 查找成功返回索引值 , 查找失败返回-1
-   int lastIndexOf(E e) (了解)
        倒序查找指定元素e 在集合中的位置, 查找成功返回索引值 , 查找失败返回-1

 

从集合中截取 子集合 (了解)
-   List subList(int 起始下标,int 结束下标);
    从集合中截取子集合, 包含起始下标元素, 不包含结束下标元素 !

注意: 此截取操作, 截取后的新集合 与 旧集合共用一块内存 ! 在操作子集合时, 会影响原有的集合!

特殊操作:  清除集合100下标到200下标的数据

    data.subList(100,200).clear();

案例:
    ArrayList<String> data1 = new ArrayList<String>();
    data1.add("哈哈哈"); 
    data1.add("嘿嘿嘿");
    data1.add("呵呵呵");
    data1.add("嘻嘻嘻");
    data1.add("嘿嘿嘿");
    data1.add("老和尚");
    List<String> data2 = data1.subList(1,3);
    data2.clear();
    System.out.println(data1);

面试题: ***

观察如下代码, 描述执行结果:

ArrayList data = new ArrayList();//未指定泛型, 类型为Object
data.add(1);
data.add(2);
data.add(3);

data.remove(1);
System.out.println(data);

请描述执行结果: "[1,3]"

解释: 
    集合的泛型未指定,  存储的数据类型为Object  也就是对象!
    存储int类型数据时, 其实存储的是Integer , 进行了自动装箱而已 .
    删除时, 传入的是int , 则是根据下标进行删除 ! 
    如果删除时,传入的是Integer , 则删除的就是数据了!

Vector

1.0版本的集合类, 在1.2版本时, 融入到了新的集合体系中, 
与ArrayList操作基本一致, 但是是线程安全的!
扩容算法:  用户指定每次扩容的增量, 如果增量为0 则每次扩容为两倍

LinkedList

内部使用链表结构实现, 
线程非安全的, 效率较高
方便删除和数据的插入!

学习这几种list集合, 后期在使用时, 应根据需求选择集合使用:

ArrayList 和 vector 和 LinkedList 的操作基本一致 !

ArrayList 更适合 遍历与 查找
vector 更适合 要求线程安全时
LinkedList 更适合进行大量删除与插入的需求

队列 Queue 了解

Queue接口中 使用最多的类是LinkedList
队列是先进先出的!

-   boolean offer(E e)  :   将一个元素, 添加到队列的尾部, 添加成功返回true
-   E   poll()  :   从队列的首部取出一个数据, 并从队列中移除此数据!
-   E   peek()  :   从队列首部取出一个数据 .

双端队列 Deque 了解

Deque接口中 使用最多的类是LinkedList
-   boolean offerLast(E e)  :   将一个元素, 添加到队列的尾部, 添加成功返回true
-   boolean offerFirst(E e) :   将一个元素, 添加到队列的首部, 添加成功返回true
-   E   pollLast()  :   从队列的尾部取出一个数据, 并从队列中移除此数据!
-   E   pollFirst() :   从队列的首部取出一个数据, 并从队列中移除此数据!
-   E   peekLast()  :   从队列尾部取出一个数据 .
-   E   peekFirst() :   从队列首部取出一个数据 .
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值