Java基础(七):初识Java的集合

文章介绍了Java中的集合类,主要对比分析了ArrayList和LinkedList两种List实现。ArrayList基于数组,适合随机访问但插入删除效率低,而LinkedList基于链表,插入删除高效但随机访问慢。选择集合类应根据操作频率和需求来决定。
摘要由CSDN通过智能技术生成


前言

Java中的集合是一种非常重要的数据结构,它们可以被用于存储和操作一组对象。在Java中,集合类被分为两种类型:一种是基于接口的集合,另一种是基于类的集合。在本篇blog中,我们将会对比分析Java中的三个常用集合类:List、ArrayList和LinkedList。


一、集合类的分类

Java中的集合类可以被分为两种类型:一种是基于接口的集合,另一种是基于类的集合

1.基于接口的集合

Java中的基于接口的集合包括List、Set和Map三种类型,它们都是Java集合框架中最常用的接口类型。

(1)List:List是一种有序的集合,允许重复元素。List中的元素可以根据索引访问和操作,常用的实现类有ArrayList、LinkedList和Vector。

(2)Set:Set是一种不允许重复元素的集合,常用的实现类有HashSet、LinkedHashSet和TreeSet。

(3)Map:Map是一种键值对的集合,每个元素包含一个键和一个值,常用的实现类有HashMap、LinkedHashMap和TreeMap。

2. 基于类的集合

Java中的基于类的集合包括ArrayListLinkedList、HashSet、LinkedHashSet、TreeSet、HashMap、LinkedHashMap和TreeMap等实现类。这些类都实现了相应的接口,提供了一套完整的方法集合。

二、List集合类的介绍

List是Java集合框架中最基本的一种数据结构,它可以存储一组有序的对象,并且允许重复元素。List的常用实现类有ArrayList、LinkedList和Vector。

1.ArrayList

ArrayList是List接口的实现类之一,它是基于数组实现的可变长数组,可以动态添加和删除元素并且支持随机访问。由于ArrayList是基于数组实现的,所以它的元素在内存中是连续存储的,这样可以提高访问效率,但是在插入或删除元素时需要移动后续元素,因此效率较低。

ArrayList常用方法

add(E e): 将指定的元素添加到列表的末尾

add(int index, E element): 在列表的指定位置插入指定元素

get(int index): 返回列表中指定位置的元素

set(int index, E element): 用指定元素替换列表中指定位置的元素

remove(Object o): 从列表中删除第一次出现的指定元素

remove(int index): 删除列表中指定位置的元素

size(): 返回列表中元素的数量


下面是一个ArrayList的示例代码:

ArrayList<String> list = new ArrayList<String>();
list.add("apple");
list.add("banana");
list.add("orange");
System.out.println(list.get(0)); // 输出 "apple"
list.remove("orange");
System.out.println(list.size()); // 输出 "2"

2.LinkedList

LinkedList也是List接口的实现类之一,它是基于双向链表实现的,每个元素都包含一个指向前驱和后继元素的指针,因此在插入或删除元素时只需要改变相邻元素的指针指向,效率较高。但是在访问指定位置的元素时需要遍历链表,效率较低。

LinkedList常用方法

add(E e): 将指定的元素添加到列表的末尾

add(int index, E element): 在列表的指定位置插入指定元素

get(int index): 返回列表中指定位置的元素

set(int index, E element): 用指定元素替换列表中指定位置的元素

remove(Object o): 从列表中删除第一次出现的指定元素

remove(int index): 删除列表中指定位置的元素

size(): 返回列表中元素的数量


下面是一个LinkedList的示例代码:

LinkedList list = new LinkedList();
list.add("apple");
list.add("banana");
list.add("orange");
System.out.println(list.get(0)); // 输出 "apple"
list.remove("orange");
System.out.println(list.size()); // 输出"2"

三、ArrayList和LinkedList类对比分析

1.添加和删除元素

在添加和删除元素的操作中,LinkedList的效率要优于ArrayList,因为ArrayList需要将后续元素向后移动或向前移动,而LinkedList只需要改变相邻元素的指针指向即可。因此,在需要频繁添加和删除元素的场景中,建议使用LinkedList

2.随机访问元素

在随机访问元素的操作中,ArrayList的效率要优于LinkedList,因为ArrayList的元素在内存中是连续存储的,可以通过下标快速访问元素,而LinkedList需要遍历链表才能访问指定位置的元素。因此,在需要频繁随机访问元素的场景中,建议使用ArrayList

3.内存占用

由于ArrayList是基于数组实现的,因此它需要预先分配一定大小的内存空间,如果存储的元素数量超过了该空间大小,就需要重新分配更大的内存空间,并将原有数据复制到新的内存空间中。而LinkedList则不需要预先分配内存空间,每个元素只需要存储它的值和它前后元素的指针,因此内存占用相对较小。因此,在需要存储大量元素的场景中,建议使用LinkedList


四、总结

在实际应用中,我们需要根据具体场景和需求选择合适的集合类来使用。如果需要频繁添加和删除元素,建议使用LinkedList;如果需要频繁随机访问元素,建议使用ArrayList;如果需要存储大量元素,建议使用LinkedList。同时,我们应该熟练掌握集合类的常用方法,以便灵活使用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值