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/ 。
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/ 。
相关文章推荐
- (Core-JAVA) HashMap, HashTable and HashSet
- java 集合学习笔记3-HashSet TreeSet
- JDK源码学习(6)-java.util.HashSet & java.util.LinkedHashSet & java.util.TreeSet
- 【Data Structures】 12. Hashing, HashMap and HashSet in Java
- Java 集合系列之 Set架构 TreeSet HashSet 详细介绍(源码解析)和使用示例
- Java HashSet TreeSet LinkedHashSet 三种Set接口实现的比较
- Difference between TreeMap and TreeSet in Java
- Difference between HashSet and HashMap in Java
- Java基础 集合框架 共性方法 迭代器 ArrayList LinkedList Vector HashSet TreeSet
- Java HashMap and HashSet
- Treemap and Treeset java 实现
- JAVA基础: HashSet\TreeSet
- 理解Java集合(二)Set : HashSet/TreeSet
- JAVA菜鸟入门(17) 有排序的TreeSet和无排序的HashSet, LinkedHashSet
- Java - Difference between HashMap and HashSet in Java
- Java散列集Set 树集TreeSet HashSet LinkedHashSet SortedSet NavigableSet
- java中Collection/Collections;List/Set/Map;ArrayList/Vector/LinkedList;HashSet/HashMap/TreeSet/TreeMap
- Java容器源码分析-HashSet vs TreeSet vs LinkedHashSet
- Java笔记之HashSet与TreeSet集合的运用
- Java集合之HashSet