List 子接口
-
特点:有序、有下标、元素可以重复
-
方法
- void add(int index,Object obj)//在index位置添加一个对象
- boolean addAll(int index,Collection c)//将一个集合中的所有对象添加到此集合中到index位置。
- Object get(int index)//返回集合中指定位置的元素
- List subList(int fromIndex,int toIndex)//返回fromindex和toIndex之间的计划和元素、
Array
package chapter02;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;
public class Demo01 {
public static void main(String[] args) {
List list = new ArrayList();
//添加元素
list.add("A");
list.add("B");
list.add("C");
System.out.println(list.size());
System.out.println(list.toString());
// //删除元素
// list.remove("A");//删去A
// list.remove(0);//删除在第一个位置的元素,不知道是啥
// System.out.println(list.toString());
//3遍历
//3.1for
for(int i=0;i<list.size();i++){
System.out.println(list.get(i));
}
//3.2增强for
for (Object o:list){
System.out.println(o);
}
//3.3迭代器
Iterator iterator = list.iterator();
while (iterator.hasNext()){
System.out.println(iterator.next());
}
//3.4列表迭代器,和iterator 的区别,listIterator可以向前向后遍历,添加、删除、修改元素
ListIterator listIterator=list.listIterator();
while (listIterator.hasNext()){
System.out.println(listIterator.next());
}
//判断
System.out.println(list.contains("B"));
System.out.println(list.isEmpty());
}
}
3
[A, B, C]
A
B
C
A
B
C
A
B
C
A
B
C
true
false
集合
数组中的删除是用数组下标进行删除
ArrayList重点
-
数组结构实现,查询快、增删慢
-
JDK1.2版本,运行效率快、线程不安全
-
源码分析:默认类型DEFAULT_CAPACITY = 10
没有向集合中添加任何元素默认是0,添加任意一个后为10
每次扩容的大小是原来的1.5倍
存放元素的数组 element Data
size 实际元素个数
package chapter02; import chapter01.Student; import java.util.ArrayList; import java.util.Iterator; public class Demo02 { public static void main(String[] args) { ArrayList arrayList = new ArrayList(); //1添加元素 Student s1=new Student("阿娆",20); Student s2=new Student("麦麦",21); Student s3=new Student("娟娟",22); Student s4=new Student("小卢",24); arrayList.add(s1); arrayList.add(s2); arrayList.add(s3); System.out.println(arrayList.size()); System.out.println(arrayList.toString()); //2删除元素 // //arrayList.remove(s1);//删除数组下标 // arrayList.remove(new Student("阿娆",20));//重写前删不掉,删除了那一行,的我没成功, // System.out.println(arrayList.size()); // System.out.println(arrayList.toString()); //3遍历元素 //迭代器 Iterator iterator= arrayList.iterator(); while (iterator.hasNext()){ Student s= (Student) iterator.next(); System.out.println(s); } //4判断 System.out.println(arrayList.contains(s1)); System.out.println(arrayList.isEmpty()); //查询 System.out.println(arrayList.indexOf(s2)); } }
3
[Student[name=阿娆, age =20], Student[name=麦麦, age =21], Student[name=娟娟, age =22]]
Student[name=阿娆, age =20]
Student[name=麦麦, age =21]
Student[name=娟娟, age =22]
true
false
1
Vector(面试问题)向量集合
-
数组结构实现,查询快、增删慢
-
JDK1…0版本,运行效率慢、线程安全,效率稍微慢点
[Vector讲解](Java Vector 类 | 菜鸟教程 (runoob.com))
Svector用的不多*
//创建集合 Vector vector=new Vector(); //1.添加 vector.add("阿娆"); vector.add("麦麦"); //2.删除 //vector.remove(1); //3.遍历 for,迭代器 //特有的一个枚举器 Enumeration e = vector.elements(); while (e.hasMoreElements()){ String o=(String)e.nextElement(); System.out.println(o); } //4.判断 System.out.println(vector.contains("阿娆")); //Svector用的不多
LinkedList
-
链表结构实现,增删快,查询慢
-
双向链表
//创建集合
LinkedList linkedList = new LinkedList();
//1.添加元素
Student s1=new Student("阿娆",20);
Student s2=new Student("麦麦",21);
Student s3=new Student("娟娟",22);
Student s4=new Student("小卢",24);
linkedList.add(s1);
linkedList.add(s3);
linkedList.add(s2);
System.out.println(linkedList.size());
System.out.println(linkedList.toString());
//删除
// linkedList.remove(2);
// System.out.println(linkedList.size());
//遍历 for for增强,迭代
Iterator iterator= linkedList.iterator();
while (iterator.hasNext()){
Student s= (Student) iterator.next();
System.out.println(s.toString());
}
ListIterator listIterator = linkedList.listIterator();
while (listIterator.hasNext()){
listIterator.next();
System.out.println(listIterator.toString());
}
//判断
//5.获取
System.out.println(linkedList.indexOf(s1));//0数组下标
ArrayList和LinkedList区别
A:必须开辟连续空间,查询快,增删慢
L:无需开辟连续空间,查询慢,增删快