java语法学习(6)集合之Collection 接口——List接口

集合概述

概述:java中的集合就像一个容器,专门用来存储JAVA对象(实际上是对象的引用,但习惯上称为对象),这些对象可以是任意的数据类型
并且长度可变。其中,这些集合类都位于java.util包中,在使用时一定要 注意包的问题,否则出现异常。集合按照存储结构可以分为两大类,即单列集合Collection双列集合 Map

Collection:单列集合的根接口,用于存储一系列符合某种规则的元素。collection 集合有两个非常重要的子接口,分别是List 和 Set.
Map: 双列集合的根接口,用于存储具有键(Key),值(Value)映射关系的元素。

Collection 接口

Collection 是所有单列集合的根接口,因此在Collection 中定义了单列集合(List 和 Set)的一些通用方法

函数说明
boolean add(Object o)向集合中添加一个元素
boolean addAll(Collection c)将指定集合c中所有元素添加到该集合中
void clear()删除该集合中的所有元素
boolean remove(Object o)删除该集合中指定的元素
boolean removeAll(Collection c)删除该集合中包含指定集合c中的所有元素
boolean isEmpty()判断该集合是否为空
boolean contains(Object o )判断该集合中是否包含某个元素
boolean containsAll(Collection c)判断该集合中是否包含指定集合c中的所有元素
Iterator iterator()返回在该集合的元素上进行迭代的迭代器,用于遍历该集合所有元素
int size()获取该集合元素个数
Stream stream()将集合源转换为有序元素的流对象

List 接口

List 接口简介:
是单列集合的一个重要分支,习惯性地会将实现了List接口的对象称为List集合。在List集合中允许出现重复的元素,所有的元素是以一种线性方式进行存储的,在程序中可以通过索引来访问集合中的指定元素。另外 List 集合还有一个特点就是元素有序,即元素的存入顺序和取出顺序一致。List 集合继承了Collection 接口中的全部方法,而且还增加了一些操作集合的特有方法。

函数说明
void add(int index, Object element)将元素element 插入在List集合的指定索引位置
boolean addAll(int index,Collection c)将集合 c 包含的所有元素插入到List集合的指定索引位置
Object get(int index)返回集合索引index处的元素
Object remove(int index)删除index索引处的元素
Object set(int index,Object element)将索引index处元素替换成element 元素,并将替换后的元素返回
int indexOf(Object o)返回对象 o 在list 集合中首次出现的位置索引
int lastIndexOf(Object o)返回对象 o 在list集合中最后一次出现的位置索引
List subList(int fromIndex, int toIndex)返回从索引 fromIndex(包括)到 toIndex(不包括)处所有元素集合组成的子集合
Object [] toArray()将集合元素转换为数组
default void sort(Comparator<?super E > c)根据指定的比较器规则对集合元素排序
sort(Comparator< ? super E > c)用于对集合进行排序操作,该方法的参数是一个接口类型的比较器Comparator,可以用Lambda表达式传入一个函数式接口作为参数,来指定集合元素的排序规则。

ArrayList类

ArrayList 是 List 接口的一个实现类。
ArrayList内部封装了一个长度可变的数组对象,当存入的元素超过数组长度时,ArrayList 会在内存中分配一个更大的数组来存储这些元素,因此可以将ArrayList集合看作一个长度可变的数组
缺点:不适合做大量的增删操作。
优点:遍历和查找元素时显得非常高效。

e.g:
package arraylist;
import java.util.ArrayList;
public class arraylist {
      public static void main(String[]args)
      {
    	  ArrayList list = new ArrayList();
    	  list.add("s1");
    	  list.add("s2");
    	  list.add("s3");
    	  System.out.println("集合的长度是 " + list.size());
    	  System.out.println("第二个元素是 " + list.get(1));
      }
}

LinkedList 集合

List的另一个实现类,集合内部包含两个Node类型的first 和 last 属性维护一个双向循环链表。
优点:增删操作比较方便
LinkedList 中的特有方法:

函数说明
void add(int index, E element)在此列表中指定的位置插入指定的元素
void addFirst(Object o)将指定元素插入集合的开头
Object getFirst()返回集合的第一个元素
Object getLast()返回集合的最后一个元素
Object removeFirst()移除并返回集合的第一个元素
Object removeLast()移除并返回集合的最后一个元素
boolean offer(Object o)将指定元素添加到集合的结尾
boolean offerFirst(Object o)将指定元素添加到集合的开头
boolean offerLast(Object o)将指定元素添加到集合的结尾
Object peek()获取集合的第一个元素
Object peekFirst()获取集合的第一个元素
Object peekLast()获取集合的最后一个元素
Object poll()移除并返回集合第一个元素
Object pollFirst()移除并返回集合第一个元素
Object pollLast()移除并返回集合最后一个元素
void push(Object o)将指定元素添加到集合的开头
Object pop()移除并返回集合的第一个元素
e.g:
package arraylist;
import java.util.LinkedList;
public class arraylist {
      public static void main(String[]args)
      {
    	  LinkedList link = new LinkedList();
    	  link.add("s1");
    	  link.add("s2");
    	  link.add("s3");
    	  System.out.println(link);
    	  link.offer("offer");
    	  link.push("push");
    	  System.out.println(link);
    	  Object object = link.peek();
    	  System.out.println(object);
    	  link.removeFirst();
    	  link.pollLast();
    	  System.out.println(link);
      }
}

Collection 集合遍历

Iterator 遍历集合(迭代器)

e,g:
package arraylist;
import java.util.Iterator;
import java.util.ArrayList;
public class arraylist {
      public static void main(String[]args)
      {
    	 ArrayList list = new ArrayList();
    	 list.add(1);
    	 list.add(2);
    	 list.add(3);
    	 Iterator iterator = list.iterator();
    	 while(iterator.hasNext())
    	 {
    		 Object obj = iterator.next();//调用next()函数时,必须保证要获取元素存在,否则会抛出NoSuchElementException 异常
    		 System.out.println(obj);
    	 }
      }
}

foreach 遍历集合

e.g:
package arraylist;
import java.util.ArrayList;
public class arraylist {
      public static void main(String[]args)
      {
    	 ArrayList list = new ArrayList();
    	 list.add(1);
    	 list.add(2);
    	 list.add(3);
    	 for(Object obj : list) {
    		 System.out.println(obj);
    	 }
      }
}

注意:
1.foreach 循环虽然书写起来很简洁,但在使用时也存在一定的局限性。当使用foreach循环遍历集合和数组时,只能访问集合中的元素,不能对其中的元素进行修改
原因是:临时变量指向一个新的字符串,这和数组中的元素没有一点关系。普通的for循环可以修改
2.在使用Iterator迭代器对集合中的元素进行迭代时,如果调用了集合对象的remove()方法去删除元素,会出现异常。

package arraylist;
import java.util.Iterator;
import java.util.ArrayList;
public class arraylist {
      public static void main(String[]args)
      {
    	 ArrayList list = new ArrayList();
    	 list.add("jack");
    	 list.add("Annie");
    	 list.add("rose");
    	 list.add("Tom");
    	 Iterator iterator = list.iterator();
    	 while(iterator.hasNext())
    	 {
    		 Object obj = iterator.next();//调用next()函数时,必须保证要获取元素存在,否则会抛出NoSuchElementException 异常
    		 if("Annie".equals(obj))
    		 {
    			 //list.remove(obj);
    			 //想要删除方法1
    			 // break;
    			 //方法2
    			 iterator.remove();
    		 }
    	 }
    	    		 System.out.println(list);
      }
}

不这样做,按照原来的方法在运行时会出现 ConcurrentModificationException 这个异常,因为使用list.remove()会使得迭代器预期的迭代次数发生变化,导致迭代结果不正确。

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

dearzcs

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值