Collection集合
1.Collection集合的基本功能测试
package heima_day15;
import java.util.ArrayList;
import java.util.Collection;
public class Demo2_collection {
/**
基本功能演示
boolean add(E e)
boolean remove(Object o)
void clear()
boolean contains(Object o)
boolean isEmpty()
int size()
* B:注意:
collectionXxx.java使用了未经检查或不安全的操作.
注意:要了解详细信息,请使用 -Xlint:unchecked重新编译.
java编译器认为该程序存在安全隐患
温馨提示:这不是编译失败,所以先不用理会,等学了泛型你就知道了
add方法如果是list集合一直返回true,因为list集合中可以存储重复的元素
如果是set集合当中存储了重复的元素,就会返回false
ArrayList 的父类的父类重写了toString的方法,所以在打印对象的引用的时候,输出的结果不是Object类中的toString的结果
*/
public static void main(String[] args) {
Collection c = new ArrayList(); //父类引用指向子类对象
boolean b1 = c.add("abc");
boolean b2 = c.add(true);//自动装箱new Boolean(true);
boolean b3 = c.add(100);
System.out.println(b1);
System.out.println(b2);
System.out.println(b3);//全都只返回true,因为colletion作为最底层,需要考虑list和set的运用
System.out.println(c);
System.out.println("------------");
c.remove(true);//删除指定元素
System.out.println(c);
System.out.println("------------");
c.clear();//清空集合
System.out.println(c);
System.out.println("------------");
System.out.println(c.contains("a"));//判断是否包含“a”
System.out.println(c.isEmpty());//判断是否为空
System.out.println("------------");
c.add("aaa");
System.out.println(c.size());//获取元素的个数
}
}
2.集合的遍历之集合转数组遍历
import java.util.ArrayList;
import java.util.Collection;
import com.heima.bean.Student;
public class Demo3_collection {
/**
* A:集合的遍历
* 其实就是依次获取集合中的每一个元素。
* B:案例演示
* 把集合转成数组,可以实现集合的遍历
* toArray()
*/
public static void main(String[] args) {
Collection c = new ArrayList();
c.add("a");
c.add("b");
c.add("c");
c.add("d");
Object[] arr = c.toArray();//将集合转成数组
for(int i = 0;i < arr.length ;i++) {
System.out.println(arr[i]);
}
Collection coll = new ArrayList();
coll.add(new Student("张三",23)); //Object obj = new Student("张三",23);
coll.add(new Student("李四",24));
coll.add(new Student("王五",25));
coll.add(new Student("赵六",26));
Object[] arr2 = coll.toArray(); //将集合转换成数组
for (int i = 0; i < arr.length; i++) {
Student s = (Student)arr2[i]; //向下转型,强转成Student
System.out.println(s.getName() + "," + s.getAge());
}
}
}
3.Collection集合的其他功能测试
All功能测试
boolean addAll(Collection c)
c1.addAll(c2); //将c2的全部元素逐个添加到c1中
c1.add(c2);//将c2的全部元素全部添加到c1的一个元素中
boolean removeAll(Collection c)//删除的是交集
boolean containsAll(Collection c)//判断调用的集合是否包含传入的集合
boolean retainAll(Collection c)//取交集,如果调用的集合改变就返回true,如果调用的集合不变就返回false
例:c1 abcd c2 abc 交集 abc;abc对于c1的abcd改变了,返回true
Collection存储自定义对象并遍历
Collection c = new ArrayList();
c.add(new Student(“张三”,23));
c.add(new Student(“李四”,24));
c.add(new Student(“王五”,25));
c.add(new Student(“赵六”,26));
c.add(new Student(“赵六”,26));
for(Iterator it = c.iterator();it.hasNext(); {
Student s = (Student)it.next(); //向下转型
System.out.println(s.getName() + “,” + s.getAge()); //获取对象中的姓名和年龄
}
System.out.println("------------------------------");
Iterator it = c.iterator(); //获取迭代器
while(it.hasNext()) { //判断集合中是否有元素
//System.out.println(((Student)(it.next())).getName() + “,” +
((Student)(it.next())).getAge());
Student s = (Student)it.next(); //向下转型
System.out.println(s.getName() + “,” + s.getAge()); //获取对象中的姓名和年龄
}
4.迭代器
-
A:迭代器原理
迭代器原理:迭代器是对集合进行遍历,而每一个集合内部的存储结构都是不同的,所以每一个集合存和取都是不一样,那么就需要在每一个类中定义hasNext()和next()方法,这样做是可以的,但是会让整个集合体系过于臃肿,迭代器是将这样的方法向上抽取出接口,然后在每个类的内部,定义自己迭代方式,这样做的好处有二,第一规定了整个集合体系的遍历方式都是hasNext()和next()方法,第二,代码有底层内部实现,使用者不用管怎么实现的,会用即可 -
B:迭代器源码解析
1,在eclipse中ctrl + shift + t找到ArrayList类
2,ctrl+o查找iterator()方法
3,查看返回值类型是new Itr(),说明Itr这个类实现Iterator接口
4,查找Itr这个内部类,发现重写了Iterator中的所有抽象方法 -
C:三种迭代的能否删除
普通for循环,可以删除,但是索引要i–(移动索引的位置)
迭代器,可以删除,但是必须使用迭代器自身的remove方法,否则会出现并发修改异常
增强for循环不能删除
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
public class Demo5_Iterator {
/**
* A:迭代器概述
* 集合是用来存储元素,存储的元素需要查看,那么就需要迭代(遍历)
*/
public static void main(String[] args) {
Collection c = new ArrayList();
c.add("a");
c.add("b");
c.add("c");
c.add("d");
/*对集合的元素进行迭代
Iterator it = c.iterator();//获取迭代器
boolean b1 = it.hasNext();//判断集合中是否有元素,有就返回true
Object obj1 = it.next();
System.out.println(b1);
System.out.println(obj1);
boolean b2 = it.hasNext();//判断集合中是否有元素,有就返回true
Object obj2 = it.next();
System.out.println(b2);
System.out.println(obj2);//指针向后移动了*/
Iterator it = c.iterator();
while (it.hasNext()) {
System.out.println(it.next());
}
}
}
5.Collections
import java.util.ArrayList;
import java.util.Collections;
public class Demo9_Collections {
/**
* A:Collections类概述
* 针对集合操作 的工具类
* B:Collections成员方法
*
public static <T> void sort(List<T> list)
public static <T> int binarySearch(List<?> list,T key)
public static <T> T max(Collection<?> coll)
public static void reverse(List<?> list)
public static void shuffle(List<?> list)
* @param args
*/
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<>();
list.add("a");
list.add("b");
list.add("d");
list.add("a");
list.add("c");
list.add("b");
System.out.println(list);
Collections.sort(list);//将集合排序
System.out.println(list);
System.out.println(Collections.binarySearch(list, "b"));//二分查找法
System.out.println(Collections.max(list));//获取最大值
Collections.reverse(list);//反转集合
System.out.println(list);
Collections.shuffle(list);//随机排序
System.out.println(list);
}
}