集合,List,ArrayList,Linkedlist----Java

集合

  1. 集合概述: 集合相当于一个容器,存储相同类型型的数据;相对于数组的长度固定,集合的长度不固定.
  2. 集合与数组的区别

相同点:
(1)都是用来存储数据的容器;
(2)都可以通过索引,有规律的操作方式来对数据进行操作;
不同点:
(1)存储的内容不同:
数组既可以存储基本数据类型,也可以存储引用数据类型;
集合只能存储引用数据类型,如果需要存储基本数据类型,其实里面存的是包装类对象;例如想要存储int类型的元素只能用integer包装类;
(2) 存储的数量不同:
数组的长度不可变,一旦确定大小就无法更改;
集合的长度可变,是一个可以伸缩的容器;
(3) 方法不同
数组中只有Object中定义的方法,以及有一个length属性;
集合中可以有很多方法;

3.集合的体系结构:
单列集合:每个元素都是一个单独的个体
双列集合:每个操作都是针对一对数据来进行的,一对数据作为一个单位;
在这里插入图片描述

Collection

概述和常用方法

  1. Collection 收集,集合; 导包 java.util
  2. Collection是单例集合的顶层接口,定义的是单例集合中共有的功能;
  3. 有两个子接口一个 set 一个list
  4. Collection是个接口,没有构造方法不能实例化,需要通过实现类来创建对象,使用接口类型的引用,执行实现类的对象`
//实例化例子=>多态向上转型,可以获取到父类中所有的方法;
Collection collection = new ArrayList();
  1. 常用的方法
  add(Object obj);添加
  remove(Object obj);删除
  clear();清空
  isEmpty();判断集合是否为空;
  contains(Object obj);判断集合中是否包含obj元素;
  size();返回集合中元素的个数;
  1. 四个带all的方法:集合与集合来进行操作 大集合来操作小集合

boolean addAll(Collection<? extends E> c) //集合相加
boolean removeAll(Collection<?> c) //删除两个集合相交的部分;
boolean containsAll(Collection<?> c) //判断两个集合是否含有包含关系不会改变集合
boolean retainAll(Collection<?> c) //获取两个集合中相交的部分,如果集合没有改变则返回false
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Collection中的遍历方法

Collection中的第一种遍历方法
  1. 转换成数组,通过遍历数组的的方式来遍历集合;
  2. 调用Object[] toArray():将调用者集合转换为Object类型的数组;
Collection中的第二种遍历方法:利用迭代器
  1. 集合自己内部就应该有一个可以迭代自己的对象,从集合对象中即可获取 Iterator iterator();
  2. 可以对Collection进行迭代遍历;
  3. Iterator的常规方法:
    boolean hasNext() 用来判断是否有下一个元素,如果有返回true;
    E next() 返回就是下一个元素;
    void remove() 删除迭代器中的元素;
    Iterator iterator() 把集合转换成迭代器;
  4. 操作:调用next()出现的异常
    在这里插入图片描述
    原因:没有下一个元素,在调用next()就会报错;
    解决方法:使用hasNext()先判断是否有下一个元素,再进行获取;
  5. 迭代器遍历原理

在这里插入图片描述

  1. Collection遍历代码示例
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;

public class CollectionText02 {
	public static void main(String[] args) {
		Collection col = new ArrayList();
//		Student stu01 = new Student(010,"zhangsan",18);
//		Student stu02 = new Student(011,"lisi",18);
//		Student stu03 = new Student(012,"wangwu",19);
//		col.add(stu01);
//		col.add(stu02);
//		col.add(stu03);
		
		//利用匿名对象进行实例化;简化了代码;
		col.add(new Student(010,"zhangsan",18));
		col.add(new Student(011,"lisi",18));
		col.add(new Student(012,"wangwu",19));
		//第一种遍历方法
/*		Object[] obj = col.toArray();
		for(int i = 0; i < obj.length;i++) {
			//将对象向下转型,才能拿到student的属性值;
			Student stu = (Student) obj[i];
			//通过重写toString方法,获取stu的属性值;
			System.out.println(stu.toString());
			//通过get方法得到stu的属性值;
			System.out.println(stu.getId()+" "+stu.getName()+" "+stu.getAge());
		}*/
		//第二种遍历.利用迭代器
		Iterator ite = col.iterator();
		while(ite.hasNext()) {
			Object obj = ite.next();
			System.out.println(obj);
		}
	}
}

遍历结果

List

  1. List是Collection的一个子接口;
  2. 特点:
  		有序:list的数据是怎么存入的就怎么取出;
  		有索引:可以根据索引利用普通的for循环进行遍历;
  		可以重复,list集合中可以存储重复值的数据;
  1. List的常规方法:
  	void add(int index,E element)   ==>根据索引来进行增加
  	 E set(int index, E element)   ==> 进行索引来进行修改
  	 E remove(int index)   ==> 根据索引来进行删除
  	 E get(int index)  ==> 根据索引得到具体的对象
  1. List的实现类:ArrayList,LinkList,Vector;
集合中的第三种遍历方法
  1. 示例代码
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

public class ListTest01 {
	public static void main(String[] args) {
		List li = new ArrayList();
		li.add(0, new New(1,"qw","asdf",new Date()));
		li.add(1, new New(2,"er","zxcv",new Date()));
		li.add(2, new New(3,"ty","bnmj",new Date()));
		for (int i = 0; i < li.size();i++) {
			//因为新定义的不是object类型所以需要将li.get(i),强制转换为New类型;
			New news = (New) li.get(i);
			System.out.println(news.toString());
		}
	}
}

在这里插入图片描述

并发异常 ListIterator
  1. ListIterator也是一个接口,不能实例化,是Iterator的子接口,比Iterator多一些方法
  2. ListIterator的方法
    E previous() ; 返回列表中的前一个元素;
    Boolean hasPrevious(); 如过以逆向遍历列表,列表迭代器有多个元素,则返回true;
    注意:如果要将集合中的数据倒着输出,需要把迭代器的指针指向最后,调用next();
  3. 并发异常
    在这里插入图片描述
    出现原因:在使用迭代器遍历集合的同时;使用集合对象增加集合元素;
    解决方法:使用迭代器遍历,迭代器添加或者集合遍历集合添加;

ArrayList

  1. ArrayList是List的一个实现类,可以插入null值;底层是由数组来进行存储的;
  2. 特点:查询修改快;增加删除慢;
  3. 没有特别的方法;
    在这里插入图片描述

LinkedList

  1. LinkedList也是List的实现类;可以插入null值;
  2. 提供了一些对头尾进行增加或者是删除的方法;
  3. 以链表的形式来进行存储;
  4. 特点:查询慢,增删快;
    在这里插入图片描述
  5. LinkedList 常用的方法:
  		public void addFirst(E e) 将指定元素插入此列表的开头
  		public void addLast(E e) 将指定元素添加到此列表的结尾
  		public E removeFirst()  移除并返回此列表的第一个元素
  		public E removeLast()  移除并返回此列表的最后一个元素
  		public E getFirst() 返回此列表的第一个元素
  		public E getLast() 返回此列表的最后一个元素
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值