1. List概述
- List代表一个元素有序、且可重复的集合,集合中的每个元素都有其对应的顺序索引
- List允许使用重复元素,可以通过索引来访问指定位置的集合元素
- List默认按元素的添加顺序设置元素的索引
- List集合里添加了一些根据索引来操作集合元素的方法
- void add(int index, Object ele)
- boolean addAll(int index, Collection eles)
- Object get(int index)
- int indexOf(Object obj)
- int lastIndexOf(Object obj)
- Object remove(int index)
- Object set(int index, Object ele)
- List subList(int fromIndex, int toIndex)
2. 示例代码
package test.com.atguigu.javase.lesson7;
import com.atguigu.javase.lesson7.Person1;
import org.junit.Test;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
/**
* ListTest Tester.
*/
public class ListTestTest {
@Test
public void testArrayList(){
List list = new ArrayList();
//void add(int index, Object ele):把元素添加到指定位置,原来的元素被后移
list.add(new Person1("AA",12));
list.add(new Person1("BB",11));
list.add(new Person1("CC",10));
list.add(new Person1("DD",9));
list.add(new Person1("EE",8));
//Object get(int index):获取指定索引的元素
for(int i = 0; i < list.size(); i++){
Object object = list.get(i);
System.out.println(object);
}
//int indexOf(Object obj):获取指定元素的索引值
int index = list.indexOf(new Person1("CC",10));
System.out.println(index);
//Object remove(int index):移除指定索引的元素
Object removeObj = list.remove(0);
System.out.println(removeObj);
//boolean addAll(int index, Collection collection):把一组元素添加到指定位置
List list2 = new ArrayList();
list2.add(new Person1("FF",7));
list2.add(new Person1("CC",10));
list.addAll(list2);
//int lastIndexOf(Object obj):List中可以存放重复的元素,获取最后索引值
System.out.println(list.lastIndexOf(new Person1("CC",10)));
//Object remove(int index):移除指定索引的元素
System.out.println(0);
//Object set(int index, Object ele):设置指定位置的元素
list.set(0,new Person1("GG",7));
//List subList(int fromIndex, int toIndex):获取起止位置的元素集合
//包含fromIndex, 不包含toIndex
List list3 = list.subList(2,6);
System.out.println("list---------");
Iterator iterator1 = list.iterator();
while (iterator1.hasNext()){
System.out.println(iterator1.next());
}
System.out.println("list3---------");
Iterator iterator2 = list3.iterator();
while (iterator2.hasNext()){
System.out.println(iterator2.next());
}
}
}
3. ListIterator
List额外提供了一种listIterator()方法,可以双向遍历,既可以从前往后,也可以从后往前,该方法返回一个ListIterator对象,ListIterator接口继承了Iterator接口,提供了专门操作List的方法:
- boolean hasPrevious()
- Object previous()
- void add()
4. ArrayList和Vector
- ArrayList和Vector是List接口的两个典型实现
- 区别:
- Vector是一个古老的集合,通常建议使用ArrayList
- ArrayList是线程不安全的,而Vector是线程安全的
- 即使为保证List集合线程安全,也不推荐使用Vector
- Arrays.asList(Object … args)方法返回的List集合,既不是ArrayList实例,也不是Vector实例。Arrays.asList(…)返回值是一个固定长度的List集合,只读。是Arrays里面的一个私有的静态内部类ArrayList。
5. 可变参数
- 从JDK1.5开始,Java允许定义形参长度可变的参数,从而允许为方法指定数量不确定的形参
- 若在定义方法时,在最后一个形参的类型后增加三点(…,…位于变量类型和变量名之间,前后有无空格都可以)则表明该形参可以接受多个参数值,多个参数值被当做数组传入
- 可变形参只能处于形参列表的最后,所以一个方法最多只能有一个长度可变的形参
- 调用包含一个可变形参的方法时,可以为该形参传入多个参数或一个数组
- 能匹配定长的方法,那优先匹配该方法。含有不定参数的重载方法被最后匹配
- main方法的参数就是一个数组类型,他可以改成可变参数类型
- 调用可变参数的方法时,编译器为该可变参数隐含创建一个数组,在方法体中以数组的形式访问
参考资料:https://www.cnblogs.com/lanxuezaipiao/p/3190673.html
5. 可变参数示例代码
public class ArrayListTestTest {
public void test1(String ... args){
for(int i = 0; i < args.length; i++){
System.out.print(args[i]+" ");
}
}
public void test1(String s1, String s2){
System.out.println("定长");
}
@Test
public void arrays(){
//匹配可变参数重载方法
test1(new String[]{"MM","NN"});//MM NN
}
}