目录
有序、有下标、元素可以重复。
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("----------------");
-
- //转为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());
- }
- }
数组结构实现,查询快、增删慢
运行效率快,线程不安全
详见代码注解:
重点都在注释 重点都在注释 重点都在注释
↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓
-
- 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)for
- for (int i = 0; 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 双向链表

无需开辟连续空间,查询慢,增删快。
简单粗暴!
感谢ლ(°◕‵ƹ′◕ლ)!!!