java list的作用_Java中的List详解(含使用方法,看完必会)

Java集合List详解

简介

最近在letcode刷题的时候,发现在使用java编写程序的时候总会遇到List,LinkedList,Queue。于是学习了一下,记录一下List到底是个什么东西。

Java集合

作为一个Developer,Java集合类是我们在工作中运用最多的、最频繁的类。相比于数组(Array)来说,集合类的长度可变,更加适合于现代开发需求;

Java集合就像一个容器,可以存储任何类型的数据,也可以结合泛型来存储具体的类型对象。在程序运行时,Java集合可以动态的进行扩展,随着元素的增加而扩大。在Java中,集合类通常存在于java.util包中。

Java集合主要由2大体系构成,分别是Collection体系和Map体系,其中Collection和Map分别是2大体系中的顶层接口。

Collection主要有三个子接口,分别为List(列表)、Set(集)、Queue(队列)。其中,List、Queue中的元素有序可重复,而Set中的元素无序不可重复;

List中主要有ArrayList、LinkedList两个实现类;Set中则是有HashSet实现类;而Queue是在JDK1.5后才出现的新集合,主要以数组和链表两种形式存在。

Map同属于java.util包中,是集合的一部分,但与Collection是相互独立的,没有任何关系。Map中都是以key-value的形式存在,其中key必须唯一,主要有HashMap、HashTable、TreeMap三个实现类。

a5fd717574d121d6da9c1d5faac7c5de.png

1 LIST

在Collection中,List集合是有序的,Developer可对其中每个元素的插入位置进行精确地控制,可以通过索引来访问元素,遍历元素。

在List集合中,我们常用到ArrayList和LinkedList这两个类。

ArrayList

其中,ArrayList底层通过数组实现,随着元素的增加而动态扩容。而LinkedList底层通过链表来实现,随着元素的增加不断向链表的后端增加节点。

ArrayList是Java集合框架中使用最多的一个类,是一个数组队列,线程不安全集合。

它继承于AbstractList,实现了List, RandomAccess, Cloneable, Serializable接口。

(1)ArrayList实现List,得到了List集合框架基础功能;

(2)ArrayList实现RandomAccess,获得了快速随机访问存储元素的功能,RandomAccess是一个标记接口,没有任何方法;

(3)ArrayList实现Cloneable,得到了clone()方法,可以实现克隆功能;

(4)ArrayList实现Serializable,表示可以被序列化,通过序列化去传输,典型的应用就是hessian协议。

它具有如下特点:

容量不固定,随着容量的增加而动态扩容

有序集合(插入的顺序==输出的顺序)

插入的元素可以为NULL

增删改查效率更高

线程不安全

LinkedList

LinkedList是一个双向链表,每一个节点都拥有指向前后节点的引用。相比于ArrayList来说,LinkedList的随机访问效率更低。

它继承AbstractSequentialList,实现了List, Deque, Cloneable, Serializable接口。

(1)LinkedList实现List,得到了List集合框架基础功能;

(2)LinkedList实现Deque,Deque 是一个双向队列,也就是既可以先入先出,又可以先入后出,说简单些就是既可以在头部添加元素,也可以在尾部添加元素;

(3)LinkedList实现Cloneable,得到了clone()方法,可以实现克隆功能;

(4)LinkedList实现Serializable,表示可以被序列化,通过序列化去传输,典型的应用就是hessian协议。

1.1 List常用方法

A:添加功能

boolean add(E e):向集合中添加一个元素

void add(int index, E element):在指定位置添加元素

boolean addAll(Collection extends E> c):向集合中添加一个集合的元素。

B:删除功能

void clear():删除集合中的所有元素

E remove(int index):根据指定索引删除元素,并把删除的元素返回

boolean remove(Object o):从集合中删除指定的元素

boolean removeAll(Collection> c):从集合中删除一个指定的集合元素。

C:修改功能

E set(int index, E element):把指定索引位置的元素修改为指定的值,返回修改前的值。

D:获取功能

E get(int index):获取指定位置的元素

Iterator iterator():就是用来获取集合中每一个元素。

E:判断功能

boolean isEmpty():判断集合是否为空。

boolean contains(Object o):判断集合中是否存在指定的元素。

boolean containsAll(Collection> c):判断集合中是否存在指定的一个集合中的元素。

F:长度功能

int size():获取集合中的元素个数

G:把集合转换成数组

Object[] toArray():把集合变成数组。

1.2 ArrayList基本操作

public class ArrayListTest {

public static void main(String[] agrs){

//创建ArrayList集合:

List list = new ArrayList();

System.out.println("ArrayList集合初始化容量:"+list.size());

//添加功能:

list.add("Hello");

list.add("world");

list.add(2,"!");

System.out.println("ArrayList当前容量:"+list.size());

//修改功能:

list.set(0,"my");

list.set(1,"name");

System.out.println("ArrayList当前内容:"+list.toString());

//获取功能:

String element = list.get(0);

System.out.println(element);

//迭代器遍历集合:(ArrayList实际的跌倒器是Itr对象)

Iterator iterator = list.iterator();

while(iterator.hasNext()){

String next = iterator.next();

System.out.println(next);

}

//for循环迭代集合:

for(String str:list){

System.out.println(str);

}

//判断功能:

boolean isEmpty = list.isEmpty();

boolean isContain = list.contains("my");

//长度功能:

int size = list.size();

//把集合转换成数组:

String[] strArray = list.toArray(new String[]{});

//删除功能:

list.remove(0);

list.remove("world");

list.clear();

System.out.println("ArrayList当前容量:"+list.size());

}

}

1.3LinkedList基本操作

public class LinkedListTest {

public static void main(String[] agrs){

List linkedList = new LinkedList();

System.out.println("LinkedList初始容量:"+linkedList.size());

//添加功能:

linkedList.add("my");

linkedList.add("name");

linkedList.add("is");

linkedList.add("jiaboyan");

System.out.println("LinkedList当前容量:"+ linkedList.size());

//修改功能:

linkedList.set(0,"hello");

linkedList.set(1,"world");

System.out.println("LinkedList当前内容:"+ linkedList.toString());

//获取功能:

String element = linkedList.get(0);

System.out.println(element);

//遍历集合:(LinkedList实际的跌倒器是ListItr对象)

Iterator iterator = linkedList.iterator();

while(iterator.hasNext()){

String next = iterator.next();

System.out.println(next);

}

//for循环迭代集合:

for(String str:linkedList){

System.out.println(str);

}

//判断功能:

boolean isEmpty = linkedList.isEmpty();

boolean isContains = linkedList.contains("jiaboyan");

//长度功能:

int size = linkedList.size();

//删除功能:

linkedList.remove(0);

linkedList.remove("jiaboyan");

linkedList.clear();

System.out.println("LinkedList当前容量:" + linkedList.size());

}

}

//删除功能:

linkedList.remove(0);

linkedList.remove("jiaboyan");

linkedList.clear();

System.out.println("LinkedList当前容量:" + linkedList.size());

}

}

总结

只要自己把代码走一遍,测试一下数据,基本上就能掌握List的使用方法了,祝各位在学习路上一路畅通!

  • 5
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值