单列集合
集合框架
1、概念
- 概念:集合一种容器,可以存储对象。
- 集合和数组区别:
- 数组的长度固定,集合长度不固定
- 数组可以存储基本数据类型和引用数据类型 int[] / Student[],集合是能存储引用数据类型
- 数组中每个元素都是相同的数据类型,集合可以存储不同的数据类型
2、集合框架
Collection接口
单列集合的顶层接口
1、常用方法
- add方法向集合集合中添加元素
- clear方法,清空集合中所有元素
- contains方法 判断集合是否包含某个元素
- isEmpty判断集合是否为空
- remove方法 移除集合中元素,返回boolean类型。如果集* * 合中不包含次元素,则删除失败
- size()返回集合中元素的个数
- toArray将集合转换成数组。
- addAll 向一个集合中添加另一个集合
- containsAll 判断一个集合中是否包含另一个集合
- removeAll 从一个集合中移除另一个集合
public class CollectionDemo {
public static void main(String[] args) {
//创建Collection 对象
Collection coll = new ArrayList();
//常用方法
//add方法向集合集合中添加元素
coll.add("张三");
coll.add(10);
coll.add(20.20);
coll.add(new Student("cxk"));
System.out.println(coll);//[张三, 10, 20.2, Student{name='cxk'}]
//clear方法,清空集合中所有元素
// coll.clear();
// System.out.println(coll);
//contains方法 判断集合是否包含某个元素
System.out.println(coll.contains("张三"));//true
System.out.println(coll.contains("cxk"));//false
//isEmpty判断集合是否为空
System.out.println(coll.isEmpty());//false
//remove方法 移除集合中元素,返回boolean类型。如果集合中不包含次元素,则删除失败
coll.remove("张三1");
System.out.println(coll);//[张三, 10, 20.2, Student{name='cxk'}]
//size()返回集合中元素的个数
System.out.println("集合中元素的个数:"+coll.size());//集合中元素的个数:4
//toArray将集合转换成数组。
Object[] arr = coll.toArray();
System.out.println(Arrays.toString(arr));// [张三, 10, 20.2, Student{name='cxk'}]
System.out.println("---------------------------------------------------------");
Collection coll1 = new ArrayList();
coll1.add("1");
coll1.add("2");
Collection coll2 = new ArrayList();
coll2.add("a");
coll2.add("b");
//addAll 向一个集合中添加另一个集合
coll1.addAll(coll2);
System.out.println(coll1); // [1, 2, a, b]
//containsAll 判断一个集合中是否包含另一个集合
System.out.println(coll2.containsAll(coll1));//false
//removeAll 从一个集合中移除另一个集合
coll2.removeAll(coll1);
System.out.println(coll2); //[]
}
private static class Student {
String name;
public Student(String name) {
this.name = name;
}
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
'}';
}
}
}
迭代器
1、迭代器原理
演示
public class IteratorDemo {
public static void main(String[] args) {
//创建Collection对象
Collection coll = new ArrayList();
coll.add("张三1");
coll.add("张三2");
coll.add("张三3");
coll.add("张三4");
coll.add("张三5");
coll.add("张三6");
//通过集合获取迭代器对象
Iterator it = coll.iterator();
while(it.hasNext()) {
System.out.println(it.next());
}
}
}
2、foreach循环
foreach循环即增强版的for循环
/**
* foreach循环 增强版for循环
* 语法:
* for(每个元素的类型 变量 :要遍历的集合){
*
* }
*/
for(Object obj:coll) {
System.out.println(obj);
}
3、迭代器使用常见问题
- 如果迭代器使用过,那么游标指向最后的位置
- 在一次迭代中,不要多次调用next方法
- 在迭代器迭代的时候,不能对集合进行添加或删除
- 如果在迭代过程要移除元素,需要使用迭代器的remove方法
public class Demo10 {
public static void main(String[] args) {
//创建Collection对象
Collection coll = new ArrayList();
coll.add("张三1");
coll.add("张三2");
coll.add("张三3");
coll.add("张三4");
coll.add("张三5");
coll.add("张三6");
coll.add("张三7");
//通过集合获取迭代器对象
Iterator it = coll.iterator();
while(it.hasNext()) {
System.out.println(it.next());//可以输出
}
//一、如果迭代器使用过,那么游标指向最后的位置
while(it.hasNext()) {
System.out.println(it.next());//无法输出,上面用过了
}
//二、在一次迭代中,不要多次调用next方法 java.util.NoSuchElementException
while(it.hasNext()) {
Object obj = it.next();
System.out.print(it.next()+"\t");//张三2 张三4 张三6 java.util.NoSuchElementException
}
//三、在迭代器迭代的时候,不能对集合进行添加或删除 java.util.ConcurrentModificationException
while(it.hasNext()) {
coll.add("rose");
coll.remove("张三3");
System.out.println(it.next());//java.util.ConcurrentModificationException
}
//四、如果在迭代过程要移除元素,需要使用迭代器的remove方法
while(it.hasNext()) {
System.out.print(it.next()+"\t");//张三1 张三2 张三3 张三4 张三5 张三6 张三7
it.remove();
}
System.out.println(coll);//[]
}
}
泛型基本使用
1、为什么要有泛型?
- 如果不使用泛型,那么集合中存储的元素,要不断 发生向上向下转型,而转型就有可能会发生错误
- 泛型的作用就是将类型的检查提前到了编译期
2、泛型的语法:
- 集合<类型> 集合名 = new 集合<类型>();
3、泛型注意的地方
- 泛型不存在多态,没有继承
Collection<Animal> coll1 = new ArrayList<Dog>(); 报错
- 只能使用基本数据类型的包装类
Collection<Integer> cool2 = new ArrayList<Integer>();
```