集合(一)
- 版权声明
- 一、集合概述
- 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、集合与数组的区别
有时,我们无法预先知道需要多少个对象,那么使用数组储存时,它的长度不好定义,但是集合就解决了这样的问题。在集合中可以储存任意类型的对象,而且集合的大小是可变的,具体区别如下:
3、集合框架
从各种集合形式中提取公共要素,形成了一个集合的解决方案,就是Java的集合框架。
(1)Java集合框架(接口定义)
(2)Java集合框架(实现类)
(3)什么时候该使用什么样的集合
为什么出现这么多集合容器?因为每–个容器对数据的存储方式不同,为各种存储方式提供了多样化的选择(存储+操作)。
二、Collection
Collection是一个集合接口,为集合对象提供了最大化的统一操作方式。 集合类都是在java.util包中,因此Collection接口就是java.util.Collection
Collection没有实现类,通常用于对实现子接口的对象引用。例如,使用List 的具体实现类ArrayList创建一个集合对象,例如:
Collection coll = new Arraylist();
1、主要方法
2、元素包含
注: contains内部是依赖于equals方法进行比较的,所有支持contains判断的对象必须重写equals方法。请注意Java规范:重写equals方法时重写hashCode方法。
3、集合操作
(1)集合关系
下图中有A、B、C三个集合,判断它们的集合关系
集合关系:
子集:集合C是集合A的子集,因为C的所有元素都在A中存在。
并集:集合A和集合B的并集,范围是二者的所有元素的全部。
交集:集合A和集合B的交集,范围是二者所共有的所有元素。
补集:集合B相对于集合A的补集,范围是在集合B中,除去集合A和B的交集,剩下的所有元素称为B对A的补集。
(2)集合实现
注意: 进行集合运算的时候,要求对象实现equals方法,用于比较对象是否相等
4、集合转数组
集合转数组有两种方法,如下:
示例如下:
学生类:
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接口
该接口就是 迭代器接口,定义了常见的迭代方法,如下:
每个迭代器中都有-一个隐含的位置指针,从集合中获得迭代器时,这个位置指针指向第一个元素之前,此时直接获取元素时将抛出异常,必须调用next()将位置指针移到第一个元素的位置上才可以开始正确的访问,具体的操作我们在下面的实例中展示
三、List
List是一个有序集合,它按元素加入到集合中的顺序依次摆放。注意:不是按集合中内置对象的属性值排序,而是按照插入位置的顺序
1、特有方法
由于List集合中元素是有序的,它的所有实现类都支持索引,这些方法都是和索引有关的:
(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);
}
}
执行结果:
(2)ListIterator
ListIterator是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");
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()+",");
}
}
}
运行结果: