目录
一、List接口
1.特点:
2.方法:
二、List接口的使用
三、List实现类
1.ArrayList(重点)
(1)特点
(2)示例
(3)源码分析
2.Vector
(1)特点
(2)示例
3.LinkedList
(1)特点
(2)示例
四、ArrayList和LinkedList的区别
1.ArrayList 数组
2.LinkedList 双向链表
有序、有下标、元素可以重复。
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)
详见代码注解:
重点都在注释 重点都在注释 重点都在注释
↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓
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("----------------");//转为Objectlist.remove((Object) 46);System.out.println(list.toString());System.out.println("----------------");//new Integerlist.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)使用增强forfor (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.返回子集合 subListList list1 = list.subList(1,3); //包含角标1的元素,不包含角标3的元素System.out.println(list1.toString());}
}
数组结构实现,查询快、增删慢
运行效率快,线程不安全
详见代码注解:
重点都在注释 重点都在注释 重点都在注释
↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓
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判断两元素是否相等:↓↓↓

向集合添加元素后,默认容量:DEFAULT_CAPACITY = 10;如果没有添加任何元素,容量为0。
每次扩容的大小是原来的1.5倍。
存放元素的数组:elementData
实际元素个数:size
添加元素:add()
数组结构实现,查询快、增删慢
运行效率慢,线程安全
可实现可增长的对象数组
详见代码注解:
重点都在注释 重点都在注释 重点都在注释
↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓
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()); //枚举最后一个元素}
}
链表结构实现(双向链表),查询慢、增删快
详见代码注解:
重点都在注释 重点都在注释 重点都在注释
↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓
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)forfor (int i = 0; i

必须开辟连续空间,查询快,增删慢。

无需开辟连续空间,查询慢,增删快。
简单粗暴!
感谢ლ(°◕‵ƹ′◕ლ)!!!
下一篇:一筹莫展的莫什么意思