Java集合(一)

117 阅读4分钟

集合(Collection)

概述

  • 存储对象--存储多个对象--需要一个容器
  • 数组和StringBuffer,前者长度固定且只能存储同一种数据元素;后者只针对字符串
  • so~~提出集合的概念

集合和数组的区别

  • 长度
    • 数组的长度固定
    • 集合长度可变
  • 内容
    • 数组只能存储同一种类型的元素
    • 集合可存储不同类型的元素
  • 元素的数据类型
    • 数据基本数据类型和引用数据类型均可
    • 集合只存储引用数据类型

集合的继承体系结构

Collection的功能

添加
  • boolean add(Object obj);//添加一个元素
  • boolean addAll(Collection c);//添加一个集合的元素,允许有重复
删除
  • void clear();//移除所有元素
  • boolean remove(Object o);//移除一个元素
  • boolean removeAll(Collection c);//移除与c集合的交集,只要有一个元素被移除,就是true
判断
  • boolean contains(Object o);//判断集合中是否包含指定的元素
  • boolean containAll(Collection c);//判断集合中是否包含指定的集合元素,只有包含c中所有元素才叫包含
  • boolean isEmpty();//判断集合是否为空
获取
  • Iterator<E> iterator();//迭代器,集合的专有遍历方式
    • Object next();获取元素,并移动到下一个位置
    • boolean hasNext();//判断是否还有下一个
Iterator it = c.iterator();
while(it.hasNext()){
    String s = (String) it.next();
}
长度
  • int size();//元素个数
  • 面试题:数组、字符串、集合是否有length()方法??
交集
  • boolean retainAll(Collection c);//交集,保存在调用集合中,返回值取决于被调集合中的元素是否改变
把集合转换为数组
  • Object[] toArray();

Collection的遍历

  • 把集合转数组
  • 迭代器(集合专有方式)

迭代器

  • 是集合获取元素的方式
  • 是依赖于集合而存在的
  • 迭代器的原理和源码
    • 为什么定义?---为了一个接口而不是实现类
    • 迭代器的内部类实现

Collection集合的案例(遍历方式 推荐迭代器)

  • 集合的使用步骤
    • A: 创建集合对象
    • B: 创建元素对象
    • C: 把元素添加到集合
    • D: 遍历集合
      1. 通过集合对象获取迭代器对象
      2. 通过迭代器对象的hasNext()方法判断是否有元素
      3. 通过迭代器的next()方法获取元素并移动到下一个位置
案例1:存储字符串并遍历
        Collection c  = new ArrayList();
		
		c.add("hello");
		c.add("world");
		c.add("java");
		
		Iterator it = c.iterator();
		
		while(it.hasNext()) {
			String s = (String) it.next();
			System.out.println(s);
		}
案例2:存储自定义对象并遍历
		Collection c = new ArrayList();
		
		Student s1 = new Student("贾宝玉",22);
		Student s2 = new Student("林黛玉",18);
		Student s3 = new Student("薛宝钗",23);
		
		c.add(s1);
		c.add(s2);
		c.add(s3);
		
		Iterator it = c.iterator();
		
		while(it.hasNext()) {
			Student s = (Student) it.next();
			System.out.println(s.getName()+"----"+s.getAge());
		}

集合(List)

概述

  • List是Collection的子接口
  • 特点:有序,存储顺序和取出顺序一致,可重复

List的特有功能

添加

void add(int index,Object element);//在指定位置添加元素

获取

Object get(int index);//获取指定位置的元素

迭代器

ListIterator listIterator();//List特有

删除功能

Object remove(int index);//根据索引删除元素,返回被删除的元素

修改

Object set(int index,Obejct element);//根据索引修改元素,返回被修改的元素

List集合的特有遍历功能

  • 由size()和get()方法配合使用
        List list  = new ArrayList();
		
		list.add("hello");
		list.add("world");
		list.add("java");
		
		for(int x=0; x<list.size(); x++) {
			String s  = (String) list.get(x);
			System.out.println(s);
		}

列表迭代器

  • ListItetator listItetator();//List集合特有的迭代器
  • 该迭代器继承了Itetator 迭代器,可使用hasNext()和next()方法
  • 特有功能:
    • object previous();//获取上一个元素
    • boolean hasPrevious();//判断
    • 注意:可以逆向遍历,但是要先正向遍历,所以无意义,基本不使用。
并发修改异常
  • 出现的现象:
    • 迭代器遍历集合,集合修改集合元素
  • 原因:
    • 迭代器是依赖于集合的,而集合的改变迭代器并不知道
  • 解决方案:
    • 迭代器遍历,迭代器修改(ListIterator)
      • 元素添加在刚才迭代的位置
    • 集合遍历,集合修改
      • size()和get(),元素添加在集合的末尾

数据结构

  • 栈:先进后出
  • 队列:先进先出
  • 数组:查询快,增删慢
  • 链表:查询慢,增删快

List的子类特点

  • ArrayList
    • 底层数据结构是数组,查询快,增删慢。
    • 线程不安全,效率高
  • Vector
    • 底层数据结构是数组,查询快,增删慢。
    • 线程安全,效率低
  • LinkedList
    • 底层数据结构是列表,查询慢,增删快。
    • 线程不安全,效率高。