List集合
1、List集合
List集合是Collection集合的子类,它也是一个接口类,拥有Collection接口的所有方法及自己特有方法。该集合是一个有序集合。
2、 List集合的实现类(List是Collection接口的子接口)
2.1、ArrayList
ArrayList是List接口的实现类,它重写了List集合里的所有方法,也有自己独有的方法,该集合是一个有序集合,可以添加重复的元素。
2.1.1、ArrayList常用的方法
1、添加方法
boolean void add(E e):将指定的元素追加到此列表的末尾。
void add(int index, E element):把指定元素添加到集合的指定位置
boolean addAll(int index, Collection<? extends E> c):把指定集合添加到集合的指定位置
List<String> list = new ArrayList<>();
list.add("hello"); //向集合中添加元素
list.add(1,"world"); //把指定元素添加到集合的指定位置
2、获取方法
E get(int index):获取指定下标对应的元素
int indexOf(Object o):获取指定元素在集合中出现的第一个位置对应的下标,如果找不到返回-1
int lastIndexOf(Object o):与indexOf(Object o)一样,只是该方法是从后向前找
E get(int index) :返回此列表中指定位置的元素。
List<String> list = new ArrayList<>();
list.add("hello"); //向集合中添加元素
list.add("world");
list.add("java");
list.get(0);//获取第一个位置的元素
int f = list.indexOf("hello"); // index=0,获取hello在集合中出现的第一个位置对应的下标
System.out.println(f);
int l = list.lastIndexOf("hello"); // index=2,获取hello在集合中出现的第一个位置对应的下标(从后往前找)
System.out.println(l);
3、删除方法
E remove(int index):删除指定位置对应的元素,返回被删除的元素。
注:如果集合中存储是Integer类型的对象,那么使用这个方法来想删除指定元素而不是通过下标的方式的话,需要把值包装为Integer对象。
boolean remove(Object o) :从列表中删除指定元素的第一个出现(如果存在)。
List<String> list = new ArrayList<>();
list.add("hello"); //向集合中添加元素
list.add("world");
list.add("java");
list.remove("hello"); //向集合中删除hello,删除成功返回true,否则返回false
list.remove(1); //删除第二个位置存放的元素
System.out.println(list);
4、修改
E set(int index, E element):把指定位置对应的元素修改为指定元素
List<String> list = new ArrayList<>();
list.add("hello"); //向集合中添加元素
list.add("world");
list.add("java");
list.set(1, "my");//将第二个元素world修改为my
System.out.println(list);
5、截取
List subList(int fromIndex, int toIndex):从指定集合中截取出一个子集合
List<String> list = new ArrayList<>();
list.add("hello"); //向集合中添加元素
list.add("world");
list.add("java");
list.add("world");
list.add("java");
List<String> subList = list.subList(0, 2);//截取第0个和第1个元素存放到另一个list集合中区间为[0,2)左闭右开
System.out.println(list);
2.1.2、ArrayList集合的特点
1、ArrayList集合元素可以重复
2、ArrayList集合有序,顺序是添加顺序
3、ArrayList底层是数组结构
4、添加修改数据速度相对LinkedList来说慢,但查询速度比LinkedList快
2.2、LinkedList
LinkedList也t是List接口的实现类,它重写了List集合里的所有方法,也有自己独有的方法,该集合也是一个有序集合,可以添加重复的元素,底层是链表结构。
2.2.1、LinkedList特有的方法
1、添加方法
void addFirst(E e):把指定元素添加到集合的第一个位置
void addLast(E e):把指定元素添加到集合的最后一个位置
LinkedList<String> linkedList = new LinkedList<>();
linkedList.add("hello");
linkedList.add("world");
linkedList.add("my");
linkedList.add("class");
System.out.println(linkedList);
System.out.println("-------------------");
linkedList.addFirst("first");//把first添加到集合的第一个位置,无返回值
linkedList.addLast("last");//把last添加到集合的最后一个位置,无返回值
System.out.println(linkedList);
boolean offer(E e):将指定元素添加到此列表的末尾(最后一个元素)。底层调用add(E e)
boolean offerFirst(E e):在此列表的开头插入指定的元素。底层调用的是addFirst(E e)
boolean offerLast(E e):在此列表末尾插入指定的元素。底层调用的是addLast(E e)
LinkedList<String> linkedList = new LinkedList<>();
linkedList.add("hello");
linkedList.add("world");
linkedList.add("my");
linkedList.add("class");
System.out.println(linkedList);
System.out.println("---------------------------");
boolean b1 = linkedList.offerFirst("first");//把first添加到集合的第一个位置,调用这个方法就返回true
System.out.println(b1);
boolean b2 =linkedList.offerLast(null);//把null添加到集合的最后一个位置,调用这个方法就返回true
System.out.println(b2);
System.out.println(linkedList);
void push(E e):将元素推入此列表所表示的堆栈。放在栈顶,底层调用addFirst(E e)
2)获取
E getFirst():返回此列表的第一个元素。(重点)如果集合为空调用此方法会抛异常
E getLast():返回此列表的最后一个元素。(重点)
LinkedList<String> linkedList = new LinkedList<>();
linkedList.add("hello");
linkedList.add("world");
linkedList.add("my");
linkedList.add("class");
System.out.println(linkedList);
System.out.println("---------------------------");
String first = linkedList.getFirst();//获取但不移除此集合中的第一个元素hello;如果此集合为空,抛出异常。
String last = linkedList.getLast();//获取但不移除此集合中的最后一个元素class;如果此集合为空,抛出异常。
System.out.println(first+","+last);
E element():获取但不移除此列表的头(第一个元素)。底层调用getFirst()
E peek():获取但不移除此列表的头(第一个元素)。
E peekFirst():获取但不移除此列表的第一个元素;如果此列表为空,则返回 null。
E peekLast():获取但不移除此列表的最后一个元素;如果此列表为空,则返回 null。
LinkedList<String> linkedList = new LinkedList<>();
linkedList.add("hello");
linkedList.add("world");
linkedList.add("my");
linkedList.add("class");
String e1 = linkedList.element();//获取集合中的第一个元素(hello)。底层调用getFirst(),如果集合为空抛出异常
String e2 = linkedList.peekFirst();//获取但不移除此集合中的第一个元素hello;如果此集合为空,则返回 null。
String e3 = linkedList.peekLast();//获取但不移除此集合中的最后一个元素class;如果此集合为空,则返回 null。
System.out.println("e1="+e1);
System.out.println("e2="+e2);
System.out.println("e3="+e3);
LinkedList<String> linkedList02 = new LinkedList<>();
String e4 = linkedList02.peek();//获取但不移除此集合中的第一个元素,如果此集合为空,则返回 null。
System.out.println("e4="+e4);
String e5 = linkedList02.element();
System.out.println("e5="+e5);
3、删除
E remove():获取并移除此列表的头(第一个元素)。底层调用removeFirst()
E removeFirst():移除并返回此列表的第一个元素。
E removeLast():移除并返回此列表的最后一个元素。
LinkedList<String> linkedList = new LinkedList<>();
linkedList.add("hello");
linkedList.add("world");
linkedList.add("my");
linkedList.add("class");
linkedList.add("hahaha");
linkedList.add("hehehe");
linkedList.add("lalala");
String r1 = linkedList.remove();//获取并移除此集合中的第一个元素。底层调用removeFirst(),如果此集合为空,抛出异常。
System.out.println(r1);
String r2 = linkedList.removeFirst();//移除并返回集合中的第一个元素,如果此集合为空,抛出异常。
System.out.println(r2);
String r3 = linkedList.removeLast();//移除并返回集合中的最后一个元素,如果此集合为空,抛出异常。
System.out.println(r3);
E poll():获取并移除此列表的头(第一个元素),不会报异常
E pollFirst():获取并移除此列表的第一个元素;如果此列表为空,则返回 null。
E pollLast():获取并移除此列表的最后一个元素;如果此列表为空,则返回 null。
E pop():从此列表所表示的堆栈处弹出一个元素。底层调用removeFirst();
LinkedList<String> linkedList = new LinkedList<>();
linkedList.add("hello");
linkedList.add("world");
linkedList.add("my");
linkedList.add("class");
linkedList.add("hahaha");
linkedList.add("hehehe");
linkedList.add("lalala");
String r1 = linkedList.poll();//获取并移除此集合中的第一个元素。底层调用removeFirst(),如果此集合为空,则返回 null。
System.out.println(r1);
String r2 = linkedList.pollFirst();//移除并返回集合中的第一个元素,如果此集合为空,则返回 null。。
System.out.println(r2);
String r3 = linkedList.pollLast();//移除并返回集合中的最后一个元素,如果此集合为空,则返回 null。。
System.out.println(r3);
2.2.2、LinkedList的特点
1、底层是以链表结构来存储数据的
2、添加数据速度相对ArrayList来说在快,但查询速度比ArrayList慢
3、元素是有序的,与添加顺序相同
4、元素可以重复
3、LinkedList集合与ArrayList集合的区别
1、底层数据结构不同:LinkedList用的是链表结构,而ArrayList用是数组结构;
2、LinkedList查询速度慢,而ArrayList查询速度快;
3、LinkedList添加修改速度快,而ArrayList添加修改速度慢。
4、LinkedList集合与ArrayList集合的使用场景
如果需要求中可以允许有重复元素并且需要有一定顺序时,可以考虑使用List集合。而List集合是一个接口类,因此我们可以使用ArrayList和LinkedList集合。
1、LinkedList集合一般是使用在频繁做添加或删除元素操作时;
2、ArrayList集合一般是使用在频繁查询元素操作时。
ps:以上所述仅供学习参考,如有雷同纯属巧合,请各位大佬多多指教。