集合:java的集合类主要由两个接口派生而出:Collection和Map,这两个接口派生出一些子接口或实现类。
Java的集合主要分为3大类
1.Set集合:将一个对象添加到Set集合时,Set集合无法记住添加的顺序,因此Set集合中的元素不能重复,否则系统无法识别该元素,访问Set集合中的元素也只能根据元素本身进行访问;
2.List集合:与数组类似,List集合可以记住每次添加元素的顺序,因此可以根据元素的索引访问List集合中的元素,List集合中的元素可以重复且长度是可变的;
3.Map集合:每个元素都是有Key/value键值对组成,可以根据每个元素的Key来访问对应的value,Map集合中的key不允许重复,value可以重复。
Collection接口
Collection接口是Set,Queue和List接口的父接口,该接口中定义的方法可以操作这三个接口中的任一个集合,Collection接口中德常用方法如下:
使用Collection是需要注意的一下问题:
1.add()、addAll()ewmove()、removeAll()、和retainAll()方法可能会引发不支持该操作的UnsupportedOperationException异常
2.将引发一个不兼容的对象添加到集合中是,将ClassCastException异常
3.Collection接口没有提供获取某个元素的方法,但可以通过iterator()方法获取迭代器来遍历集合中的所有元素
4.虽然Collection中可以存储任何Object对象,但不建议在同一个集合容器中存储不同类型的对象,建议使用泛型增强集合的安全性,以免引起ClassCastException异常
迭代器接口:
迭代器(Iterator)可以采用统一的方式对Collection集合中的元素进行遍历操作,开发人员无需关心Collection集合中的内容,也不必实现IEnumerable或者IEnumerator接口就能够使用foreach循环遍历集合中的部分或全部元素。
Java从JDK5.0开始增加了Iterable新街口,该接口是Collection接口的父接口,因此所有实现了Iterator的集合类都是可迭代的,都支持foreach循环遍历。Interator接口中的iterator()方法可以获取每个集合自身的迭代器Iterator。Iterator是集合的迭代器接口,定义了常见的迭代方法,用于访问、操作集合中的元素。
List集合:
代码演示:
import java.util.ArrayList;
import java.util.Iterator;
public class ArrayLiseDemo {
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<String>();
list.add("北京");
list.add("上海");
list.add("青岛");
//便利集合中元素
System.out.println("-----foreach方法遍历-------");
for(String a : list){
System.out.println(a);
}
System.out.println("-----下标方法遍历-------");
for(int i = 0;i < list.size();i++){
String a = list.get(i);//取出集合中元素
System.out.println(a);
}
System.out.println("-----迭代器方法遍历-------");
//用Iterator遍历,支持泛型,因此可以定义迭代器的类型
Iterator<String> it = list.iterator();
while(it.hasNext())//判断元素是否到达最后一个元素
{
String a = it.next();
System.out.println(a);
}
System.out.println("************");
//remove下标的方法移除元素
list.remove(0);
Iterator<String> it1 = list.iterator();
while(it1.hasNext())
{
String a = it1.next();
System.out.println(a);
}
System.out.println("************");
//remove对象的方法移除元素
list.remove("上海");
for(String a : list){
System.out.println(a);
} }}
Arraylist和Vector的区别:它俩的用法完全一致。ArrayList是线程不安全的,不是同步的, 而Vector是线程同步的。在多线程编程是才能体现出区别,在多线程是Vector由于是 同步的所以效率比较低,因此多使用Arraylist。
Vector的子类stack:具有栈先进后出的特性
代码示例:import java.util.Stack;
import com.sun.org.apache.xerces.internal.util.SynchronizedSymbolTable;
public class StackDemo {
public static void main(String[] args) {
Stack<Integer> s = new Stack<Integer>();
//向stack中添加元素
for(int i = 0; i < 5; i++){
s.add(i);
}
System.out.println(s);
while(!s.isEmpty()){//判断是否为空
//如果不为空使用pop方法弹出元素,并赋给a
int a = s.pop();
System.out.println(a);
}}}