目录
一、List接口
1.特点:
有序、有下标、元素可以重复。
2.方法:
1.在index位置插入对象o
void add(int index,Object o)
2. 将一个集合中的元素添加到此集合中的index位置
boolean addAll(int index,Collection c)
3. 返回集合中指定位置的元素
Object get(int index)
4. 返回fromIndex和toIndex之间的集合元素
List subList(int fromIndex,int toIndex)
二、List接口的使用
详见代码注解:
重点都在注释 重点都在注释 重点都在注释
↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;
/**
* List子接口使用
* 特点:1.有序 有下标
* 特点:2.可以重复
*/
public class Test03 {
public static void main(String[] args) {
//1.先创建集合对象
List list = new ArrayList<>();
//添加元素
list.add("苹果");
list.add("葡萄");
list.add(20);
list.add(46);
list.add(56);
list.add("香蕉");
list.add("橘子");
list.add(1, "梨子");
System.out.println("元素个数:" + list.size());
System.out.println(list.toString());
System.out.println("----------------");
//2.删除元素(字符串)
list.remove(1);
System.out.println("删除之后的个数:" + list.size());
System.out.println(list.toString());
System.out.println("----------------");
//删除数字
// 直接删除角标
list.remove(2);
System.out.println(list.toString());
System.out.println("----------------");
//转为Object
list.remove((Object) 46);
System.out.println(list.toString());
System.out.println("----------------");
//new Integer
list.remove(new Integer(56));
System.out.println(list.toString());
System.out.println("----------------");
//3.遍历
//(1)有角标,可以使用for循环遍历
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
System.out.println("----------------");
//(2)使用增强for
for (Object objiect : list) {
System.out.println(objiect);
}
System.out.println("----------------");
//(3)使用迭代器 只能往后遍历
Iterator it = list.iterator();
while (it.hasNext()) {
System.out.println(it.next());
}
System.out.println("----------------");
//(4)列表迭代器 可以逆向遍历,任意方向,添加、删除、修改元素
ListIterator lit = list.listIterator();
while (lit.hasNext()) {
System.out.println(lit.nextIndex() + ":" + lit.next()); //从前往后遍历
}
System.out.println("----------------");
while (lit.hasPrevious()) {
System.out.println(lit.previousIndex() + ":" + lit.previous()); //从后往前遍历
}
System.out.println("----------------");
//4.判断
System.out.println(list.contains("苹果"));
System.out.println(list.isEmpty());
System.out.println("----------------");
//5.获取位置
System.out.println(list.indexOf("葡萄"));
System.out.println("----------------");
//6.返回子集合 subList
List list1 = list.subList(1,3); //包含角标1的元素,不包含角标3的元素
System.out.println(list1.toString());
}
}
三、List实现类
1.ArrayList(重点)
(1)特点
数组结构实现,查询快、增删慢
运行效率快,线程不安全
(2)示例
详见代码注解:
重点都在注释 重点都在注释 重点都在注释
↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓
import com.scaaner.Student;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.ListIterator;
/**
* ArrayList的使用
* 存储结构:数组 查找遍历快 增删慢 比较
*/
public class Test01 {
public static void main(String[] args) {
//创建集合
ArrayList arraylist = new ArrayList<>();
//1.添加元素
Student s1 = new Student("A",20);
Student s2 = new Student("B",22);
Student s3 = new Student("C",24);
Student s4 = new Student("D",27);
arraylist.add(new Student("A",20));
arraylist.add(s2);
arraylist.add(s3);
arraylist.add(s4);
System.out.println("元素个数:"+arraylist.size());
System.out.println(arraylist.toString());
System.out.println("------------------------------");
//2.删除元素
arraylist.remove(s1);
System.out.println("删除之后个数:"+arraylist.size());
System.out.println(arraylist.toString());
System.out.println("------------------------------");
//3.遍历元素
//(1)迭代器
Iterator iterator = arraylist.iterator();
while(iterator.hasNext()){
Student s = (Student) iterator.next();
System.out.println(s.toString());
}
System.out.println("------------------------------");
//(2)列表迭代器
ListIterator listIterator = arraylist.listIterator();
while(listIterator.hasNext()){
Student student = (Student) listIterator.next();
System.out.println(student.toString());
}
System.out.println("------------------------------");
while(listIterator.hasPrevious()){
Student student1 = (Student) listIterator.previous();
System.out.println(student1.toString());
}
//4.判断
System.out.println(arraylist.contains(new Student("A",20)));
System.out.println(arraylist.isEmpty());
System.out.println("------------------------------");
//5.查找
System.out.println(arraylist.indexOf(s2));
}
}
用equals判断两元素是否相等:↓↓↓
(3)源码分析
向集合添加元素后,默认容量:DEFAULT_CAPACITY = 10;如果没有添加任何元素,容量为0。
每次扩容的大小是原来的1.5倍。
存放元素的数组:elementData
实际元素个数:size
添加元素:add()
2.Vector
(1)特点
数组结构实现,查询快、增删慢
运行效率慢,线程安全
可实现可增长的对象数组
(2)示例
详见代码注解:
重点都在注释 重点都在注释 重点都在注释
↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓
import java.util.Enumeration;
import java.util.Vector;
/**
* Vector集合的使用
* 存储结构:数组
*/
public class Test02 {
public static void main(String[] args) {
//创建集合
Vector vector = new Vector<>();
//1.添加元素
vector.add("菠萝");
vector.add("橘子");
vector.add("糯叽叽");
vector.add("芒果");
System.out.println(vector.toString());
System.out.println("-------------------");
//2.删除
vector.remove(1);
//vector.clear(); //清空
System.out.println(vector.toString());
System.out.println("-------------------");
//3.遍历
//可以使用for循环,增强for循环,迭代器
//使用枚举器
Enumeration elements = vector.elements();
while(elements.hasMoreElements()){
String s =(String) elements.nextElement();
System.out.println(s);
}
System.out.println("-------------------");
//4.判断
System.out.println(vector.contains("苹果"));
System.out.println(vector.isEmpty());
System.out.println("-------------------");
//5.其他方法
System.out.println(vector.firstElement()); //枚举第一个元素
System.out.println(vector.lastElement()); //枚举最后一个元素
}
}
3.LinkedList
(1)特点
链表结构实现(双向链表),查询慢、增删快
(2)示例
详见代码注解:
重点都在注释 重点都在注释 重点都在注释
↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓
import com.scaaner.Student;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.ListIterator;
/**
* LinkedList的使用
* 存储结构:双向链表
*/
public class Test01 {
public static void main(String[] args) {
//创建集合
LinkedList linkedList = new LinkedList<>();
//1.添加元素
Student s1 = new Student("A",20);
Student s2 = new Student("B",22);
Student s3 = new Student("C",24);
Student s4 = new Student("D",27);
linkedList.add(s1);
linkedList.add(s2);
linkedList.add(s3);
linkedList.add(s4);
System.out.println("元素个数:"+linkedList.size());
System.out.println(linkedList.toString());
System.out.println("-----------------------");
//2.删除 remove 清空 clear
//3.遍历
//(1)for
for (int i = 0; i <linkedList.size(); i++) {
System.out.println(linkedList.get(i));
}
System.out.println("-----------------------");
//(2)增强for循环
for (Object object : linkedList){
Student s = (Student) object;
System.out.println(s.toString());
}
System.out.println("-----------------------");
//(3)使用迭代器
Iterator iterator =linkedList.iterator();
while(iterator.hasNext()){
Student s = (Student) iterator.next();
System.out.println(s.toString());
}
System.out.println("-----------------------");
//(4)使用列表迭代器
ListIterator listIterator =linkedList.listIterator();
while(iterator.hasNext()){
Student s = (Student) listIterator.next();
System.out.println(s.toString());
}
System.out.println("-----------------------");
//4.判断 contains(是否存在) isEmpty(是否为空)
//5.获取某元素的位置 indexOf()
}
}
四、ArrayList和LinkedList的区别
1.ArrayList 数组
必须开辟连续空间,查询快,增删慢。
2.LinkedList 双向链表
无需开辟连续空间,查询慢,增删快。
简单粗暴!
感谢ლ(°◕‵ƹ′◕ლ)!!!