先放一个图:
四个比较:
List接口和Set接口
相同:都继承了Collection
不同:1、List是有序,允许有相同元素的Collection;Set不允许有相同的元素,即e1.equals(e2)=false;
2、List 还提供了一个listIterator()方法,返回一个ListIterator接口多了一些增删遍历之类的方法
3、实现List接口的常用类LinkedList、ArrayList、Vector、Stack ;实现Set接口常用类HashSet、TreeSet
ArrayList类和Vector类
相同:1、都实现了List接口,ArrayList实现了可变大小的数组,它允许所有元素,包括null。每个ArrayList实例都有一个容量(Capacity),用于存储元素的数组的大小
2、二者创建的iterator是同一接口
不同:Vector创建的iterator是同步的,当有一个在被创建或者使用,另一个线程改版了Vector的状态就会报错;ArrayList和LinkedList都是不同步的
HashMap类和Hashtable类
Hashtable继承Map接口,实现一个key-value映射的哈希表(不想写了)
HashSet类和TreeSet类
相同:都实现了Set接口,集合中不能含有相同元素的数
不同:1、TreeSet判断两个独享是否相同的方法是Compare接口中的compareTo()方法,不仅可以比较是否相等还可以比较大小;HashSet用的继承自Object类的equals()方法,而且只能比较是否相等
2、Set集合本来输出顺序与输入顺序无关,TreeSet用compare()方法进行比较,所以输出时会按照生序输出
import java.util.HashSet;
import java.util.Set;
import java.util.TreeSet;
public class TestSet {
public static void main(String [] args)
{
Set hashSet = new HashSet();
Set treeSet = new TreeSet();
hashSet = fillSet(hashSet);
System.out.println(hashSet);
treeSet = fillSet(treeSet);
System.out.println(treeSet);
}
public static Set fillSet(Set set)
{
while(set.size() < 7)
{
set.add((int)(Math.random()*35+1));
}
return set;
}
}
两个家族:
Map
Collection
总结
1.涉及到堆栈、队列等操作,可以考虑用List;对于需要快速插入,删除元素,可以考虑LinkedList;如果需要快速随机访问元素,可以考虑ArrayList
2.理论来了,静待实践吧