java list详解_java集合List解析[通俗易懂]

java list详解_java集合List解析[通俗易懂]作为一个Developer,Java集合类是我们在工作中运用最多的、最频繁的类。相比于数组(Array)来说,集合类的长度可变,更加适合于现代开发需求;Java集合就像一个容器,可以存储任何类型的数据,也可以结合泛型来存储具体的类型对象。在程序运行时,Java集合可以动态的进行扩展,随着元素的增加而扩大。在Java中,集合类通常存在于java.util包中。Java集合主要由2大体系构成,分别是C…

大家好,又见面了,我是你们的朋友全栈君。

作为一个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三个实现类。

1 List

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

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

其中,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:添加功能booleanadd(E e):向集合中添加一个元素void add(intindex, E element):在指定位置添加元素boolean addAll(Collection extends E>c):向集合中添加一个集合的元素。

B:删除功能voidclear():删除集合中的所有元素

E remove(intindex):根据指定索引删除元素,并把删除的元素返回booleanremove(Object o):从集合中删除指定的元素boolean removeAll(Collection>c):从集合中删除一个指定的集合元素。

C:修改功能

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

D:获取功能

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

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

E:判断功能booleanisEmpty():判断集合是否为空。booleancontains(Object o):判断集合中是否存在指定的元素。boolean containsAll(Collection>c):判断集合中是否存在指定的一个集合中的元素。

F:长度功能intsize():获取集合中的元素个数

G:把集合转换成数组

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

1.2 ArrayList基本操作

public classArrayListTest {public static voidmain(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(newString[]{});//删除功能:

list.remove(0);

list.remove(“world”);

list.clear();

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

}

}

1.3 LinkedList基本操作

public classLinkedListTest {public static voidmain(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());

}

}

原文链接:https://mp.weixin.qq.com/s/wAZ94rkAwuYJoLkKuvtrww

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/156202.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 日期函数months_between的用法[通俗易懂]

    日期函数months_between的用法[通俗易懂]MONTHS_BETWEEN(date1,date2)用于计算date1和date2之间有几个月。如果date1在日历中比date2晚,那么MONTHS_BETWEEN()就返回一个正数。如果date1在日历中比date2早,那么MONTHS_BETWEEN()就返回一个负数。如果date1和date2日期一样,那么MONTHS_BET…

  • c/c++常见面试题

    1.C中static有什么作用(1)隐藏。当我们同时编译多个文件时,所有未加static前缀的全局变量和函数都具有全局可见性,故使用static在不同的文件中定义同名函数和同名变量,而不必担心命

    2021年12月27日
  • 目标检測的图像特征提取之(一)HOG特征

    目标检測的图像特征提取之(一)HOG特征

    2021年11月15日
  • Java的8个Java日志工具[通俗易懂]

    摘要:本文要来分享一些Java程序员最常用的Java日志框架组件。日志工具log4j–最受欢迎的Java日志组件Log4j是一款基于Java的开源日志组件,Log4j功能非常强大,我们可以将日志信息输出到控制台、文件、用户界面,也可以输出到操作系统的事件记录器和一些系统常驻进程。更值得一提的是,Log4j可以允许你非常便捷地自定义日志格式和日志等级,可以帮助开发人员全方位地掌控…

  • pycharm软件界面设置与配置[通俗易懂]

    pycharm软件界面设置与配置[通俗易懂]pycharm软件界面设置与配置pycharm软件介绍:基于eclipse开发的开源软件,适用于整体开发较大项目。负责繁琐的工作细节,节省宝贵的时间,善用以键盘操作为主的编程方法,pycharm完全理解代码的每个面向,依靠它的智能化代码补全,实时检查和快速修复等功能,轻松进行项目导航。其有以下优点:集成python需要的模块,方便开发;语法高亮,快速识别代码,方便开发;代码提示。搭建pycharm软件的开发环境:首先安装JDK(JDK是整个java开发的核心,它包含了JAVA的运行环

  • 完全干净卸载mysql教程

    完全干净卸载mysql教程引言很多人因为第一次安装mysql导致安装错误,或者安装的数据库版本太高,比如mysql8.0版本,出现了很多问题,导致数据库无法使用,或者一些图形界面无法操作,想要卸载,重装稳定的mysql数据库,却是一件麻烦的事情,接下来教大家如何卸载有问题的mysq版本不限l,希望帮到大家,分为五步!个人微信公众号:源码客栈感兴趣可以关注下,更多视频资料教程!第一步卸载Mysql相关的应用程序打开控制面板-》找到程序和功能,看到所有和mysql相关的应用程序,右击卸载掉,有些人可能有workbench

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号