一大波Java来袭(八)——Java集合之List接口

本文主要讲Collection接口之一List接口及其实现类。

List集合,特点:有序,可重复

与上文中Set不同的是,List集合是有序的,这种顺序表现在:通过索引的形式,记录了元素的添加顺序。

List接口的实现类,如图所示:

1. ArrayList 与数组有关吗?

2.Vector

3.LinkedList

上文研究Set集合的时候,了解到LinkedHashSet是通过链表的形式将hash算法存储的元素链接起来,这里是不是将:带有索引的List集合也通过链表的形式,连接起来呢?

从图中看出,实现了deque接口,猜测应该会实现双向队列的效果把。

待我慢慢道来.......

一、List接口和ListIterator接口

List接口的特点在于通过“索引”记录了元素的添加顺序。因此相比较起父接口Collection而言,添加了一些根据索引操作集合元素的方法。

额外添加了专门操作List的方法:listIterator()

listIterator与Iterator对比:listIterator增加了向前迭代的功能(Iterator只能向后迭代),增加了通过add方法向List集合中添加元素(Iterator只能删除元素)

public class TestlistIterator {

	public static void main(String[] args) {
		String[] books = {"englishbook","computerbook","musicbook"};
		List bookList = new ArrayList();
		for (int i = 0; i < books.length; i++) {
			bookList.add(books[i]);
		}
		ListIterator bookListIterator = bookList.listIterator();
		while(bookListIterator.hasNext()){
			System.out.println("book正向迭代:"+bookListIterator.next());
			bookListIterator.add("---------分隔符--------------");
		}
		System.out.println("-------下面开始反向迭代----------------");
		while(bookListIterator.hasPrevious()){
			System.out.println("book反向迭代:"+bookListIterator.previous());
		}
	}

}

结果如下:

二、ArrayList和Vector实现类

1. 相同点:

都是基于数组实现的List类,所以封装了一个动态再分配的Object[]数组。通过属性capacity表示长度,且会自动增长。

若添加大量元素,可使用ensureCapacity一次性添加capacity。甚至是直接指定capacity的大小,从而减少重新分配的次数,提高性能。

2. 不同点:

简单理解为新的ArrayList替代旧的Vector的功能。

ArrayList是线程不安全,Vector线程安全(性能较高,但不建议使用)

Stack是Vector的子类,模拟“栈”数据结构,LIFO。

LinkedList基于链表实现List类,优化顺序访问,特别是:插入、删除,速度非常快。(同时实现Deque接口,双向队列)

三、固定长度的List

操作数据的工具类Arrays.asList(.....)将数组转化为List集合【此时为Arrays内部类ArrayList的实例】

注意:此时长度已经固定了!不可改变

四、性能排名榜

各容器性能对比,主要取决于集合的底层实现,是:数组/链表

插入、删除、迭代时:数组 <
链表。

随机访问:数组 >
链表。(数组,连续内存区)

时间: 2024-12-21 20:40:46

一大波Java来袭(八)——Java集合之List接口的相关文章

“全栈2019”Java第八十九章:接口中能定义内部类吗?

难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第八十九章:接口中能定义内部类吗? 下一章 "全栈2019"Java第九十章:内部类可以向上或向下转型吗? 学习小组 加入同步学习小组,共同交流与进步. 方式一:关注头条号Gorhaf,私信"Java学习小组". 方式二:关注公众号Gorhaf,回复"Java学

一大波资源来袭:工具,源码,职场攻略

又要一年了,不要再做个傻傻的程序员,然后不停的问:为什么技术好.工作认真却还败给那些不如自己的人,觉得很是不公平, No No No,你还修炼的不够,不过听Dev的刘说移动应用开发者要涨工资啦,有木有很幸福的赶脚,还有人说由于科技人才短缺,美国放松了留美毕业生工作政策,但也有其它报道称美国技术类绿卡申请越来越难,奥巴马新宣布的移民新政也不利于留学生的发展,这到底是怎么回事呢?难道在美国的留学生会回来抢国内旭元的饭碗,还是去看看是不是真得吧. 对了,刚才说到修炼不够,我是来送福利的,给你的一大波资

java(八)集合

Map Map<K,V>:Map集合一次添加一对元素,Collection一次添加一个元素. 所以Map集合也称为双列集合,而Collection称为单列集合. 其实Map集合存储的就是键值对. Map集合必须保证键的唯一性. 常用方法:1.添加: value put(key,value):返回前一个和key关联的值,若没有则返回null. 2.删除: void clear():清空map集合. value remove():根据指定的key删除这个键值对. 3.判断 boolean cont

一大波字符来袭!

节目预告: 字符的各种,操作,数据类型新讲 一预热: 重要的事情再重复: int(整数) bool(布尔判断) str(字符串) 新增 : list(列表) :大量的数据凑一块 ,","分隔 ,外套 "[ ] " tuple (元组) :   数据凑一块形成的整体,不能发生变化 , ","分隔 ,外套 "( ) " dict (字典) :  有序的数据凑一块 ,包括key(索引)和value(key对应的数据) , "

“全栈2019”Java第八十三章:内部类与接口详解

难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第八十三章:内部类与接口详解 下一章 "全栈2019"Java第八十四章:接口中嵌套接口详解 学习小组 加入同步学习小组,共同交流与进步. 方式一:关注头条号Gorhaf,私信"Java学习小组". 方式二:关注公众号Gorhaf,回复"Java学习小组&quo

“全栈2019”Java第八十八章:接口中嵌套接口的应用场景

难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第八十八章:接口中嵌套接口的应用场景 下一章 "全栈2019"Java第八十九章:接口中能定义内部类吗? 学习小组 加入同步学习小组,共同交流与进步. 方式一:关注头条号Gorhaf,私信"Java学习小组". 方式二:关注公众号Gorhaf,回复"Java学习

一大波Java来袭(五)——Java集合概述

把"Java集合"比作是容器,可以把多个对象(实际:是对象的引用),扔在容器中. JDK1.5之前,被丢进集合中的对象,会丢失起数据类型.默认为Object类型 JDK1.5之后,不会丢失数据类型,因为引入了"泛型"(作为下文重点) 本文将结合数据结构,重点讲述Java的4种集合体系的功能和用法,并给出不同应用场景改如何选择? 一.同样是用于"存储数据",既可以使用"数组",有可以使用"集合",有什么区别吗

一大波Java来袭(四)String类、StringBuilder类、StringBuffer类对比

本文主要介绍String类.StringBuffer类.StringBuilder类的区别  : 一.概述 (一)String 字符串常量,但是它具有不可变性,就是一旦创建,对它进行的任何修改操作都会创建一个新的字符串对象. (二)StringBuffer 字符串可变量,是线程安全的,和StringBuilder类提供的方法完全相同. 区别在于StringBuffer每个方法中前面添加了"synchronized",保证其是线程安全的. (三)StringBuilder 字符串可变量,

一大波Java来袭(二)异常处理

概要解析: 本章的知识点可以记为:1图+5关键字+先逮小的.后逮大的  一.基础 (一)定义 1.异常 是指在程序运行的时候发生的一些异常事件.良好的程序设计应该在异常发生的时候提供处理异常的方法,使得程序不会因为异常的发生而中断.因此Java提供的用于处理程序中错误的一种机制. 2.抛出异常throw java程序的执行过程中如出现异常事件,可以生成一个异常类对象(封装了异常事件的信息),被提交给java运行时系统. 简单理解为:推卸责任.马路上遇到了交通事故,不需要自己处理,而是拨打110,

一大波Java来袭(三)Java常用类

本文简单介绍集中Java常用类 不同种类的工具用于处理不同的工作.比如:厨房中的工具用于烹饪:农场中的工具用于养殖--对于Java的学习中处理不同的工作也要采用不同的工具.如:处理数学函数问题用Math类.针对文件的操作采用File类--这也充分体现了Java面向对象的特点 一.字符串类(重点理解内存模型) (一)String Java.lang.String字符串常量,具有不可变性. (二)StringBuffer Java.lang.StringBuffer字符串可变量,是线程安全的. (三