java day026 List接口
1.List接口概述
List接口特征:
- 数据存储可重复。
- 有序。添加顺序和保存顺序一致。
----| ArrayList
可变长数组
----| LinkedList
双向链表
----| Vector
线程安全的可变长数组
2.List常用方法
增:
boollen add(E e);
List接口继承Collection接口 add方法, 使用操作与Collection接口一致,这里的添加采用的【尾插法】
boolean add(int index, E e);
List接口【特有方法】,在指定位置添加指定元素
boolean addAll(Collection<? extends E> c);
LIst接口继承Collection接口方法,使用方法与Collection接口一致,【尾插法】
boolean addAll(int index, Collection<? extends E> c);
List特有方法,在指定位置添加指定集合
删:
E remove(int index);
List特有方法,删除指定下标元素,并返回
boolean remove(Object obj);
继承方法,删除集合中指定元素
boolean removeAll(Collection<?> c);
继承方法,删除当前集合与指定集合重复元素
boolean retainAll(Collection<?> c);
继承方法,保留当前集合与指定集合重复元素
clear();
继承方法,清空集合所有元素
改:
E set(int index, E e);
List特有方法,替换指定元素替换指定下标元素,并返回被替换的元素
查:
int size();
继承方法,获取有效元素个数
boolean isEmpty();
继承方法,判断集合是否为空
boolean contains(Object obj);
继承方法,判断集合是否包含指定元素
boolean containsAll(Collection<?> c);
继承方法,判断集合是否包含指定子集
Object[] toArray();
继承方法,获取集合所有元素的Object数据
E get(int index);
List特有方法,获取指定下标元素
List subList(int fromIndex, int toIndex);
List特有方法,获取当前集合子集,从from下标到to下标结束【不包括toIndex下标元素】
int indexOf(Object obj);
List特有方法,获取指定下标元素第一次出现的位置
int lastIndexOf(Object obj);
List特有方法,获取指定下标元素最后一次出现的位置
3.代码演示
import java.util.ArrayList;
import java.util.List;
public class TestList {
public static void main(String[] args) {
List<String> a1 = new ArrayList<String>();
List<String> a2 = new ArrayList<String>();
a1.add("嘿嘿");
a1.add("嘻嘻");
a1.add("哈哈");
a1.add("咳咳");
a1.add("呸呸");
a2.add("啊啊");
//将a2集合中的元素加到a1中去
a1.addAll(a2);
System.out.println(a1);
//在a1下标为2的地方添加元素
a1.add(2, "诶诶");
System.out.println(a1);
在a1下标为2的地方添加集合
a1.addAll(2, a2);
System.out.println(a1);
//删除a1下标为4的元素
a1.remove(4);
System.out.println(a1);
//删除名为“呸呸”的元素
a1.remove("呸呸");
System.out.println(a1);
//删除a1中所有a2集合元素
a1.removeAll(a2);
System.out.println(a1);
//保留a1与a2相同的元素
a1.addAll(a2);
a1.retainAll(a2);
System.out.println(a1);
//清空元素
a1.clear();
System.out.println(a1);
}
}
/*
输出结果:
[嘿嘿, 嘻嘻, 哈哈, 咳咳, 呸呸, 啊啊]
[嘿嘿, 嘻嘻, 诶诶, 哈哈, 咳咳, 呸呸, 啊啊]
[嘿嘿, 嘻嘻, 啊啊, 诶诶, 哈哈, 咳咳, 呸呸, 啊啊]
[嘿嘿, 嘻嘻, 啊啊, 诶诶, 咳咳, 呸呸, 啊啊]
[嘿嘿, 嘻嘻, 啊啊, 诶诶, 咳咳, 啊啊]
[嘿嘿, 嘻嘻, 诶诶, 咳咳]
[啊啊]
[]
*/
import java.util.ArrayList;
import java.util.List;
public class TestList2 {
public static void main(String[] args) {
List<String> a1 = new ArrayList<String>();
List<String> a2 = new ArrayList<String>();
a1.add("嘿嘿");
a1.add("嘻嘻");
a1.add("哈哈");
a1.add("咳咳");
a1.add("呸呸");
a2.add("啊啊");
System.out.println(a1);
//将下标为2的元素替换,并返回被替换的元素
String str = a1.set(2, "我晕");
System.out.println(str);
System.out.println(a1);
//集合有效元素个数
System.out.println(a1.size());
//集合是否为空
System.out.println(a1.isEmpty());
//集合是否包含指定元素
System.out.println(a1.contains("嘿嘿"));
//集合是否包含指定集合
System.out.println(a1.containsAll(a2));
//将集合数据返回为Object数组
Object[] obj = a1.toArray();
for (int i = 0; i < obj.length; i++) {
System.out.println(obj[i]);
}
//获取集合的子集
List<String> aa = a1.subList(2, 4);
System.out.println(aa);
//获取指定下标元素
String s = a1.get(1);
System.out.println(s);
a1.addAll(a1);
System.out.println(a1);
int i = a1.indexOf("嘿嘿");
int j = a1.lastIndexOf("嘿嘿");
System.out.println("嘿嘿第一次出现的下标:" + i + " 嘿嘿最后一次出现的下标:" + j);
}
}
/*
输出结果:
[嘿嘿, 嘻嘻, 哈哈, 咳咳, 呸呸]
哈哈
[嘿嘿, 嘻嘻, 我晕, 咳咳, 呸呸]
5
false
true
false
嘿嘿
嘻嘻
我晕
咳咳
呸呸
[我晕, 咳咳]
嘻嘻
[嘿嘿, 嘻嘻, 我晕, 咳咳, 呸呸, 嘿嘿, 嘻嘻, 我晕, 咳咳, 呸呸]
嘿嘿第一次出现的下标:0 嘿嘿最后一次出现的下标:5
*/
4.ArrayList概述
ArrayList是Java集合中很重要的一个组装,其底层保存数据的是一个Object数组。
需要了解的两个成员方法:
ensureCapacity();
判断方法,判断当前底层数组是否满足当前操作的需求
trimToSize();
节省空间,将底层数组缩容至有效元素个数
ArrayList细节问题
-
默认容量 private static final int DEFAULT_CAPACITY = 10;
-
MAX_ARRAY_SIZE ==> Integer.MAX_VALUE - 8;
这里的-8是为了给数组中的属性预留内存空间
ArrayList效率问题
ArrayList特征:
增删慢,查询快!