集合
- 为什么要集合
- JAVA语言是面向对象的,对事物体系都是以对象存在的我们要对多个对象进行储存和操作,用之前的知识我们就只能用数组,而数组有弊端长度是固定的,所以java就提供了我们一个新的容器叫做数组。
- 集合的特点
- 长度是可变的
- 储存数据只能是对象类型的
- 可以存储不同数据类型的对象,一般还是存储同一类型的
- 数组和集合的区别(面试)
- 数组
- 长度固定
- 可以存储基本数据类型也可以存储对象类型
- 存储的都是同一种数据类型的元素
- 集合
- 长度是可变的
- 只能存储对象类型
- 可以存储不同数据类型的对象
- 数组
- 集合体系结构:
由于数据结构不同,那么,就会有多种集合存在。
而这多种集合又有共性的内容,通过不断的向上抽取,
最终形成了集合的继承体系结构图:
-
- Collection的功能:
A:添加功能boolean add(Object obj)
B:删除功能
void clear()
boolean remove(Object o)
C:判断功能
boolean contains(Object)//集合是否包含指定元素
boolean isEmpty()//集合是否为空
D:长度
int size()
E:迭代器
Iterator<E> iterator()
- 迭代器:
集合的一种常用的遍历方式。
通过集合获取到迭代器对象。
然后通过hasNext()和next()方法配合使用 - 集合操作的常见步骤:
创建集合对象
创建元素对象
把元素对象添加到集合对象中
遍历集合
通过集合对象获取到迭代器对象
通过迭代器对象的hasNext()方法判断是否有元素
通过迭代器对象的next()方法返回元素并自动指向下一个元素
A:用Collection存储字符串并遍历。
<span style="white-space:pre"> </span>Collection c = new ArrayList();
c.add("str1");
c.add("str2");
c.add("str3");
Iterator it = c.iterator();
while(it.hasNext())
{
String s = (String)it.next();
System.out.println(s);
}
B:用Collection存储自定义对象并遍历。
假设学生类已经存在。
<span style="white-space:pre"> </span>Collection c = new ArrayList();
Student stu1 = new Student("张三",29);
Student stu2 = new Student("李四",28);
c.add(stu1);
c.add(stu2);
Iterator it = c.iterator();
while(it.hasNext())
{
Student s = (Student)it.next();
System.out.println(s.getName()+"***"+s.getAge());
}
8.List接口的特有功能:(自己补齐)
A:在指定位置添加元素
void add(int index,Object obj)
B:删除指定位置的元素
Objct remove(int index)
C:修改指定位置的元素
Object set(int index,Object obj)
D:获取指定位置的元素
Object get(int inde)
E:列表迭代器
9.List案例:掌握(自己补齐)
A:存储字符串并遍历
import java.util.*;
class ListTest
{
public static void main(String[] args)
{
Collection c = new ArrayList();
//存放数据
c.add("Hello");
c.add("world");
c.add("java");
Iterator it = c.iterator();
//遍历集合
while(it.hasNext()){
String s = (String)it.next();
System.out.println(s);
}
}
}
B:存储自定义对象并遍历。
假设Person类型已经存在。
Person(name,age)
import java.util.*;
class PersonTest
{
public static void main(String[] args)
{
List list = new ArrayList();
Person p1 = new Person("zhangsan",28);
Person p2 = new Person("lisi",29);
Person p3 = new Person("wangwu",30);
list.add(p1);
list.add(p2);
list.add(p3);
//方法一 while遍历
Iterator it = list.iterator();
while(it.hasNext()){
Person p = (Person)it.next();
System.out.println(p.getName()+"-----------"+p.getAge());
}
System.out.println("**********************************************");
//方法二 一般for循环表示
Iterator it2 = list.iterator();
for(int i = 0;i<list.size();i++){
Person p = (Person)it2.next();
System.out.println(p.getName()+"-------------"+p.getAge());
}
}
}
10.并发修改异常(面试题)
异常是什么?见到过吗?怎么解决?
A:并发修改异常。
B:原因:
在用迭代器遍历集合的时候,你又用集合本身在修改集合。
C:解决方案:
完全使用迭代器操作即可。
完全使用集合操作即可。