以上是常用的类的图表结构
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<String> list = new ArrayList<String>(); |
02 | list.add( "nihao!" ); |
03 | list.add( "hi!" ); |
04 | list.add( "konikiwa!" ); |
05 | list.add( "hola" ); |
06 | list.add( "Bonjour" ); |
07 | System.out.println(list.size()); |
08 | System.out.println(list.contains( 21 )); |
09 | System.out.println(list.remove( "hi!" )); |
10 | System.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<Integer,String> map = new HashMap<Integer,String>(); |
11 |
12 | map.put( 1 , "白菜" ); |
13 | map.put( 2 , "萝卜" ); |
14 | map.put( 3 , "茄子" ); |
15 | map.put( 4 , null ); |
16 | map.put( null , null ); |
17 | map.put( null , null ); |
18 |
19 | System.out.println( "map.size()=" +map.size()); |
20 | System.out.println( "map.containsKey(1)=" +map.containsKey( 2 )); |
21 | System.out.println( "map.containsKey(null)=" +map.containsKey( null )); |
22 | System.out.println( "map.get(null)=" +map.get( null )); |
23 |
24 | System.out.println( "map.get(2)=" +map.get( 2 )); |
25 | map.put( null , "黄瓜" ); |
26 | System.out.println( "map.get(null)=" +map.get( null )); |
27 |
28 | Set set = map.keySet(); |
29 | System.out.println( "set=" +set); |
30 |
31 | Collection<String> c = map.values(); |
32 |
33 | System.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类
共同学习,写下你的评论
评论加载中...
作者其他优质文章