类集:类的集合,用来存储整组的数据,其实呢就是一个动态数组。
数组的缺点:
(1)长度固定。
(2) 只能存储相同的数据类型。
类集就是在数组的基础上扩充了数组的功能,类集的长度是可以变化的,一个类集也可以保持不同类型的数据,当然,这样保持数据,我们并不推荐。
java的类集接口:在java当中,类集以接口的形式体现出来,Collection<E>接口是类集的最高父接口,我们主要学习的是子接口List和Set。
List类集接口:既然是一个接口,那么想要实例化就需要靠它的实现类,List的实现类有很多,我们只关注两个ArrayList和LinkedList.
先说ArrayList:
List中常用的方法:
Boolean add(E e):往类集中添加一个对象
void add(int index, E e):往类集指定的位置添加一个对象
Boolean addAll(Collention<? extends E> c): 将一个类集加入到另一个类集中
void clear():将类集中的所有元素清空。
Boolean contains(Object o):判断此集合中是否有指定元素
E get(int index):获得指定下标的元素
int indexOf(Object o):获得指定元素的下标,如果此集合中不存在此元素,返回-1
Boolean isEmpty():判断集合是否为空
Iterator<E> iterator():返回一个迭代器(用于集合的迭代输出)
E remove(int index):移除指定下标位置的元素
E remove(Object o):移除指定元素
Boolean removeAll(Collection<?> c):移除集合中的一个子集合
E set(int index,E e):在指定位置放入某个对象
int size():返回集合的长度,如果集合为空,返回0
Object[] toArray():转化为一个对象数组
package obc16;
import java.util.ArrayList;
import java.util.List;
public class OopDemo01 {
public static void main(String[] args) {
List<Person> list = new ArrayList<Person>();
Person p1 = new Person(20,"张三");
Person p2 = new Person(20,"李四");
Person p3 = new Person(20,"王五");
Person p4 = new Person(20,"赵六");
Person p5 = new Person(20,"田七");
list.add(p1);
list.add(p2);
list.add(p3);
list.add(p4);
list.add(p5);
System.out.println(list.contains(p3));
System.out.println(list.get(list.size()-1).getName()+"的年龄是:"+list.get(list.size()-1).getAge());
System.out.println(list.indexOf(p4));
}
}
集合的输出:
现在知道了如何往集合里添加元素,也知道如何取得指定位置的元素,那么如果要将集合中的所有元素取出,该如何做。
使用for循环:
package obc16;
import java.util.ArrayList;
import java.util.List;
public class OopDemo02 {
public static void main(String[] args) {
List<Person> list = new ArrayList<Person>();
Person p1 = new Person(20,"张三");
Person p2 = new Person(20,"李四");
Person p3 = new Person(20,"王五");
Person p4 = new Person(20,"赵六");
Person p5 = new Person(20,"田七");
list.add(p1);
list.add(p2);
list.add(p3);
list.add(p4);
list.add(p5);
// for(int i=0;i<list.size();i++){
// Person p = list.get(i);
// System.out.println(p.getName()+"的年龄是:"+p.getAge());
// }
for(Person p:list){//这样的形式叫做增强型for循环
System.out.println(p.getName()+"的年龄是:"+p.getAge());
}
}
}
下面使用Iterator迭代器进行输出:
package obc16;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class OopDemo03 {
public static void main(String[] args) {
List<Person> list = new ArrayList<Person>();
Person p1 = new Person(20,"张三");
Person p2 = new Person(20,"李四");
Person p3 = new Person(20,"王五");
Person p4 = new Person(20,"赵六");
Person p5 = new Person(20,"田七");
list.add(p1);
list.add(p2);
list.add(p3);
list.add(p4);
list.add(p5);
Iterator<Person> it = list.iterator();
while(it.hasNext()){
Person p = it.next();
System.out.println(p.getName()+"的年龄是:"+p.getAge());
}
}
}
以上两种输出形式,在迭代输出的代码中如果逻辑足够简单能够使用增强型for循环,那么可以使用,如果不行,必须使用迭代器输出。