Java:List接口

概述

1.List接口继承Collection接口;

2.该接口属于数据结构中的线性结构,用户可以根据元素的整数索引来访问元素;

List接口实现类

1.ArrayList(数组线性表)

a.List 接口的实现类。其内部基于一个大小可变数组来存储

b.允许存储 null 元素

2.LinkedList(双向链表)

a.List 接口的链接列表实现类

b.允许存储 null 元素

3.Vector(向量)

a.功能和ArrayList一样

b.线程安全

4.Stack(栈)

a. 表示后进先出(LIFO)的对象堆栈

List接口常用方法

常用方法

1.add(Object element) 向列表的尾部添加指定的元素

2.size()  返回列表中的元素个数

3.get(int  index)   返回列表中指定位置的元素,index从0开始

4.add(int index, Object element)  在列表的指定位置插入指定元素

5.set(int i, Object element) 将索引i位置元素替换为元素element并返回被替换的元素。

6.clear()  从列表中移除所有元素

7.isEmpty()  判断列表是否包含元素,不包含元素则返回 true,否则返回false

8.iterator()  返回按适当顺序在列表的元素上进行迭代的迭代器

9.contains(Object o)  如果列表包含指定的元素,则返回 true。

10.remove(int  index)  移除列表中指定位置的元素,并返回被删元素

11.remove(Object o)  移除集合中第一次出现的指定元素,移除成功返回true,否则返回false。

以ArrayList实现类为例演示List接口方法:

List接口方法演示

1.add(Object element) 向列表的尾部添加指定的元素

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

   get(int  index)   返回列表中指定位置的元素,index从0开始

注:<String>表示泛型,用于限定该集合存的是数组类型的数据。

2.add(int index, Object element)  在列表的指定位置(从0开始)插入指定元素

蓝框:普通for循环遍历List集合

红框:加强for循环遍历List集合

3.set(int i, Object element) 使用元素element替换索引i位置的元素,并返回被替换的元素。

注:将集合中第一个元素的元素值设置为“李四3

4.clear()  从列表中移除所有元素

   isEmpty()  判断列表是否包含元素,不包含元素则返回 true,否则返回false

红框:判断列表是否包含元素

蓝框:从列表中移除所有元素

5.iterator()  返回按适当顺序在列表的元素上进行迭代的迭代器

注:<String>表示泛型,限定该遍历器中元素的数据类型

6.contains(Object o)  如果列表包含指定的元素,则返回 true。当且仅当List集合中包含满足(o==null ? e==null : o.equals(e))条件的元素e时才返回true

(o==null ? e==null : o.equals(e))解释:

说明:o指传入方法的具体值,e指集合中的某一个元素,该三目表达式有以下四种情形:

⑴如果o的值为null,则只有集合中存在null元素才会返回true;

⑵如果o为String类型的对象,则只有集合中存在满足o.equals(e)条件的元素e时才会返回true ,其实质是运行时类型相同的前提下比较两者字符串是否完全相同

⑶如果o为基本数据类型包装类对象,则只有集合中存在满足o.equals(e)条件的元素e时才会返回true,其实质是在两者运行时类型相同的前提下比较两者的值是否相等

⑷如果o为自定义类类型对象,则只有集合中存在满足o.equals(e)条件的元素e时才会返回true,其实质是在两者运行时类型相同且自定义类没有重写equals方法的前提下比较两者的地址是否相等。

注:判断集合中是否包含“张三”字符串

 7.remove(int  index)  移除列表中指定位置的元素,并返回被删元素,删除位置后面的元素(如果有)向前移动。

注:删除第一个位置的元素值

8.remove(Object o) 从List集合中移除第一次出现的指定元素,移除成功返回true,否则返回false。当且仅当List集合中含有满足(o==null ? get(i)==null : o.equals(get(i)))条件的最低索引i的元素时才会返回true。

LinkedList新增方法

LinkedList除了实现List提供的抽象方法外,还增加了一些方法:

⑴void  addFirst(Object o) 将指定数据元素插入此集合的开头,原来元素(如果有)后移;

⑵void addLast(Object o) 将指定数据元素插入此集合的结尾

⑶Object getFirst() 返回此集合的第一个数据元素

⑷Object getLast() 返回此集合的最后一个数据元素

⑸Object removeFirst() 移除并返回集合表的第一个数据元素

⑹Object removeLast() 移除并返回集合表的最后一个数据元素

ArrayList线性表与数组的区别

声明ArrayList线性表与数组的区别:

1.两者本质的区别在与长度是否可变:数组是定长有序的线性集合;线性表是任意长度的线性集合;

2.两者添加元素的方式不同:数组使用下标:array [index];数组线性表使用add方法:list.add(value)

3.两者获取元素的方式不同:数组使用下标:array [index];数组线性表使用get方法:list.get(index)

4.获取长度的方式不同:数组使用length属性;数组线性表使用size()方法

ArrayList和LinkedList区别:

ArrayList是基于动态数组存储的数组线性表数据结构,使用连续的内存单元存储数据元素,对元素的遍历速度较快,LinkedList在遍历集合元素方面比较慢,因为在遍历过程中需要找寻下个元素的地址;

LinkedList是使用指针关联的双向链表数据结构,前一个元素都记录了后一个元素的地址,后一个元素也记录了前一个元素的地址,当添加或删除数据元素时,LinkedList比较快,因为ArrayList需要移动其被添加(或删除)元素后面(最后一个除外)的全部元素;

Vector与ArrayList区别

Vector是线程安全(synchronized)的,而ArrayList是非线程安全的,所以调用方法名相同的方法时,Vector对象要比ArrayList对象稍慢一些。

猜你喜欢

转载自blog.csdn.net/DragonGirI/article/details/83387331