目录
????????java.util.List:List是一个接口,它继承自Collection接口。常用的实现类有ArrayList和LinkedList。使用List接口的好处是可以将代码与具体的实现类解耦,从而提高代码的灵活性和可维护性。
? ? ? ? List接口继承Collection接口,因而Collection中常用的方法List也可使用。这里主要列举一些List个性化的方法(带索引方法的使用)。List接口不能直接创建对象,需要采用多态形式创建 其 实现类对象,才能使用。
方法:
- void add(int index,E element):将E,添加到该集合中的index处。
- E get(int index):返回集合中index的E。
- E remove(int index):移除列表中index的E,返回的是被移除的E。
- E set(int index,E element):用E替换集合中index的E,返回值是更新前的E。
- int indexOf(E element):返回集合中E的index,没有找到返回-1。
????????
说明:
????????E:集合元素,集合中具体的值。
????????index:指定位置,集合的索引值。
????????
注意事项:操作索引的时候,一定要防止索引越界异常:
- IndexOutOfBoundsException:索引越界异常,集合会报。
- ArrayIndexOutOfBoundsException:数组索引越界异常。
- StringIndexOutOfBoundsException:字符串索引越界异常。
????????java.util.ArrayList:ArrayList是一种动态数组,它实现了List接口。ArrayList可以根据需要自动调整大小,可以存储任意类型的对象。ArrayList提供了一系列的方法,可以方便地对其中的元素进行添加、删除、查找和遍历操作。与普通的数组相比,ArrayList的大小是可变的,并且可以自动处理底层数组的扩容和缩容。使用ArrayList能够方便地操作和管理一系列对象的集合。
源代码:?
package com.zhy.coll;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class TestArrayList {
public static void main(String[] args) {
//创建一个集合<泛型为String类型>,多态写法,接口引用 指向 实现类对象
List<String> list = new ArrayList<String>();
//往集合中添加元素
list.add("elememt1");
list.add("elememt2");
list.add("elememt3");
//打印集合
System.out.println("初始化集合:" + list);
//1.将指定元素,添加到该集合的指定位置上
list.add(1,"elementNew");
System.out.println("在索引1插入元素:" + list);
//2.返回集合中指定位置的元素
String nameE = list.get(0);
System.out.println("返回索引0的元素:" + nameE);
//3.移除集合中指定位置的元素,返回的是被移除的元素
String removeE = list.remove(2);
System.out.println("移除索引2的元素,返回的是被移除的元素:" + removeE);
//4.用指定元素替换集合中指定位置的元素,返回的是更新前的元素
String beforeE = list.set(0,"elementUpdate");
System.out.println("用新元素替换掉索引0的元素,返回的是更新前索引0的元素:" + beforeE);
//5.返回集合中指定元素的索引,找不到返回-1
int indexE = list.indexOf("elementOld");
System.out.println("返回(elementOld)的索引:" + indexE);
//使用迭代器遍历List集合
System.out.print("使用迭代器遍历List集合:");
Iterator<String> iterator = list.iterator();
while(iterator.hasNext()){
String tempE = iterator.next();
System.out.print(tempE + " ");
}
}
}
输出结果:
????????java.util.LinkedList:LinkedList实现了Java的List接口,因而可以像其他List实现类一样使用。它也实现了Deque接口,因而可以作为双端队列使用。另外,LinkedList还实现了Queue接口,因而可以作为队列使用。
????????使用LinkedList集合特有的方法,不能使用多态。
- void addFirst(E e):将指定元素插入此列表的开头。
- void addLast(E e):将指定元素添加到此列表的结尾。
- void push(E e):将元素推入此列表所表示的堆栈。
- E getFirst():返回此列表的第一个元素。
- E getLast():返回此列表的最后一个元素。
- E removeFirst():移除并返回此列表的第一个元素。
- E removeLast():移除并返回此列表的最后一个元素。
- E pop():从此列表所表示的堆栈出弹出一个元素。
源代码:
package com.zhy.coll;
import java.util.LinkedList;
public class TestLinkedList {
public static void main(String[] args) {
//创建LinkedList对象
LinkedList<String> linkedList = new LinkedList<>();
linkedList.add("Annie");
linkedList.add("Bob");
linkedList.add("Tom");
System.out.println("初始化LinkedList集合:" + linkedList);
//返回此列表的第一个元素
String fistE = linkedList.getFirst();
System.out.println("列表的第一个元素为:" + fistE);
//返回此列表的最后一个元素
String lastE = linkedList.getLast();
System.out.println("列表的最后一个元素为:" + lastE);
//将指定元素插入此列表的开头
linkedList.addFirst("Lisa");
System.out.println("在列表开头插入元素:" + linkedList);
//将指定元素添加到此列表的结尾
linkedList.addLast("Carl");
System.out.println("在列表末尾插入元素:" + linkedList);
//移除并返回此列表的第一个元素
linkedList.removeFirst();
System.out.println("移除第一个元素:" + linkedList);
//移除并返回此列表的最后一个元素
linkedList.removeLast();
System.out.println("移除最后一个元素:" + linkedList);
//将元素推入此列表所表示的堆栈
linkedList.push("Dick");
System.out.println("在栈首添加元素:" + linkedList);
//从列表所表示的堆栈出弹出一个元素
linkedList.pop();
System.out.println("将栈首的元素弹出:" + linkedList);
//使用增强for遍历列表
System.out.print("使用增强for遍历列表:");
for(String e : linkedList){
System.out.print(e + " ");
}
}
}
输出结果:
????????Vector类是Java中提供的一种动态数组实现。它是使用数组来存储元素的,并且可以根据需要自动调整数组的大小。Vector类提供了一系列方法来操作数组,例如添加元素、获取元素、删除元素等。Vector类还具有线程安全的特性,可以在多个线程同时访问和修改数组,以确保数据的一致性和安全性。因此,Vector类常用于需要在多线程环境下操作数组的场景中。
源代码:
package com.zhy.coll;
import java.util.Iterator;
import java.util.Vector;
public class TestVector {
public static void main(String[] args) {
Vector<String> vector = new Vector<>();
vector.add("element1");
vector.add("element2");
vector.add("element3");
System.out.println("初始化集合:" + vector);
vector.remove(0);
System.out.println("移除第0个元素:" + vector);
vector.set(0,"elementNew");
System.out.println("修改第0个元素的值:" + vector);
System.out.print("使用增强for遍历集合:");
for (String name : vector){
System.out.print(name + " ");
}
System.out.print("\n使用迭代器遍历集合:");
Iterator<String> iterator = vector.iterator();
while(iterator.hasNext()){
String ele = iterator.next();
System.out.print(ele + " ");
}
}
}
输出结果:?
????????ArrayList,LinkedList和Vector都是Java集合框架中的实现类,它们用于存储和操作集合数据。三者的异同如下:
相同点:
不同点:?
????????因此,选择ArrayList还是LinkedList或Vector取决于具体的需求。如果需要随机访问和遍历,且不需要线程安全,则选择ArrayList;如果需要频繁插入和删除元素,或需要线程安全,则选择LinkedList;如果需要线程安全且不考虑性能,则选择Vector。