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)


相关推荐

  • Enterprise Library概述

    Enterprise Library概述Webcast网络讲座:企业库系统课程企业库(EnterpriseLibrary)是微软的模式与实践(Patterns&Practices)的下一代应用程序块(ApplicationBlocks)。该企业库的设计思想是为了协助开发商解决企业级应用开发过程中所面临的一系列共性的问题,如安全(Security)、日志(Logging)、数据访问(DataA…

    2022年10月20日
  • 备份集中的数据库备份与现有的数据库不同解决方法

    备份集中的数据库备份与现有的数据库不同解决方法以前一直使用SQLServer2000,现在跟潮流都这么紧,而且制定要求使用SQLServer2005,就在现在的项目中使用它了。对于SQLServer2005,有几个地方是要注意的,比方在还原数据库时,不像2000里边将数据库和文件区分的很细,统一均为文件,这就使还原的数据库文件制定为.bak。那么想还原2000的数据库(备份数据库文件,无后缀名的),就需要自己手工选择。…

  • linux批量文件重命名命令_shell重命名文件指令

    linux批量文件重命名命令_shell重命名文件指令SYNOPSISrenamefromtofile…from表示需要替换或者处理的字符,比如文件的扩展名,文件名.to表示对from处理之后的结果。file表示目标文件。[[emailprotected]tmp]#lshello_10_2016-03-17.loghello_4_2016-03-17.loghello_8_2016-03-17.loghello_1_20…

  • web服务器有哪几种语言组合_服务器

    web服务器有哪几种语言组合_服务器  如今的Web服务器有很多种,大家在做项目的时候根据自己的需求进行灵活的选择。下面小编就给大家分享一下目前都有哪些Web服务器。  1.Apache  Apache也被叫做httpd服务器,是目前使用最广泛的web服务器,它被应用于各种平台之中。Apache刚开始被推出的时候有很多的缺陷,如今已经被修复的越来越完善,如果你是web服务器的钻研者,小编建议你一定要学习一下Apache的使用。  2.Nginx  Nginx是Linux平台下的优秀Web服务器,小编以前用过这个服务器,它…

  • 经典算法—冒泡排序

    经典算法—冒泡排序原文链接:冒泡排序—经典排序算法|逍遥游冒泡排序(BubbleSort)以其“在排序过程中相邻元素不断交换,一些元素慢慢被换到最后,看起来就像是元素在冒泡一样”而得名,是一种简单的基于关键词比较的排序算法。算法原理冒泡排序的原理(以递增序为例)是每次从头开始依次比较相邻的两个元素,如果后面一个元素比前一个要大,说明顺序不对,则将它们交换,本次循环完毕之后再次从…

  • 图书销售管理系统概要设计,系统数据结构设计分工

    图书销售管理系统概要设计,系统数据结构设计分工完成人:千城墨白(20160401095)无法无天(20160401115)系统数据结构设计1、逻辑结构设计要点2、物理结构设计要点(1)系统所用到所有数据均存在服务器端,存于SQLServer服务器中;(2)系统界面的显示属性,如字体属性,样式等使用CSS统一界面;(3)系统界面中使用的相关图片需要保存在服务…

发表回复

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

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