集合(一)

  • 版权声明
  • 一、集合概述
  • 1、什么是集合
  • 2、集合与数组的区别
  • 3、集合框架
  • (1)Java集合框架(接口定义)
  • (2)Java集合框架(实现类)
  • (3)什么时候该使用什么样的集合
  • 二、Collection
  • 1、主要方法
  • 2、元素包含
  • 3、集合操作
  • (1)集合关系
  • (2)集合实现
  • 4、集合转数组
  • 5、迭代器
  • (1)Iterator接口
  • 三、List
  • 1、特有方法
  • (1)常用功能
  • (2)ListIterator
  • (3)集合遍历



版权声明

  • 本文原创作者:清风不渡
  • 博客地址:

一、集合概述

1、什么是集合

  从字面意思理解,集合就是把具有相同性质的一类东西汇聚成一个整体。在面向对象中,对事物都是以对象的形式体现。为了方便对多个对象的操作,需要存储多个对象的容器,而集合就是存储多个对象最常用的一种方式。
  集合中的主要操作:
  1、将对象添加到集合
  2、从集合中删除对象
  3、从集合中查找对象
  4、从集合中修改对象

2、集合与数组的区别

  有时,我们无法预先知道需要多少个对象,那么使用数组储存时,它的长度不好定义,但是集合就解决了这样的问题。在集合中可以储存任意类型的对象,而且集合的大小是可变的,具体区别如下:

Java中向list集合中的第一个元素位置插入数据 java list 第一个_集合

3、集合框架

  从各种集合形式中提取公共要素,形成了一个集合的解决方案,就是Java的集合框架。

(1)Java集合框架(接口定义)

Java中向list集合中的第一个元素位置插入数据 java list 第一个_List_02


Java中向list集合中的第一个元素位置插入数据 java list 第一个_List_03

(2)Java集合框架(实现类)

Java中向list集合中的第一个元素位置插入数据 java list 第一个_java_04

(3)什么时候该使用什么样的集合

  为什么出现这么多集合容器?因为每–个容器对数据的存储方式不同,为各种存储方式提供了多样化的选择(存储+操作)。

Java中向list集合中的第一个元素位置插入数据 java list 第一个_集合_05

二、Collection

  Collection是一个集合接口,为集合对象提供了最大化的统一操作方式。 集合类都是在java.util包中,因此Collection接口就是java.util.Collection
  Collection没有实现类,通常用于对实现子接口的对象引用。例如,使用List 的具体实现类ArrayList创建一个集合对象,例如:

Collection coll = new Arraylist();

1、主要方法

Java中向list集合中的第一个元素位置插入数据 java list 第一个_List_06

2、元素包含

Java中向list集合中的第一个元素位置插入数据 java list 第一个_System_07


  注: contains内部是依赖于equals方法进行比较的,所有支持contains判断的对象必须重写equals方法。请注意Java规范:重写equals方法时重写hashCode方法。

3、集合操作

(1)集合关系

  下图中有A、B、C三个集合,判断它们的集合关系

Java中向list集合中的第一个元素位置插入数据 java list 第一个_集合_08


  集合关系:

  子集:集合C是集合A的子集,因为C的所有元素都在A中存在。

  并集:集合A和集合B的并集,范围是二者的所有元素的全部。

  交集:集合A和集合B的交集,范围是二者所共有的所有元素。

  补集:集合B相对于集合A的补集,范围是在集合B中,除去集合A和B的交集,剩下的所有元素称为B对A的补集。

(2)集合实现

Java中向list集合中的第一个元素位置插入数据 java list 第一个_集合_09


  注意: 进行集合运算的时候,要求对象实现equals方法,用于比较对象是否相等

4、集合转数组

  集合转数组有两种方法,如下:

Java中向list集合中的第一个元素位置插入数据 java list 第一个_集合_10


  示例如下:

  学生类:

package cn.com;

public class Student{
	
	private String name;
	private String gender;
	private Integer age;

	public Student() {
		super();
		// TODO Auto-generated constructor stub
	}
	public Student(String name, String gender, Integer age) {
		super();
		this.name = name;
		this.gender = gender;
		this.age = age;
	}


	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getGender() {
		return gender;
	}
	public void setGender(String gender) {
		this.gender = gender;
	}
	public Integer getAge() {
		return age;
	}
	public void setAge(Integer age) {
		this.age = age;
	}
	@Override
	public String toString() {
		return "Student [name=" + name + ", gender=" + gender + ", age=" + age + "]";
	}
}

  测试类:

package cn.com;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;

public class Demo {

	public static void main(String[] args) {
		Collection<Student> collection = new ArrayList<Student>();
		collection.add(new Student("张三", "男", 17));
		collection.add(new Student("李四", "男", 18));
		
		//方式一
		Object[] array = collection.toArray();
		System.out.println(Arrays.toString(array));
		//方式二
		//根据集合大小来构建相同大小的数组
		Student[] studentArray = new Student[collection.size()];
		//将集合元素复制到数组中,可以使用对象的具体类型
		collection.toArray(studentArray);
		System.out.println(Arrays.toString(studentArray));
	}
}

5、迭代器

  Java实现了迭代器Iterator对象,它提供一些方法实现了对集合中元素的遍历。Collection接口中定义了获取迭代器的方法(iterator()), 所有的Collection类型的集合都可以通过这个方法获取自身的迭代器。

(1)Iterator接口

  该接口就是 迭代器接口,定义了常见的迭代方法,如下:

Java中向list集合中的第一个元素位置插入数据 java list 第一个_java_11


  每个迭代器中都有-一个隐含的位置指针,从集合中获得迭代器时,这个位置指针指向第一个元素之前,此时直接获取元素时将抛出异常,必须调用next()将位置指针移到第一个元素的位置上才可以开始正确的访问,具体的操作我们在下面的实例中展示

三、List

  List是一个有序集合,它按元素加入到集合中的顺序依次摆放。注意:不是按集合中内置对象的属性值排序,而是按照插入位置的顺序

1、特有方法

  由于List集合中元素是有序的,它的所有实现类都支持索引,这些方法都是和索引有关的:

Java中向list集合中的第一个元素位置插入数据 java list 第一个_System_12

(1)常用功能

package cn.com;

import java.util.ArrayList;
import java.util.List;

public class Demo {

	public static void main(String[] args) {
		List<String> list = new ArrayList<String>();
		// add方法将元素加入最后
		list.add("Jack");
		list.add("Lucy");
		list.add("Tom");
		// 将元素加到指定位置
		list.add(1, "Bruce");
		System.out.println("集合元素:" + list);

		List<String> list2 = new ArrayList<String>();
		list2.add("张三");
		list2.add("李四");
		// 将list2添加到list的指定位置
		list.addAll(1, list2);
		System.out.println("集合元素:" + list);

		// 根据索引值获取元素
		System.out.println("get:" + list.get(1));
		// 使用get方法遍历集合
		for (int i = 0; i < list.size(); i++) {
			System.out.print(list.get(i) + ",");
		}
		System.out.println("");
		// 替换指定位置的元素
		list.set(2, "清风不渡");
		System.out.println("集合元素:" + list);

		// 删除指定位置的元素
		list.remove(1);
		System.out.println("集合元素:" + list);
	}
}

执行结果:

Java中向list集合中的第一个元素位置插入数据 java list 第一个_java_13

(2)ListIterator

  ListIterator是List集合特有的迭代器,支持在迭代过程中添加元素和修改元素,它的主要方法如下:

Java中向list集合中的第一个元素位置插入数据 java list 第一个_List_14

package cn.com;

import java.util.ArrayList;
import java.util.List;
import java.util.ListIterator;

public class Demo {

	public static void main(String[] args) {
		List<String> list = new ArrayList<String>();
		// add方法将元素加入最后
		list.add("Jack");
		list.add("Lucy");
		list.add("Tom");
		list.add("Bruce");
		
		ListIterator<String> listIterator = list.listIterator();
		System.out.println("有上一个元素吗?"+listIterator.hasPrevious());
//		System.out.println("获取上一个元素:"+listIterator.previous());
		listIterator.next();
		System.out.println("获取上一个元素:"+listIterator.previous());
	}
}

(3)集合遍历

  遍历list集合共有四种方式,示例如下:

package cn.com;

import java.util.ArrayList;
import java.util.List;
import java.util.ListIterator;

public class Demo {

	public static void main(String[] args) {
		List<String> list = new ArrayList<String>();
		// add方法将元素加入最后
		list.add("Jack");
		list.add("Lucy");
		list.add("Tom");
		list.add("Bruce");
		
		System.out.println("------get方法遍历------");
		for(int i=0;i<list.size();i++) {
			System.out.print(list.get(i)+",");
		}
		System.out.println();
		System.out.println("------增强for循环遍历------");
		for(String value : list) {
			System.out.print(value+",");
		}
		System.out.println();
		System.out.println("------使用迭代器正序遍历------");
		ListIterator<String> listIterator = list.listIterator();
		while(listIterator.hasNext()) {
			System.out.print(listIterator.next()+",");
		}
		System.out.println();
		System.out.println("------使用迭代器逆序遍历------");
		while(listIterator.hasPrevious()) {
			System.out.print(listIterator.previous()+",");
		}
	}
}

  运行结果:

Java中向list集合中的第一个元素位置插入数据 java list 第一个_System_15