您的位置:首页 > 编程语言 > Java开发

java collections framework -----HashSet and TreeSet

2010-12-03 18:37 435 查看
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/ 。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: