Java集合基础_Collection(ArrayList、LinkedList)、Vector

本文介绍了Java集合框架中的ArrayList、LinkedList和Vector的区别。数组与集合的主要差异在于长度的可变性及存储类型。ArrayList和LinkedList都是List接口的实现,ArrayList基于数组,适合随机访问,插入删除效率相对较低;LinkedList基于链表,适合插入删除,但随机访问效率不高。Vector与ArrayList类似,但它是线程安全的,但这也导致了其性能较低。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

数组与集合的比较

数组:长度固定,可以存储基本数据类型,也能存储对象

集合:长度可变,只能存储对象类型
由于有包装类的存在,集合可以存储任何类型

集合的体系结构

  • List体系:一维表的相关封装结构
  • Set:集合的相关结构
  • 还有Map<key, value>的相关结构图中没有展示

Collection接口常用方法

collection集合是所有集合类的老祖宗,我们将要学习它的公共属性,这些公共属性将被所有其实现类所实现,并且子类保持自己结构特性

我们以ArrayList() 作为元素类型做示例,ArrayList()实现了Collection 接口,所以它具备Collection 接口的所有方法的实现

  • add:添加元素
        /*创建一个collection集合对象*/
        Collection coll = new ArrayList() ;
        ((ArrayList) coll).add("劳斯莱斯");
        ((ArrayList) coll).add("迈巴赫");

        /*创建一个collection集合对象*/
        Collection coll2  = new ArrayList() ;
        ((ArrayList) coll2).add("宝马");
        ((ArrayList) coll2).add("奔驰");

  • addAll:集合中加入集合,以元素的形式并入被加集合
((ArrayList) coll2).addAll(coll) ;
System.out.println(coll2);
结果:[宝马, 奔驰, 劳斯莱斯, 迈巴赫]
  • remove:删除指定元素
       coll.remove("劳斯莱斯") ;
       System.out.println(coll);
结果:[迈巴赫]
  • removeAll:删除集合中的集合
        coll2.removeAll(coll) ;
        System.out.println(coll2);
结果:[宝马, 奔驰, 劳斯莱斯]
  • contains

是否包含某元素,返回boolean类型数据

        boolean iscontain = coll2.contains("宝马");
        System.out.println(iscontain);
结果:true
  • containsAll

是否包含某集合,返回boolean类型数据

        iscontain = coll2.containsAll(coll) ;
        System.out.println(iscontain);
结果:false
  • isEmpty

集合是否为空,返回boolean类型数据

        boolean isEmpty = coll.isEmpty() ;
        System.out.println(isEmpty);
结果:false
  • toArray集合转化为数组
        Object[] obj  = coll2.toArray();
        System.out.println(obj);

        for(int i=0 ; i < obj.length ; i++){
            System.out.println(obj[i]);
        }
结果:[Ljava.lang.Object;@a77106
			宝马
			奔驰
			劳斯莱斯

迭代器

迭代器是每个集合实现了迭代器接口,对遍历自己集合提供了一个方法

迭代器对象遍历是一次性的,如需多次遍历需创建多个迭代器对象

       Iterator iterator = coll2.iterator();
        while (iterator.hasNext()){
            Object obj1  =  iterator.next();
            System.out.println(obj1);
        }
结果:
宝马
奔驰
劳斯莱斯

迭代器本质是个指针,一次性使用(一去不复返),迭代过程不允许对集合进行增删改查,否则抛异常

但其提供的add方法可以在遍历过程中进行其他操作

List

独有方法:

  • add(int index,Object element)

在指定位置插入元素,元素下标机制与数组一致

        list.add(0,"晁盖");
        System.out.println(list);
		结果:[晁盖, 吴用, 刘唐, 宋江]
  • get(int index)

获得指定元素

注意:不要越界

		Object obj  = list.get(1) ;
        System.out.println(obj);
结果:吴用
  • size() - 获取几个内元素个数

  • indexof/lastIndexOf

返回指定元素的正向遍历第一个位置/返回指定元素的反向遍历第一个位置

        System.out.println(list.indexOf("白胜1"));
        System.out.println(list.lastIndexOf("白胜1"));
结果:7 7 
  • remove

删除指定元素,返回元素位置

删除指定位置元素,返回Boolean

System.out.println(list.remove(2)); //返回被删除元素,往后元素向前移动
System.out.println(list.remove("晁盖")); //返回boolean,往后元素向前移动
结果:白胜
	true
	
  • clear

清空集合元素

   list.clear();

ArrayList

实现了List的一个类,底层数组

改进:

  • 数组长度动态可变

  • 允许存入null类型元素

  • 相比list,支持多并发(不是线程安全)

其方法与其接口list提供的方法基本一致

        List list = new ArrayList() ;
        list.add(null);
        list.add(null);
        list.add(null);

        list.set(2,"吴用") ; // 修改指定索引出的值
        System.out.println(list);

LinkedList

LinkedList底层是数据结构中的链表实现的

特点:

  • 允许用作堆栈队列(包括双端队列

  • 允许包括null在内的所有元素

  • 非线程安全

当链表用:

这是链表的基本操作了吧

        list.removeFirst();
        list.removeLast();
结果:
[王五]

当栈用:

如果使用到栈,Java也提供了专门的数据结构类
Stack stack = new Stack() ;

        System.out.println(list.pop());
        list.push("赵六");
        System.out.println(list);
结果:
王五
[赵六]

ArrayList 和 LinkedList 的区别

  • 随机高效访问: ArrayList由于基于数组下标,支持随机访问;LinkedList基于链表,不支持随机高效访问
  • 插入、删除:在ArrayList的中间插入或删除一个元素意味着这个列表中剩余的元素都会被移动;而在LinkedList的中间、开头、结尾插入或删除一个元素的开销是固定的
  • 修改:ArrayList支持随机高效访问,可以快速修改目标位置的值,而LinkedList基于链表需要遍历定位。

Vector

Vector集合与AaaryList集合功能上是类似的,区别在于vector是线程安全的,导致的结果就是效率较低

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值