集合
数组的特点:
- 只能存储同一种数据类型的数据
- 一旦初始化,长度固定
- 数组中的元素与元素之间的内存地址是连续的。
===Object类型的数组可以存储任意类型的数据
集合:集合是存储对象数据的集合容器
集合比数组的优势:
- 集合何以存储任意类型的对象数据,数组只能存储同一种数据类型的数据
- 集合的长度可以发生变化,数组的长度固定
Collection 单列集合的根接口
(文章中暂时没有考虑集合的泛型,最后有一篇文章总结了泛型的应用)
Collection下有很多子接口,其中两个经常使用的集合接口是List和Set
- List接口:实现了List接口的集合类,具有有序,可重复的特点。了解List接口点击这里!!
1.1 List下的 ArrayList 实现类 了解ArrayList点击这里!!
1.2 List下的 LinkedList 实现类了解LinkedList点击这里!!
1.3 List下的 Vector 实现类(不常用)了解Vector点击这里!! - Set接口:实现了Set接口的集合类,具有无序,不可重复的特点。
2.1 Set下的实现类 HashSet 了解HashSet点击这里!!
2.2 Set下的实现类 TreeSet 了解TreeSet点击这里!!
Collection 接口的方法:
1.增加:
add(E e) //返回的结果是一个boolean值,添加成功为true,失败为false
addAll(Collection c) //把一个集合添加到另一个集合中去
2.删除:
clear() //清空集合中的元素
remove(Object o) //删除集合中的指定元素,成功返回true,失败为false
removeAll(Collection c) //删除与c集合中相同的元素
retainAll(Collection c) //保留与c集合中相同的元素
3.查看:
Size() //返回集合中元素的个数
4.判断:
contains(Object o) //判断集合是否包含某个元素o,包含为true,不包含为false
containsAll(Collection c) //判断集合是否包含c集合中的所有元素,全部包含为true,否则为false
isEmpty() //判断集合是否为空元素 空为true 不空为false
5.迭代:
toArray() //把集合中的元素全部存储到一个Object的数组中返回
iterator() //结果返回一个迭代器Iterator
迭代器的工作原理:了解详情点击这里
举例1:
package com.test
import java.util.ArrayList;
import java.util.Collection;
// Collection 接口的方法:(暂时不考虑集合的泛型)
//
// 1. 增加:
// add(E e) //返回的结果是一个boolean值,添加成功为true,失败为false
// addAll(Collection c) //把一个集合添加到另一个集合中去
// 2.删除:
// clear() //清空集合中的元素
// remove(Object o) //删除集合中的指定元素,成功返回true,失败为false
// removeAll(Collection c) //删除与c集合中相同的元素
// retainAll(Collection c) //保留与c集合中相同的元素
// 3.查看:
// size() //返回集合中元素的个数
public class Coll {
public static void main(String[] args) {
//添加的方法
Collection c= new ArrayList();//ArrayList是Collection接口的一个实现类
c.add("美国队长");
c.add("钢铁侠");
c.add("雷神");
System.out.println("集合c的元素:"+c);//集合c的元素:[美国队长, 钢铁侠, 雷神]
System.out.println("集合c中元素的个数:"+c.size());//集合c中元素的个数:3
Collection c2 = new ArrayList();
c2.add("钢铁侠");
c2.add("黑寡妇");
c2.add("浩克");
System.out.println("集合c2的元素:"+c2);//集合c中元素的个数:3
c.addAll(c2);
System.out.println("集合c添加集合c2后:"+c);//集合c添加集合c2后:[美国队长, 钢铁侠, 雷神, 钢铁侠, 黑寡妇, 浩克]
c.remove("浩克");
System.out.println("移除浩克后集合c的元素:"+c);//移除浩克后集合c的元素:[美国队长, 钢铁侠, 雷神, 钢铁侠, 黑寡妇]
// c.removeAll(c2);
// System.out.println("删除与c2集合中相同的元素后:"+c);
// 删除与c2集合中相同的元素后:[美国队长, 雷神]
c.retainAll(c2);
System.out.println("保留与c2集合中相同的元素:"+c);//保留与c2集合中相同的元素:[钢铁侠, 钢铁侠, 黑寡妇]
c.clear();
System.out.println("清空集合c的元素:"+c);//清空集合c的元素:[]
}
}
举例2:
package com.test;
import java.util.ArrayList;
import java.util.Collection;
// 4.判断:
// contains(Object o) //判断集合是否包含某个元素o,包含为true,不包含为false
// containsAll(Collection c) //判断集合是否包含c集合中的所有元素,全部包含为true,否则为false
// isEmpty() //判断集合是否为空元素 空为true 不空为false
class Person{
int id;
String name;
public Person(int id, String name) {
super();
this.id = id;
this.name = name;
}
@Override
public String toString() {
return "{编号:"+this.id+" 代号:"+this.name+"}";
}
@Override
public boolean equals(Object obj) {
Person p=(Person) obj;
return this.id==p.id;
}
@Override
public int hashCode() {
return super.hashCode();
}
}
public class Coll2 {
public static void main(String[] args) {
Collection c= new ArrayList();//ArrayList是Collection接口的一个实现类
c.add("美国队长");
c.add("钢铁侠");
c.add("雷神");
System.out.println("集合c的元素:"+c);//集合c的元素:[美国队长, 钢铁侠, 雷神]
System.out.println("集合c是否为空:"+c.isEmpty());//集合c是否为空:false
System.out.println("c中是否有美国队长?"+c.contains("美国队长"));//c中是否有美国队长?true
Collection c2=new ArrayList();
c2.add(new Person(1, "蜘蛛侠"));
c2.add(new Person(2, "幻世"));
c2.add(new Person(3, "黑豹"));
System.out.println("集合才c2的元素"+c2);//集合才c2的元素[{编号:1 代号:蜘蛛侠}, {编号:2 代号:幻世}, {编号:3 代号:黑豹}]
System.out.println("存在该元素?"+c2.contains(new Person(3, "黑豹")));
//存在该元素?true
//注意:Person中重写了equals()方法,只要id相同即视为同一个元素,所以这里返回了true。如果没有重写equals()方法,这里返回false。因为contains()方法内部使用equals()方法进行比较
Collection c3=new ArrayList();
c3.add(new Person(1, "蜘蛛侠"));
c3.add(new Person(2, "幻世"));
System.out.println("c2包含c3中的所有元素吗:"+c2.containsAll(c3));//c2包含c3中的所有元素吗:true
}
}
举例3:
package com.test;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
// 5.迭代:
// toArray() //把集合中的元素全部存储到一个Object的数组中返回
public class Coll3 {
public static void main(String[] args) {
Collection c= new ArrayList();//ArrayList是Collection接口的一个实现类
c.add("美国队长");
c.add("钢铁侠");
c.add("雷神");
Object[] arr=c.toArray();
System.out.println("集合c的元素:"+Arrays.toString(arr));//集合c的元素:[美国队长, 钢铁侠, 雷神]
Collection c2=new ArrayList();
c2.add(new Person(1, "蜘蛛侠"));
c2.add(new Person(2, "幻世"));
c2.add(new Person(3, "黑豹"));
Object[] arr2=c2.toArray();
for (int i = 0; i < arr2.length; i++) {
Person p=(Person) arr2[i];
if(p.id==1) {
System.out.println(p);
}
}
//{编号:1 代号:蜘蛛侠}
}
}
举例4:
package com.test;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
// 5.迭代:
// iterator() //结果返回一个迭代器Iterator
//
// 迭代器的作用:就是用于抓取集合中的元素
// 迭代器的方法:
// hasNext() //判断是否有下一个元素可迭代,有返回true,没有返回false
// next() //取出元素
// remove() //移除迭代器最后一次返回的元素
public class Coll4 {
public static void main(String[] args) {
Collection c= new ArrayList();//ArrayList是Collection接口的一个实现类
c.add("美国队长");
c.add("钢铁侠");
c.add("雷神");
c.add("黑寡妇");
//遍历集合的元素----1.toArray()方法
// Object[] arr= c.toArray();
// for (int i = 0; i < arr.length; i++) {
// System.out.print(arr[i]+",");
// }
//遍历集合的元素----2.iterator()
Iterator it = c.iterator();
while(it.hasNext()) {
System.err.print(it.next()+",");
}
//美国队长,钢铁侠,雷神,黑寡妇,
}
}