1、List集合:
1)、概念
有序集合(也称为序列),用户可以精确控制列表中每个元素的插入位置。用户可以通过整数索引访问元素,并搜索列表中的元素
2)、特点
1>、有索引,索引从0开始
2>、可以存储重复元素
3>、元素存取有序(有序指的是存入的顺序与输出的顺序一致,此处的有序不是指从小到大的排序)
3)、 List集合特有的方法
方法名 | 描述 |
---|---|
void add(int index,E element) | 在此集合中的指定位置插入指定的元素 |
E remove(int index) | 删除指定索引处的元素,返回被删除的元素 |
E set(int index,E element) | 修改指定索引处的元素,返回被修改的元素 |
E get(int index) | 返回指定索引处的元 |
2、ArrayList:
1)、概念
ArrayList是List的实现类,底层使用的是数组结构来存储数据,所以,又称ArrayList为动态数组。
2)、 常用方法介绍
常用方法我们从四个方面一次介绍:增删改查
1>、增加:
import java.util.ArrayList;
import java.util.List;
/**
* 该类用于演示ArrayList的常用方法
*/
public class AddDemo {
public static void main(String[] args) {
// 增加
List list = new ArrayList();
list.add(1);
list.add(3);
list.add(2);// 自动装箱
System.out.println(list);
// 插入数据
list.add(1, 0);// 向指定位置插入一个数据,该位置的元素及后面的元素都要往后挪一个位置
System.out.println(list);
List list1 = new ArrayList();
list1.add("zhangsan");
list1.add("lisi");
list1.add("wangwu");
System.out.println(list1);
List list2 = new ArrayList();
list2.add(new Student("aa", 21));
list2.add(new Student("bb", 22));
list2.add(new Student("cc", 23));
System.out.println(list2);
}
}
注意:在使用插入数据方法的时候,插入数据的位置的值不能大于集合的长度,否则会出现下标越界异常
2>、删除:
import java.util.ArrayList;
import java.util.List;
public class RemoveDemo {
public static void main(String[] args) {
List list = new ArrayList();
list.add("zhangsan");
list.add("lisi");
list.add("wangwu");
System.out.println(list);
// 根据元素的内容进行删除,返回值为Boolean类型(不推荐使用)
boolean result = list.remove("zhangsan");
System.out.println(result);
System.out.println(list);
// 根据元素的索引进行删除,返回值被删除的位置的元素,推荐使用
Object object = list.remove(1);
System.out.println(object);
System.out.println(list);
// 删除所有数据
list.add("aaaa");
list.add("bbbb");
System.out.println(list);
/*// 删除所有
list.removeAll(list);
System.out.println(list);*/
// 清空集合
list.clear();
System.out.println(list);
}
}
3>、修改:
import java.util.ArrayList;
import java.util.List;
public class UpdateDemo {
public static void main(String[] args) {
List list = new ArrayList();
list.add("zhangsan");
list.add("lisi");
list.add("wangwu");
System.out.println(list);
// 修改指定索引位置的值,将原来的值返回,修改的索引的位置不能大于等于集合的长度
Object object = list.set(3, "woniu");
System.out.println(object);
System.out.println(list);
}
}
4>、查询:
import java.util.ArrayList;
import java.util.List;
public class SelectDemo {
public static void main(String[] args) {
List list = new ArrayList();
list.add("zhangsan");
list.add("lisi");
list.add("wangwu");
System.out.println(list);
// 根据索引查询元素,索引的值不能大于集合的长度
Object obejct = list.get(1);
System.out.println(obejct);
// 根据元素内容获取在集合中的索引,如果返回值为-1,则表示元素不在集合中
int index = list.indexOf("lisi1");
System.out.println(index);
// 获取集合的长度
int size = list.size();
System.out.println(size);
// 判断集合是否为空
System.out.println(list.isEmpty());
// 判断集合是否包含指定的元素
boolean result = list.contains("wangwu");
System.out.println(result);
}
}
3)、四种遍历方式:
1>、普通for循环:
import java.util.ArrayList;
import java.util.List;
public class PuTongFor {
public static void main(String[] args) {
List list = new ArrayList();
list.add("zhangsan");
list.add("lisi");
list.add("wangwu");
System.out.println(list);
for(int i = 0; i < list.size(); i++){
System.out.println(list.get(i));
list.set(i, "aaa");
}
System.out.println(list);
}
}
2>、增强for循环:
import java.util.ArrayList;
import java.util.List;
public class ZengQiangFor {
public static void main(String[] args) {
List list = new ArrayList();
list.add("zhangsan");
list.add("lisi");
list.add("wangwu");
System.out.println(list);
for(Object str : list){
System.out.println(str);
str = "aaa";
}
System.out.println(list);
}
}
3>、迭代器:
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class DieDaiFor {
public static void main(String[] args) {
List list = new ArrayList();
list.add("zhangsan");
list.add("lisi");
list.add("wangwu");
System.out.println(list);
// 1. 获取迭代器对象
Iterator iterator = list.iterator();
while(iterator.hasNext()){
Object obj = iterator.next();
System.out.println(obj);
if(obj.equals("wangwu")){
list.add("java");
}
}
System.out.println(list);
}
}
4)、列表迭代器:
ListIterator介绍
通过List集合的listIterator()方法得到,所以说它是List集合特有的迭代器
用于允许程序员沿任一方向遍历的列表迭代器,在迭代期间修改列表,并获取列表中迭代器的当前位置
import java.util.ArrayList;
import java.util.List;
import java.util.ListIterator;
public class LieBiaoFor {
public static void main(String[] args) {
List list = new ArrayList();
list.add("zhangsan");
list.add("lisi");
list.add("wangwu");
System.out.println(list);
ListIterator listIterator = list.listIterator();
while(listIterator.hasNext()){
Object object = listIterator.next();
System.out.println(object);
if(object.equals("zhangsan")){
// 需要使用迭代器对象进行保存操作
listIterator.add("java");
}
}
System.out.println(list);
}
}
3、LinkedList:
1)、 概述
LinkedList是采用链表结构的方式来实现List接口的。
2)、 常用方法
使用与ArrayList一致,这里不在一一进行演示了
除了与Collection与List的方法之外,LinkedList还有一些自己特有的方法
方法名 | 说明 |
---|---|
public void addFirst(E e) | 在该列表开头插入指定的元素 |
public void addLast(E e) | 将指定的元素追加到此列表的末尾 |
public E getFirst() | 返回此列表中的第一个元素 |
public E getLast() | 返回此列表中的最后一个元素 |
public E removeFirst() | 从此列表中删除并返回第一个元素 |
public E removeLast() | 从此列表中删除并返回最后一个元素 |
import java.util.LinkedList;
import java.util.List;
public class LinkedListDemo {
public static void main(String[] args) {
LinkedList list = new LinkedList();
// 增加
list.add("zhangsan");
list.add("lisi");
list.add("wangwu");
System.out.println(list);
// 插入数据
list.add(1, "woniu");
System.out.println(list);
// 插入数据到开头
list.addFirst("go");
System.out.println(list);
// 删除
Object object = list.remove(0);
System.out.println(object);
System.out.println(list);
}
}
?4、ArrayList 与 LinekedList比较:
相同点
都是List接口的实现类,都可以用于保存引用数据,都是非线程安全的
不同点
数据结构不同,ArrayList底层采用的数组结构,LinkedList采用的是双向链表结构
执行效率:
查询,修改:ArrayList要优于LinkedList
增加,删除:ArrayLis与LinkedList 有一个数据迁移的时间 VS 数据查询的时间
5、vector:?
1)、 概述
Vector:向量 !也是一个集合,而且是非常古老的集合!
API同样跟ArrayList一样的!
连同底层原理都是一样的!区别在于:线程安全
2)、 使用
使用与ArrayList一样,唯一的不同是ArrayList非线程安全,vector线程安全
public synchronized boolean add(E e) {
modCount++;
ensureCapacityHelper(elementCount + 1);
elementData[elementCount++] = e;
return true;
}
本电子书目录:《Java基础的重点知识点全集》