Collection类->目录
集合和数组区别
- 长度区别:
- 存储数据类型的区别:
- 数组可以存储基本数据类型 , 也可以存储引用数据类型;
- 而集合只能存储引用数据类型
- 内容区别:
- 数组只能存储同种数据类型的元素 ,集合可以存储==不同类型==的元素
1.体系结构图

Collection常见API
方法声明 | 作用 |
---|
boolean add ( Object obj ) | 添加一个元素 |
boolean addAll ( Collection c ) | 添加一个集合的元素 |
方法声明 | 作用 |
---|
void clear() | 移除所有元素 |
boolean remove(Object o) | 移除一个元素 |
boolean removeAll(Collection c) | 移除一个集合的元素(一个) |
方法声明 | 作用 |
---|
boolean contains(Object o) | 判断集合中是否包含指定的元素 |
boolean containsAll(Collection c) | 判断集合中是否包含指定的集合元素(所有) |
boolean isEmpty( ) | 判断集合是否为空 |
方法声明 | 作用 |
---|
Iterator < E > iterator( ) | 迭代器遍历(重点) |
boolean retainAll ( Collection );
把集合转换为数组
Objec [ ] toArray()
面试题
- 数组有没有 length() 方法呢?字符串有没有length()方法呢 ? 集合有没有 length( ) 方法呢?
- 答:数组有 length 属性;字符串有length()方法;集合没有 length( ),但是有size( )方法
获取交集的注意事项
boolean retainAll ( Collection c )
- 获取交集。获取到的元素去c中,布尔类型的值表示集合是否==发生改变==
- 如果c.retainAll(c1), 获取到的交集元素去了c中,布尔类型的值表示c这个集合是否发生改变。如果改变了就返回true.
public class CollectionDemo1 {
public static void main(String[] args) {
Collection<String> c1 = new ArrayList<>();
Collection<String> c2 = new ArrayList<>();
c1.add("田馥甄");
c1.add("银临");
c1.add("谢春花");
c2.add("谢春花");
System.out.println("c1获取交集前:"+c1);
System.out.println("c2获取交集前:"+c2);
System.out.println("获取交集后的集合是否发生改变: "+c1.retainAll(c2));
System.out.println("C1获取交集后: "+c1);
System.out.println("C2: "+c2);
}
}
- 程序运行结果:
c1获取交集前:[田馥甄, 银临, 谢春花]
c2获取交集前:[谢春花]
获取交集后的集合是否发生改变: true
C1获取交集后: [谢春花]
C2: [谢春花]
集合的遍历
- 其实就是依次获取集合中的每一个元素。有以下两种方法:
1. 用数组遍历
- 把集合转成数组;
- 通过遍历数组实现遍历集合
集合转为数组方法:
Object[] toArray():
import java.util.ArrayList;
import java.util.Collection;
public class CollectionTraversalArray {
public static void main(String[] args) {
Collection<String> c = new ArrayList<String>();
c.add("周杰伦");
c.add("朴树");
c.add("毛不易");
Object[] obj = c.toArray();
for(Object ob:obj) {
String str = (String)ob;
System.out.print(str+" ");
}
}
}
package com.itbull;
import java.util.ArrayList;
import java.util.Collection;
public class CollectionTraversalSinger {
public static void main(String[] args) {
Singer s1 = new Singer("周杰伦","晴天");
Singer s2 = new Singer("朴 树","白桦林");
Singer s3 = new Singer("谭维维","如果有来生");
Collection<Singer> c = new ArrayList<Singer>();
c.add(s1);
c.add(s2);
c.add(s3);
Object[] arr = c.toArray();
for(Object obj:arr) {
Singer ob = (Singer) obj;
System.out.println(ob.getName()+"-----"+ob.getSongName());
}
}
}
public class Singer {
private String name;
private String songName;
public Singer() {
super();
}
public Singer(String name, String songName) {
super();
this.name = name;
this.songName = songName;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSongName() {
return songName;
}
public void setSongName(String songName) {
this.songName = songName;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((name == null) ? 0 : name.hashCode());
result = prime * result + ((songName == null) ? 0 : songName.hashCode());
return result;
}
@Override
public String toString() {
return "Singer [name=" + name + ", songName=" + songName + "]";
}
}
2. 用迭代器遍历(重点)
- Iterator 中有如下几个方法可以用来获取集合中的元素:
方法名 | 作用 |
---|
boolean hasNext ( ) | 判断是否有下一个元素 |
Object next ( ) | 获取下一个元素 |
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
public class CollectionTraversalIterator {
public static void main(String[] args) {
Collection<String> c = new ArrayList<String>();
c.add("孙燕姿");
c.add("金玟岐");
c.add("范玮琪");
Iterator<String> it = c.iterator();
while(it.hasNext()) {
System.out.println(it.next());
}
}
}
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
public class CollectionIteratorSinger {
public static void main(String[] args) {
Singer s1 = new Singer("回音哥","海绵宝宝");
Singer s2 = new Singer("双 笙","葬花吟");
Singer s3 = new Singer("玄 觞","不朽之罪");
Collection<Singer> c = new ArrayList<Singer>();
c.add(s1);
c.add(s2);
c.add(s3);
Iterator<Singer> it = c.iterator();
System.out.println("\t\t歌手名字\t\t歌曲");
while (it.hasNext()) {
Singer singer = it.next();
System.out.println("\t\t"+singer.getName()+"\t\t"+singer.getSongName());
}
}
}