java之List集合

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:以上所述仅供学习参考,如有雷同纯属巧合,请各位大佬多多指教。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值