JAVA -- List ArrayList LinkedList
List接口
1.概述
有序的 collection(也称为序列)。此接口的用户可以对列表中每个元素的插入位置进行精确地控制。用户可以根据元素的整数索引(在列表中的位置)访问元素,并搜索列表中的元素。 与 set 不同,列表通常允许重复的元素。更确切地讲,列表通常允许满足 e1.equals(e2)
的元素对 e1 和 e2,并且如果列表本身允许 null 元素的话,通常它们允许多个 null 元素。
2.特点
List中的元素都是有下标的,并且是有序的 允许存放重复数据
3.主要方法
方法摘要 返回值 方法 方法描述 boolean
add(E e)
向列表的尾部添加指定的元素 void
add(int index, E element)
在列表的指定位置插入指定元素 boolean
addAll(Collection<? extends E> c)
添加指定 collection 中的所有元素到此列表的结尾 boolean
addAll(int index, Collection<? extends E> c)
将指定 collection 中的所有元素都插入到列表中的指定位置 void
clear()
从列表中移除所有元素 boolean
contains(Object o)
如果列表包含指定的元素,则返回 true
。 boolean
containsAll(Collection<?> c)
如果列表包含指定 collection 的所有元素,则返回 true
。 boolean
equals(Object o)
比较指定的对象与列表是否相等。 E
get(int index)
返回列表中指定位置的元素。 int
hashCode()
返回列表的哈希码值。 int
indexOf(Object o)
返回此列表中第一次出现的指定元素的索引;如果此列表不包含该元素,则返回 -1。 boolean
isEmpty()
如果列表不包含元素,则返回 true
。 Iterator<E>
iterator()
返回按适当顺序在列表的元素上进行迭代的迭代器。 int
lastIndexOf(Object o)
返回此列表中最后出现的指定元素的索引;如果列表不包含此元素,则返回 -1。 ListIterator<E>
listIterator()
返回此列表元素的列表迭代器(按适当顺序)。 ListIterator<E>
listIterator(int index)
返回列表中元素的列表迭代器(按适当顺序),从列表的指定位置开始。 E
remove(int index)
移除列表中指定位置的元素(可选操作)。 boolean
remove(Object o)
从此列表中移除第一次出现的指定元素(如果存在)(可选操作)。 boolean
removeAll(Collection<?> c)
从列表中移除指定 collection 中包含的其所有元素(可选操作)。 boolean
retainAll(Collection<?> c)
仅在列表中保留指定 collection 中所包含的元素(可选操作)。(求交集) E
set(int index, E element)
用指定元素替换列表中指定位置的元素(可选操作)。 int
size()
返回列表中的元素数。 List<E>
subList(int fromIndex, int toIndex)
返回列表中指定的 fromIndex
(包括 )和 toIndex
(不包括)之间的部分视图。(截取) Object[]
toArray()
返回按适当顺序包含列表中的所有元素的数组(从第一个元素到最后一个元素)。(转数组)
4.List 接口测试
package cn. tedu. collection;
import java. util. ArrayList;
import java. util. Arrays;
import java. util. List;
public class TestList {
public static void main ( String[ ] args) {
List< String> list = new ArrayList < > ( ) ;
list. add ( "大娃" ) ;
list. add ( "二娃" ) ;
list. add ( "三娃" ) ;
list. add ( "四娃" ) ;
list. add ( "五娃" ) ;
list. add ( "六娃" ) ;
list. add ( "七娃" ) ;
System. out. println ( list) ;
System. out. println ( list. contains ( "三娃" ) ) ;
System. out. println ( list. equals ( "五娃" ) ) ;
System. out. println ( list. isEmpty ( ) ) ;
System. out. println ( list. remove ( "七娃" ) ) ;
System. out. println ( list. size ( ) ) ;
System. out. println ( Arrays. toString ( list. toArray ( ) ) ) ;
list. add ( "小蝴蝶" ) ;
list. add ( 1 , "蛇精" ) ;
list. add ( 3 , "小蝴蝶" ) ;
System. out. println ( list) ;
System. out. println ( list. indexOf ( "小蝴蝶" ) ) ;
System. out. println ( list. lastIndexOf ( "小蝴蝶" ) ) ;
System. out. println ( list. remove ( 5 ) ) ;
System. out. println ( list) ;
System. out. println ( list. get ( 3 ) ) ;
System. out. println ( list. set ( 7 , "蝎子精" ) ) ;
System. out. println ( list) ;
List< String> list2 = new ArrayList < > ( ) ;
list2. add ( "1" ) ;
list2. add ( "2" ) ;
list2. add ( "3" ) ;
list2. add ( "4" ) ;
System. out. println ( list2) ;
System. out. println ( list. addAll ( list2) ) ;
System. out. println ( list) ;
System. out. println ( list. addAll ( 1 , list2) ) ;
System. out. println ( list) ;
System. out. println ( list. containsAll ( list2) ) ;
System. out. println ( list. removeAll ( list2) ) ;
System. out. println ( list) ;
}
}
5.List 接口迭代方式
package cn. tedu. collection;
import java. util. ArrayList;
import java. util. Iterator;
import java. util. List;
import java. util. ListIterator;
public class TestList2 {
public static void main ( String[ ] args) {
List< String> list = new ArrayList < > ( ) ;
list. add ( "喜羊羊" ) ;
list. add ( "懒羊羊" ) ;
list. add ( "美羊羊" ) ;
list. add ( "暖羊羊" ) ;
list. add ( "沸羊羊" ) ;
list. add ( "慢羊羊" ) ;
System. out. println ( list) ;
System. out. println ( "********方式一:普通for循环********" ) ;
for ( int i = 0 ; i < list. size ( ) ; i++ ) {
System. out. println ( list. get ( i) ) ;
}
System. out. println ( "********方式二:增强for循环********" ) ;
for ( String s : list) {
System. out. println ( s) ;
}
System. out. println ( "********方式三:iterator********" ) ;
Iterator< String> it = list. iterator ( ) ;
while ( it. hasNext ( ) ) {
System. out. println ( it. next ( ) ) ;
}
System. out. println ( "********方式四:listIterator********" ) ;
ListIterator< String> it2 = list. listIterator ( ) ;
while ( it2. hasNext ( ) ) {
System. out. println ( it2. next ( ) ) ;
}
}
}
ArrayList
6.概述
List 接口的大小可变数组的实现。实现了所有可选列表操作,并允许包括 null 在内的所有元素。除了实现 List 接口外,此类还提供一些方法来操作内部用来存储列表的数组的大小。
7.特点
底层结构是数组,查询快,增删慢,适合查询较多的情况 底层数组的默认初始容量大小是10,如果不够会以1.5倍扩容
private static final int DEFAULT_CAPACITY = 10 ;
private void grow ( int minCapacity) {
int oldCapacity = elementData. length;
int newCapacity = oldCapacity + ( oldCapacity >> 1 ) ;
if ( newCapacity - minCapacity < 0 )
newCapacity = minCapacity;
if ( newCapacity - MAX_ARRAY_SIZE > 0 )
newCapacity = hugeCapacity ( minCapacity) ;
elementData = Arrays. copyOf ( elementData, newCapacity) ;
}
8.ArrayList测试
package cn. tedu. list;
import java. util. ArrayList;
import java. util. Iterator;
import java. util. ListIterator;
public class TestArrayList {
public static void main ( String[ ] args) {
ArrayList< Integer> list = new ArrayList < > ( ) ;
list. add ( 100 ) ;
list. add ( 200 ) ;
list. add ( 300 ) ;
list. add ( 400 ) ;
list. add ( 400 ) ;
list. add ( 300 ) ;
System. out. println ( list) ;
System. out. println ( list. contains ( "100" ) ) ;
System. out. println ( list. contains ( 100 ) ) ;
System. out. println ( list. isEmpty ( ) ) ;
System. out. println ( list. get ( 0 ) ) ;
System. out. println ( list. indexOf ( 400 ) ) ;
System. out. println ( list. lastIndexOf ( 400 ) ) ;
System. out. println ( list. remove ( 1 ) ) ;
System. out. println ( list. remove ( Integer. valueOf ( 300 ) ) ) ;
System. out. println ( list) ;
System. out. println ( list. set ( 2 , 777 ) ) ;
System. out. println ( list) ;
System. out. println ( list. size ( ) ) ;
System. out. println ( "********for循环********" ) ;
for ( int i = 0 ; i < list. size ( ) ; i++ ) {
System. out. println ( list. get ( i) ) ;
}
System. out. println ( "********foreach循环********" ) ;
for ( Integer i : list) {
System. out. println ( i) ;
}
System. out. println ( "********iterator********" ) ;
Iterator< Integer> it = list. iterator ( ) ;
while ( it. hasNext ( ) ) {
System. out. println ( it. next ( ) ) ;
}
System. out. println ( "********listIterator********" ) ;
ListIterator< Integer> it2 = list. listIterator ( ) ;
while ( it2. hasNext ( ) ) {
System. out. println ( it2. next ( ) ) ;
}
System. out. println ( "********listIterator逆序遍历方式一********" ) ;
while ( it2. hasNext ( ) ) {
it2. next ( ) ;
}
while ( it2. hasPrevious ( ) ) {
System. out. println ( it2. previous ( ) ) ;
}
System. out. println ( "********listIterator逆序遍历方式二********" ) ;
for ( it2 = list. listIterator ( ) ; it2. hasNext ( ) ; ) {
it2. next ( ) ;
}
for ( ; it2. hasPrevious ( ) ; ) {
System. out. println ( it2. previous ( ) ) ;
}
}
}
LinkedList
9.概述及特点
LinkedList
底层结构是链表,不连续的内存空间,查询慢,增删快,适合增删场景较多的情况链表结构针对查询而言,首尾操作比较快,中间操作比较慢
10.LinkedList测试
package cn. tedu. list;
import java. util. LinkedList;
public class TestLinkedList {
public static void main ( String[ ] args) {
LinkedList< String> list = new LinkedList < > ( ) ;
list. add ( "孙悟空" ) ;
list. add ( "猪八戒" ) ;
list. add ( "沙和尚" ) ;
list. add ( "唐三藏" ) ;
list. add ( "白龙马" ) ;
System. out. println ( list) ;
list. addFirst ( "玉兔精" ) ;
list. addLast ( "孔雀精" ) ;
System. out. println ( list) ;
System. out. println ( list. getFirst ( ) ) ;
System. out. println ( list. getLast ( ) ) ;
System. out. println ( list. removeFirst ( ) ) ;
System. out. println ( list. removeLast ( ) ) ;
System. out. println ( list) ;
LinkedList< String> list2 = new LinkedList < > ( ) ;
list2. add ( "水浒传" ) ;
list2. add ( "西游记" ) ;
list2. add ( "三国演义" ) ;
list2. add ( "红楼梦" ) ;
System. out. println ( list2) ;
System. out. println ( list2. element ( ) ) ;
System. out. println ( list2) ;
System. out. println ( list2. peek ( ) ) ;
System. out. println ( list2. peekFirst ( ) ) ;
System. out. println ( list2) ;
System. out. println ( list2. peekLast ( ) ) ;
System. out. println ( list2) ;
System. out. println ( list2. offer ( "聊斋志异" ) ) ;
System. out. println ( list2. offerFirst ( "斗罗大陆" ) ) ;
System. out. println ( list2. offerLast ( "斗破苍穹" ) ) ;
System. out. println ( list2) ;
System. out. println ( list2. poll ( ) ) ;
System. out. println ( list2) ;
System. out. println ( list2. pollFirst ( ) ) ;
System. out. println ( list2. pollLast ( ) ) ;
System. out. println ( list2) ;
}
}