最近又系统的复习了一下Java集合框架的相关知识,下面我将逐个记录下这块的知识。
先讲讲什么是对象数组吧
对象数组:数组即可以存储基本的数据类型,也可以存储引用类型。它存储应用类型的时候就叫做对象数组。
首先我们要知道,Java语言是一个面向对象语言,我们需要操作很多的对象,所以我们需要存储这多个对象,我们就需要一些容器
(StringBuffer和数组),但是呢,数组的长度是固定的,不能适应变化的需求,所以java提供了集合供我们使用
集合Collection
1、集合和数组的区别
- 长度区别
- 数组是固定的
- 集合是可变的
- 内容区别
- 数组可以是基本类型,也可以是引用类型
- 集合只能是引用类型
- 元素内容
- 数组只能存储同一种类型
- 集合可以存储不同的类型(其实集合一般存储的也是同一种类型)
2、集合的继承体系结构
学习集合框架我们一定要清楚集合的继承体系结构,我相信不少同学都跟我一样,学完就忘了hhh,来复习一下吧
由于需求的不同,Java给我们提供了不同的集合类,二者多个集合类的数据结构不同,但是它们都是要提供存储和遍历功能的
把他们的共性向上提取,最终形成了集合的继承体系结构
- Collection
- List
- ArrayList
- Vector
- LinkedList
- Set
- HashSet
- TreeSet
- List
上面就是集合的一个总的体系结构
3、Collection是集合的顶层接口,子体系有重复的,有唯一的,有无序的,有有序的
使用步骤:
- 创建集合对象
- 创建元素独享
- 把元素添加到集合
- 遍历集合
- 通过集合对象获取得带器对象
- 通过迭代器对象的hasNext方法判断是否有元素
- 通过迭代器对象的next方法获取元素并移动到下一个位置
功能概述:
添加功能
boolean add(Object obj):添加一个元素
boolean addAll(Collection c):添加一个集合的元素
删除功能
void clear():移除所有元素
boolean remove(object o):移除一个元素
boolean removeAll(Collection c):移除一个集合的元素
判断功能
boolean contains(Object c):判断集合中是否包含指定的元素
boolean containsAll(Collection c):判断集合中是否包含指定的集合元素(是一个还是所有)
boolean isEmpty(0:判断集合是否为空
获取功能
Iterator<E> iterator() 重点
迭代器,是遍历集合的一种方式
是依赖于集合存在的
Iterator it = c.iterator()
迭代器方法:hasnext() next()
迭代器为什么不定义一个类,而定义一个接口?
假设迭代器定义的是一个类,这样我们可以创建该类的对象,调用该类的方法来实现集合的遍历。
但是java中提供了很多的集合类,而这些集合类的数据结构是不同的,所以存储方式和遍历方式是不同的。
最终,就没有定义迭代器类。
而无论你是哪种集合,你都应该具备遍历或者获取功能,并且最好在辅助于判断功能,这样在获取前先判断再获取,这样就更不容易出错。所以判断和获取应该是一个集合遍历所具备的功能,每种集合方式又不太一样,所以提取出来这两个功能,并不提供具体实现,这种方式就是接口
那么真正的具体实现类在哪里呢?
在真正的具体的子类中,以内部类的方式体现。
长度功能
int size():元素的个数
面试题:数组有没有length()方法?没有
字符串有没有length()方法?有
集合有没有length()方法?没有
交集功能
boolean retainAll(Collection c):两个集合都有的元素?思考元素去哪儿了,返回的boolean又是什么意思?
7.把集合转换为数组
Object[] toArray()
4、Collection集合的案例(遍历方式 迭代器)
a、存储字符串并遍历
import java.util.Collection;
import java.util.ArrayList;
import java.util.Iterator;
public class CollectionDemo{
public static void main(String[] args){
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);
}
}
}
b、存储自定义对象并遍历
import java.util.Collection;
import java.util.ArrayList;
import java.util.Iterator;
public class Student{
private String name;
private age;
public Student(){}
public Student(String name,String age){
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
public static StudentDemo{
public static void main(String[] args){
Collection c = new Arraylist();
Student s1 = new Student("公孙离",27);
Student s2 = new Student("武则天",24);
Student s3 = new Student("花木兰",25);
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)
}
}
}
传送门:List
传送门:Set