List子接口
特点:有序、有下标、元素可重复
删除时区别下标(int)与元素(String)
常用方法
/**
* @author 伍六七
* @date 2022/8/12 20:26
*/
public class list_demo {
public static void main(String[] args) {
//0新建[]
ArrayList list = new ArrayList();
//1添加[4, 3, 2, 1, s, s]
list.add("4");
list.add("3");
list.add("2");
list.add(1);
list.add("s");
list.add("s");
//2删除按照下标(int)按照参数(String)
list.remove(1);//[4, 2, 1, s, s]
list.remove("s");//[4, 2, 1, s]
//3遍历
//3.1for遍历
for (int i = 0; i < list.size(); i++) {
System.out.print(list.get(i)+" ");//4 2 1 s
}
//3.2增强for
for (Object l:list) {
System.out.print(l+" ");//4 2 1 s
}
//3.3迭代器
Iterator it = list.iterator();
while (it.hasNext()){
Object o = it.next();
System.out.print(o+" ");//4 2 1 s
//可以使用it.remove(); 进行移除元素
//不能使用collection其他方法 会报并发修改异常
//it.remove();
}
//3.4列表迭代器
ListIterator li = list.listIterator();
while (li.hasNext()){
System.out.printf(li.nextIndex()+":"+li.next()+" ");//0:4 1:2 2:1 3:s
}
while (li.hasPrevious()){
System.out.printf(li.previousIndex()+":"+li.previous()+" ");//3:s 2:1 1:2 0:4
}
//4获取对应下标
int i = list.indexOf(1);
System.out.println(i);//2
//5返回子集合(左闭右开)
List list1 = list.subList(1, 3);
System.out.println(list1);//[2, 1]
}
}
与数组的转换
/**
*测试数组集合的互相转化
*/
@Test
public void listTest(){
int[] intArr = {998, 77, 66, 89, 79, 50, 100};
Integer[] integerArr = {998, 77, 66, 89, 79, 50, 100};
System.out.println("int数组为"+Arrays.toString(intArr));
System.out.println("Integer数组为"+Arrays.toString(integerArr));
List<int[]> intList = Arrays.asList(intArr);
System.out.println(intList);
System.out.println(intList.getClass().getTypeName());
List<Integer> integerList = Arrays.asList(integerArr);
System.out.println(integerList);
System.out.println(integerList.getClass().getTypeName());
Object[] array = intList.toArray();
System.out.println(array);
System.out.println(array.getClass().getTypeName());
Object[] objects = integerList.toArray();
System.out.println(objects);
System.out.println(objects.getClass().getTypeName());
}
List实现类
ArrayList
add(collection)是将整个collection当成一个元素,这个元素会随collection改变而改变
addall(collection)是将collection的元素加入到ArrayList里
删除与List子接口方法一致
常用方法
/**
* @author 伍六七
* @date 2022/8/12 21:03
*/
public class arraylist_demo {
public static void main(String[] args) {
//0新建[]
ArrayList arrayList = new ArrayList<>();
System.out.println(arrayList);//[]
//1添加
arrayList.add(1);
arrayList.add("1");//会自动转化为int
arrayList.add("s");
arrayList.add("s");
arrayList.add("l");
System.out.println(arrayList);//[1, 1, s, s, l]
//2删除按照下标(int)按照参数(String)
arrayList.remove(1);
System.out.println(arrayList);//[1, s, s, l]
//3遍历
//3.1迭代器
Iterator it = arrayList.iterator();
while(it.hasNext()){
Object o = it.next();
System.out.print(o+" ");//1 s s l
}
//3.1列表迭代器
ListIterator li = arrayList.listIterator();
//正序
while(li.hasNext()){
Object o = li.next();
System.out.print(o+" ");//1 s s l
}
//倒序
while(li.hasPrevious()){
Object o = li.previous();
System.out.printf(o+" ");//l s s 1
}
//4判断
System.out.println(arrayList.contains(1));//true
System.out.println(arrayList.isEmpty());//false
//5获得下标
System.out.println(arrayList.indexOf(1));//0
System.out.println(arrayList.indexOf("s"));//1
}
}
源码分析
DEFAULT_CAPACITY = 10; //默认容量
//注意:如果没有向集合中添加任何元素时,容量0,添加一个后,容量为10
//每次扩容是原来的1.5倍
elementData//存放元素的数组
size //实际元素个数
LinkedList
创建链表集合
LinkedList li = new LinkedList<>();
常用方法与List一致
vector
常用方法
增加、删除、判断同上
/**
* @author 伍六七
* @date 2022/8/12 21:31
*/
public class vector_demo {
public static void main(String[] args) {
//创建集合
Vector vector = new Vector<>();
//增加、删除、判断同上
vector.add(1);
vector.add(1);
vector.add(2);
vector.add("s");
vector.add("l");//[1, 1, 2, s, l]
vector.remove(4);//[1, 1, 2, s]
vector.contains("s");//true
vector.isEmpty();//false
vector.indexOf("s");//3
//遍历中枚举器遍历
Enumeration en = vector.elements();
while (en.hasMoreElements()){
Object o = en.nextElement();
System.out.printf(o+" ");//1 1 2 s
}
}
}