集合
数组弊端:
1.只添加相同类型的元素(基本数据类型 和 引用数据类型 都能保存)
2. 长度一旦确定 就不能改变 要添加超出 数组长度个数的元素 操作比较复杂
集合的由来 因为数组操作数据的弊端 用来代替数组
集合特点 :
1. 能添加不同类型的元素
注意 : 集合中 只能添加 引用数据类型 (只能添加对象类型)
2. 长度可变
集合collection接口中的方法
集合可以保存不同数据类型的数据
保存基本数据类型是以自动装箱的形式 进行存储
注解 rawtypes 保持原有类型的注解
unchecked 不检查插入数据类型
放到类上 整个类 不写泛型 都不会报黄
@SuppressWarnings({ "rawtypes" , "unchecked" })
public static void fun1() {
// 创建一个集合 多态的声明方法
Collection collection = new ArrayList()
// 添加方法
// 什么时候 会添加失败
// ArrayList中的add 不可能返回 失败
// 不能返回失败 为什么还要设计返回值呢? --- 思想
// 适用所有的子类 子接口
boolean b1 = collection.add ("a" )
boolean b2 = collection.add ("b" )
boolean b3 = collection.add ("c" )
// 当你向集合当中添加基本数据类型的时候
// 系统会帮你进行 自动装箱 把基本数据类型变成它的包装类
boolean b4 = collection.add (10 )
boolean b5 = collection.add (true)
// 打印集合
System.out .println (collection.toString ())
System.out .println (b1)
System.out .println (b2)
System.out .println (b3)
System.out .println (b4)
System.out .println (b5)
// 获取集合的长度
System.out .println (collection.size ())
// 判断是否包含某个元素
boolean b6 = collection.contains ("b" )
System.out .println (b6)
// 从集合中删除一个元素
boolean b7 = collection.remove ("b" )
System.out .println (b7)
// 操作的是 原集合
System.out .println (collection)
// 判断集合是否为空
boolean b8 = collection.isEmpty ()
System.out .println (b8)
// 清空数组
collection.clear ()
System.out .println (collection)
}
public static void fun2 () {
Collection collection = new ArrayList();
collection.add("a" );
collection.add("b" );
collection.add("c" );
collection.add("d" );
Object[] array = collection.toArray();
for (int i = 0 ; i < array.length; i++) {
System.out .println(array[i]);
}
}
public static void fun3 () {
Collection collection = new ArrayList();
collection.add(new Student("张三" , 18 ));
collection.add(new Student("李四" , 18 ));
collection.add(new Student("王五" , 18 ));
Object[] array = collection.toArray();
for (int i = 0 ; i < array.length; i++) {
Student student = (Student)array[i];
System.out .println(student.getName());
}
}
错误的强转方式
public static void fun4 () {
Collection collection = new ArrayList();
collection.add(new Student("张三" , 18 ));
collection.add(new Student("李四" , 18 ));
collection.add(new Student("王五" , 18 ));
Student[] array = (Student[])collection.toArray();
}
public static void fun5() {
Collection c1 = new ArrayList()
Collection c2 = new ArrayList()
c1.add ("a" )
c1.add ("b" )
c1.add ("c" )
c2.add ("x" )
c2.add ("y" )
c2.add ("z" )
boolean isaddAll = c1.addAll (c2)
// 查看调用后的效果
// 把c2集合每一个元素取出来 添加到c1集合末尾
System.out .println (c1)
System.out .println (c2)
System.out .println (isaddAll)
}
public static void fun6 () {
Collection c1 = new ArrayList();
Collection c2 = new ArrayList();
c1.add("a" );
c1.add("b" );
c1.add("c" );
c2.add("x" );
c2.add("y" );
c2.add("c" );
boolean removeAll = c1.removeAll(c2);
System.out .println(c1);
System.out .println(c2);
System.out .println(removeAll);
}
public static void fun7 () {
Collection c1 = new ArrayList();
Collection c2 = new ArrayList();
c1.add("a" );
c1.add("b" );
c1.add("c" );
c2.add("x" );
c2.add("y" );
c2.add("z" );
boolean retainAll = c1.retainAll(c2);
System.out .println(c1);
System.out .println(c2);
System.out .println(retainAll);
}
迭代器(可以理解为遍历)
public static void fun1 () {
Collection collection = new ArrayList();
collection.add("a" );
collection.add("b" );
collection.add("c" );
collection.add("d" );
Iterator iterator = collection.iterator();
boolean isHasNext = iterator.hasNext();
System.out .println(isHasNext);
Object next = iterator.next();
System.out .println(next);
}
/**
* 遍历集合
*/
public static void fun2 () {
Collection collection = new ArrayList();
collection.add("a" );
collection.add("b" );
collection.add("c" );
collection.add("d" );
Iterator iterator = collection.iterator();
while (iterator.hasNext()) {
System.out.println(iterator.next());
}
}