类集:类的集合,用来存储整组的数据,其实呢就是一个动态数组。

数组的缺点:

(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循环,那么可以使用,如果不行,必须使用迭代器输出。