目录
List集合
1.1 概述
java.util.List:List是一个接口,它继承自Collection接口。常用的实现类有ArrayList和LinkedList。使用List接口的好处是可以将代码与具体的实现类解耦,从而提高代码的灵活性和可维护性。
1.2 特点
- 有序的集合,存储元素和取出元素的顺序是一致的(存储123,取出123)。
- 有索引,包含了一些带索引的方法 。
- 允许存储重复的元素 。
1.3 常用方法
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:字符串索引越界异常。
1.4 ArrayList集合
1.4.1 概述
java.util.ArrayList:ArrayList是一种动态数组,它实现了List接口。ArrayList可以根据需要自动调整大小,可以存储任意类型的对象。ArrayList提供了一系列的方法,可以方便地对其中的元素进行添加、删除、查找和遍历操作。与普通的数组相比,ArrayList的大小是可变的,并且可以自动处理底层数组的扩容和缩容。使用ArrayList能够方便地操作和管理一系列对象的集合。
1.4.2 练习
源代码:
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 + " ");
}
}
}
输出结果:
1.5 LinkedList集合
1.5.1 概述
java.util.LinkedList:LinkedList实现了Java的List接口,因而可以像其他List实现类一样使用。它也实现了Deque接口,因而可以作为双端队列使用。另外,LinkedList还实现了Queue接口,因而可以作为队列使用。
1.5.2 特点
- LinkedList是Java中的一种数据结构,它是一个双向链表,每个节点包含了数据本身以及指向前一个节点和后一个节点的引用。
- LinkedList不需要预先指定容量,可以根据需要动态地增加或减少元素。
- LinkedList允许快速插入和删除元素,因为只需要调整节点的引用,而不需要像数组那样移动元素。
- 访问和搜索元素的性能较差,因为需要从头或尾开始遍历链表。
1.5.3 常用方法
使用LinkedList集合特有的方法,不能使用多态。
- void addFirst(E e):将指定元素插入此列表的开头。
- void addLast(E e):将指定元素添加到此列表的结尾。
- void push(E e):将元素推入此列表所表示的堆栈。
- E getFirst():返回此列表的第一个元素。
- E getLast():返回此列表的最后一个元素。
- E removeFirst():移除并返回此列表的第一个元素。
- E removeLast():移除并返回此列表的最后一个元素。
- E pop():从此列表所表示的堆栈出弹出一个元素。
1.5.4 练习
源代码:
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 + " ");
}
}
}
输出结果:
1.6 Vector类
1.6.1 概述
Vector类是Java中提供的一种动态数组实现。它是使用数组来存储元素的,并且可以根据需要自动调整数组的大小。Vector类提供了一系列方法来操作数组,例如添加元素、获取元素、删除元素等。Vector类还具有线程安全的特性,可以在多个线程同时访问和修改数组,以确保数据的一致性和安全性。因此,Vector类常用于需要在多线程环境下操作数组的场景中。
1.6.2 练习
源代码:
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 + " ");
}
}
}
输出结果:
1.7 List实现类的异同点
ArrayList,LinkedList和Vector都是Java集合框架中的实现类,它们用于存储和操作集合数据。三者的异同如下:
相同点:
- 都实现了List接口,都支持索引访问元素。
- 都可以存储任意类型的对象。
- 都具有动态扩容的能力。
不同点:
- ArrayList底层使用数组实现;LinkedList底层使用双向链表实现;Vector底层也使用数组实现。
- ArrayList是非线程安全的;LinkedList和Vector是线程安全的。
- ArrayList和LinkedList适用于随机访问和遍历;而Vector适用于需要线程安全性的场景。
- ArrayList和LinkedList的插入和删除操作的性能取决于位置;ArrayList在尾部插入和删除元素效率高,而LinkedList在中间插入和删除元素效率高。
- Vector相比ArrayList和LinkedList,性能较低,因为它需要进行同步(线程安全)操作。
因此,选择ArrayList还是LinkedList或Vector取决于具体的需求。如果需要随机访问和遍历,且不需要线程安全,则选择ArrayList;如果需要频繁插入和删除元素,或需要线程安全,则选择LinkedList;如果需要线程安全且不考虑性能,则选择Vector。
原文地址:https://blog.csdn.net/Zenghaiyue_1999/article/details/135769163
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_61811.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!