集合的由来
数组长度是固定的,当添加的元素超过了数组的长度时需要对数组重新定义,太麻烦,Java内部给我们提供了集合类,能存储任意对象,长度是可以改变的,随着元素的增加而增加,随着元素的减少而减少。
集合类的特点
- 集合只能存储对象。JDK 1.5之后可以存基本数据类型,自动装箱为基本类型包装类。
- 集合的长度是可变的。
- 集合可以存储不同类型的对象。
数组和集合的区别
- 存储:
数组既可以存储基本数据类型,又可以存储引用数据类型,基本数据类型存储的是值,引用数据类型存储的是地址值。
集合只能存储引用数据类型(对象)集合中也可以存储基本数据类型,但是在存储的时候会自动装箱变成对象。 - 长度:
数组长度是固定的,不能自动增长。
集合的长度是可变的,可以根据元素的增长而增长。
数组和集合什么时候用
- 如果元素个数是固定的推荐使用数据。
- 若元素个数不是固定的推荐使用集合。
集合继承体系图
Collection集合的基本功能
- 添加:
boolean add(E e)
:添加元素。
boolean addAll
:将集合c中的所有元素添加到当前集合。 - 删除:
void clear()
:清空容器。
boolean remove(Object obj)
:移除一个元素。
boolean removeAll(Collection c)
:移除与c相同的元素。
boolean retainAll(Collection c)
:保留与c相同的元素。 - 判断:
boolean contains(Object obj)
:判断是否包含此元素。
boolean containsAll(Collection collection)
:判断是否包含一堆元素。
boolean equals(Object obj)
:比较此Collection与指定对象是否相等。
boolean isEmpty()
:判断集合是否为空。 - 获取:
Iterator iterator()
:取出。
int hashCode()
:返回此 collection 的哈希值。
int size()
:返回此 collection 中元素的个数。
boolean retainAll(Collection c)
:取交集。
Object toArray()
:返回此 collection 中所有元素的数组。
T[] toArray(T[] a)
:返回包含此 collection 中所有元素的数值。
集合的遍历之集合转数组遍历
先创建实体类
class People {
private String name;
private int age;
public People() {
}
public People(String name, int age) {
super();
this.name = name;
this.age = age;
}
//get set方法
.....
}
主函数
package com.whoami.collection
import java.util.ArrayList;
import java.util.Collection;
import com.whoami.entity.People;
/**
* toArray()遍历集合
* @author whoami_zq
*/
public class TestCollection {
public static void main(String[] args) {
Collection<People> collection = new ArrayList<>();
collection.add(new People("张三", 23));
collection.add(new People("李四", 24));
collection.add(new People("王五", 25));
collection.add(new People("赵六", 26));
Object[] arr = collection.toArray(); // 将集合转换成数组
for (int i = 0; i < arr.length; i++) {
People p = (People) arr[i]; // 强转成 People
System.out.println(p.getName() + "," +p.getAge());
}
}
}
集合的遍历之迭代器遍历(集合的专用遍历方式)
//先创建实体类
class People{
// 实体类同上
......
}
主函数
package com.whoami.iterator;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import com.whoami.entity.People;
/**
* Iterator 遍历集合
* @author whoami_zq
*/
public class TestIterator {
public static void main(String[] args) {
Collection<People> collection = new ArrayList<People>();
collection.add(new People("张三", 23));
collection.add(new People("李四", 24));
collection.add(new People("王五", 25));
collection.add(new People("赵六", 26));
System.out.println("------------第一种使用方式--------------");
Iterator<People> it = collection.iterator(); // 获取迭代器
while (it.hasNext()) { // 判断集合中是否有元素
People p = (People) it.next(); // 向下转型
// 获取对象中的姓名和年龄
System.out.println(p.getName() + "," +p.getAge());
}
System.out.println("------------第二种使用方式---------------");
for (Iterator<People> it2 = collection.iterator(); it2.hasNext();) {
People p2 = (People) it2.next(); // 向下转型
System.out.println(p2.getName() + "," +p2.getAge());
}
}
}
迭代器
- 迭代器就是取出集合元素的方式
- 迭代器的作用
因为每个集合中元素的取出方式都不一样,于是就把元素的取出方式进行抽取,并定义在集合内部,这样取出方式就可以直接访问集合内部的元素;
而每个容器的数据结构不同,所以取出动作的细节也不一样,但是有共性内容:判断和取出。
那么就将共性内容进行抽取,从而形成了接口 Iterater。 - 获取迭代器的方法:
Iterator<E> iterator()
:返回在此 collection 的元素上进行迭代的迭代器。
Iterator<E> iterator()
:返回在此 set 中的元素上进行迭代的迭代器。 - 迭代器方法:
boolean hasNext()
:如果仍有元素可以迭代,则返回 true。
E next()
:返回迭代的下一个元素。
void remove()
:从迭代器指向的 collection 中移除迭代器返回的最后一个元素(可选操作)。
希望能帮助到有需要的人。