以上是常用的类的图表结构
Collection是List和Set两个接口的基接口
List在Collection之上增加了"有序" (按照顺序排列,可以重复)
Set在Collection之上增加了"唯一" (没有按照顺序排列,但是不可以重复)
Collection和Map接口之间的主要区别在于:Collection中存储了一组对象,而Map存储关键字/值对。
好下面口水话讲解一下:
集合就是这样一种数组:动态的改变其大小,要就添加,不要就删除。
对集合的运用就是 增 删 改 查。
主要集中类的详解:
List结构的集合类:
ArrayList类,LinkedList类,Vector(向量类),Stack(栈类)
方法运用都是一样的:add(E e)将指定对象添加到集合中
remove(Object o)将指定的对象从集合中移除,移除成功返回true,不成功返回false
contains(Object o)查看该集合中是否包含指定的对象,包含返回true,不包含返回flase
size()返回集合中存放的对象的个数。返回值为int
clear()移除该集合中的所有对象,清空该集合。
iterator()返回一个包含所有对象的iterator对象,用来循环遍历
toArray()返回一个包含所有对象的数组,类型是Object
toArray(T[] t)返回一个包含所有对象的指定类型的数组
举列子如下:List list =new ArrayList();02list.add("nihao!");03list.add("hi!");04list.add("konikiwa!");05list.add("hola");06list.add("Bonjour");07System.out.println(list.size());08System.out.println(list.contains(21));09System.out.println(list.remove("hi!"));10System.out.println(list.size());
他们之间的区别:
常用的几个集合类(介绍)
ArrayList类,LinkedList类:
基本没有区别,就是LinkedList类在添加的时候,可以指定往前面加 addfirst(),或者后面加 addlast();
ArrayList类,Vector(向量类):
1.Vector(向量类)是同步的(以后会介绍),安全,但是速度相对慢。
2.当往里面增加数据的时候,Vector(向量类)是按照倍数增加大小,比如存2个,那么下次就增加4个单位。
但是ArrayList类是按照50%增加的。
3.所以当有大量的数据需要存储的时候,选用Vector(向量类),不必反复的增加资源大小。浪费时间。
ArrayList类,Stack(栈类):
就是添加的时候顺序一个是按照顺序加,一个是往前加((栈类));
Map接口:
主要有HashMap,与Hashtable
其实跟List的用法差不多,不过多了个键值对的出现,所以在添加或者查询遍历的时候要用到迭代器。
用法如下:put(K key, V value)向集合中添加指定的键值对
putAll(Map extends K,? extends V> t)把一个Map中的所有键值对添加到该集合
containsKey(Object key)如果包含该键,则返回true
containsValue(Object value)如果包含该值,则返回true
get(Object key)根据键,返回相应的值对象
keySet()将该集合中的所有键以Set集合形式返回
values()将该集合中所有的值以Collection形式返回
remove(Object key)如果存在指定的键,则移除该键值对,返回键所对应的值,如果不存在则返回null
clear()移除Map中的所有键值对,或者说就是清空集合
isEmpty()查看Map中是否存在键值对
size()查看集合中包含键值对的个数,返回int类型
举列子如下:Map map =new HashMap();1112map.put(1,"白菜");13map.put(2,"萝卜");14map.put(3,"茄子");15map.put(4,null);16map.put(null,null);17map.put(null,null);1819System.out.println("map.size()="+map.size());20System.out.println("map.containsKey(1)="+map.containsKey(2));21System.out.println("map.containsKey(null)="+map.containsKey(null));22System.out.println("map.get(null)="+map.get(null));2324System.out.println("map.get(2)="+map.get(2));25map.put(null,"黄瓜");26System.out.println("map.get(null)="+map.get(null));2728Set set = map.keySet();29System.out.println("set="+set);3031Collection c = map.values();3233System.out.println("Collection="+c);34
HashMap 当需要键值对表示,又不关心顺序时可采用HashMap。
Hashtable 注意Hashtable中的t是小写的,它是HashMap的线程安全版本,现在已经很少使用。
LinkedHashMap 当需要键值对,并且关心插入顺序时可采用它。
HashMap允许放入空值,但是Hashtable不可以。
综合上面有以下几点常用集合的运用:
1.要求线程安全:用 Vector类,Hashtable类
2.不要求线程安全,要效率:ArrayList类,LinkedList类,HashMap;
3.要求键值对:HashMap,Hashtable;
4.如果要求数据量大,又要线程安全:用 Vector类