集合的创建是相对于数组而言的,在使用数组的时候,创建之后数组的长度就已经被固定了,无法改变长度 ,而且存放的都是相同的类型, 所以为了方便使用, 我们创建了集合
数组 和 集合 的区别
数组
a.数组只能村相同数据类型的 – > 可以存引用数据类型 和 基本数据类型
b.数组一旦给定了长度,数组就不改变长度
集合
a.集合中 只能存引用数据类型(对象), 虽然只能保存引用类型 但是 也可以通过自动装箱来保存基本数据类型
b.集合的长度是可以发生变化的
那什么时候选用数组, 什么时候选用集合呢??
当数据固定的时候选用数组 当数据不固定的时候选用集合
在使用集合的时候, 我们选择用集合类来实现,java API提供了多种集合的实现.
collection是集合最基本的集合接口
总结下部分实现
/**
* 将集合转换成数组,并且遍历
*/
public static void fun7() {
Collection c1 = new ArrayList();
c1.add("a");
c1.add("b");
c1.add("c");
c1.add("d");
//将集合转换成数组
Object[] array = c1.toArray();
for (Object object : array) {
System.out.println(object);
}
System.out.println(Arrays.toString(array));
}
/**
* 清空集合
*/
public static void fun6() {
Collection c1 = new ArrayList();
c1.add("a");
c1.add("b");
c1.add("c");
c1.add("d");
//清空集合
c1.clear();
System.out.println(c1);
}
/**
* 判断有无指定元素,有返回true,并删除,反之
*/
public static void fun5() {
Collection c1 = new ArrayList();
c1.add("a");
c1.add("b");
c1.add("c");
c1.add("d");
//删除某个元素,集合中若有这个元素返回true并删除,反之,false,并且不作操作
boolean b1 = c1.remove("c");
System.out.println(b1);
System.out.println(c1);
}
/**
* 判断是否包含这个元素
*/
public static void fun4() {
Collection c1 = new ArrayList();
c1.add("a");
c1.add("b");
c1.add("c");
c1.add("d");
//是否包含某个元素 是返回true 反之
boolean b1 = c1.contains("c");
System.out.println(b1);
}
/**
* 获取集合长度
*/
public static void fun3() {
Collection c1 = new ArrayList();
c1.add("a");
c1.add("b");
c1.add("c");
c1.add("d");
//获取长度
int i1 = c1.size();
System.out.println(i1);
}
/**
* 判断集合是否为空
*/
public static void fun2() {
Collection c1 = new ArrayList();
c1.add("a");
c1.add("b");
c1.add("c");
c1.add("d");
//判断这个集合是否为空,是返回true 反之
boolean b1 = c1.isEmpty();
System.out.println(b1);
}
/**
* add添加
*/
public static void fun1() {
//创建接口对象,对照多态创建方法,父类引用指向子类对象
Collection c1 = new ArrayList();
//添加 -- 集合可以添加任何类型的数据
//因为add(Object obj)在添加的时候,有自动装箱的过程
//将数据类型转变为基类
c1.add("a");
c1.add(100);
c1.add(true);
c1.add(new Students("刘翔", 18));
System.out.println(c1);
}
练习:
需求:创建一个集合, 添加三个学生 遍历集合
要求:只打印学生的姓名
public static void fun8() {
Collection c1 = new ArrayList();
c1.add(new Students("科比", 29));
c1.add(new Students("艾弗森", 24));
c1.add(new Students("麦迪", 26));
//集合转化为数组
Object[] array = c1.toArray();
//遍历
for (int i = 0; i < array.length; i++) {
//向下转型
Students s1 = (Students)array[i];
//调用getname打印
System.out.println(s1.getName());
}
}
其他方法
/**
* 将两个集合的交集给第一集和
* 如果第一集和改变 返回true,没改变返回false
*/
public static void fun12() {
Collection c1 = new ArrayList();
c1.add("a");
c1.add("b");
c1.add("c");
c1.add("d");
Collection c2 = new ArrayList();
c2.add("c");
c2.add("d");
//将两个集合的交集给第一集和
//如果第一集和改变 返回true,没改变返回false
boolean b1 = c1.retainAll(c2);
System.out.println(b1);
System.out.println(c1);
}
/**
* 相似fun5,判断两个集合的交集,并将其在第一集合删掉
* 允许有不同元素
*/
public static void fun11() {
Collection c1 = new ArrayList();
c1.add("a");
c1.add("b");
c1.add("c");
c1.add("d");
Collection c2 = new ArrayList();
c2.add("c");
c2.add("d");
c2.add("ww");
//判断两个集合的交集,并将其在第一集合删掉
//允许有不同的元素
boolean b1 = c1.removeAll(c2);
System.out.println(b1);
System.out.println(c1);
}
/**
* 相似fun4,判断第一集合是否全部包含第二集合
* ArrayList是可以有重复元素的
*/
public static void fun10() {
Collection c1 = new ArrayList();
c1.add("a");
c1.add("b");
c1.add("c");
c1.add("d");
Collection c2 = new ArrayList();
c2.add("c");
c2.add("d");
c2.add("d");
//判断第一元素中是否全部包含第二元素
boolean b1 = c1.containsAll(c2);
System.out.println(b1);
}
/**
* 相似fun1,将第二集合所有元素添加到第一集合
*/
public static void fun9() {
Collection c1 = new ArrayList();
c1.add("a");
c1.add("b");
c1.add("c");
c1.add("d");
Collection c2 = new ArrayList();
c2.add("c");
c2.add("d");
//把第二集合中的所有元素添加到第一元素
c1.addAll(c2);
System.out.println(c1);
}
迭代器(数组遍历)
/**
* 迭代器(数组遍历)
*/
public static void fun13() {
Collection c1 = new ArrayList();
c1.add("a");
c1.add("b");
c1.add("c");
c1.add("d");
//定义一个迭代器
Iterator i1 = c1.iterator();
while (i1.hasNext()) {
//获取集合中的元素
System.out.println(i1.next());
}
/*
* hasNext()
* 用法:
* 判断之后是否有元素可以迭代 有就返回true
* next()
* 用法:
* 返回值是迭代的下一个元素
*/
}