java的collection常用的有3种类型:List , Set ,Map
List对象,存放的数据是有序的,并且可以通过下标获取数据。数据可以重复存放在List中,
如:List list = new ArrayList();
list.add(1);
list.add(1);
此时list的size为2.
List的遍历可通过下标进行。
for(int i=0;i<list.size();i++){
System.out.println(list.get(i));
}
for(Object o:list){
System.out.println(o.toString);
}
Set对象,存放的数据是无序的,不能通过下标获取数据,并且存放的数据不允许重复。
如: Set set = new HashSet();
set.add(1);
set.add(1);
此时set的size为1.
Set对象的遍历可通过迭代器遍历;
Iterator i = set.iterator();
while(i.hasNext()){
System
}
也可 :
Set<Object> set = new HashSet<Object>();
for(Object o : set){
System.out.println(o);
}
Map对象,存放数据是通过k-value的方式存放,key代表存放数据的位置,value代表存放的数据值。
比如:假设图书馆有一本编号为B0001KL的书,书名叫xxx,B0001KL代表书的编号可认为是key,而书xxx里面的内容,可认为是value。
Map map = new HashMap();
map.put(B0001KL,xxx.内容);
Map对象的遍历:
Set set = map.keySet();
这里就将map的key存放在一个set对象中,通过遍历set获取map的key,再通过Key获取map的值
如: Set<Integer> set = map.keySet<Integer>()
for(Integer i : set){
System.out.pritnln("key : "+i+" value :"+map.get(i));
}
Set 对象实现:
HashSet , TreeSet 类是jdk中提供的2个set接口的实现类。
HashSet是沿用HashMap的方式,使用hash表的存储方式。
通过Map,Set对象的特性可以明白,map的key不能重复,set的value不能重复,在jdk HashSet中,存储Set对象是,将set的value作为map对象的key值方法,
HashMap存放数据是,通过数组加链表的形式存储。
HashMap中,初始化时,系统建立Entity[]数组,Entity包含4个属性:
final K key;
V value;
Entry<K,V> next;
final int hash;
Entity之间的关系通过链表的形式实现。存放数据是,将key值通过hash函数生成hash,并将hash值作为数据的存在下标,取出数据同理。
同样的道理TreeSet也是采用同样的方式调用TreeMap实现,只不过TreeMap的存储方式为树形结构,在developerWorks有文章介绍是采用的红黑树结构实现的(具体采用那种数据结构实现,没有太深入的看源码,只是在学习红黑树的时候看到这篇文章有介绍),具体地址:http://www.ibm.com/developerworks/cn/java/j-lo-tree/ 。