`

union和union all的区别||hashmap和hashtable的区别

    博客分类:
  • J2SE
阅读更多
在数据库中,UNION和UNION ALL关键字都是将两个结果集合并为一个,但这两者从使用和效率上来说都有所不同。

UNION在进行表链接后会筛选掉重复的记录,所以在表链接后会对所产生的结果集进行排序运算,删除重复的记录再返回结果。

实际大部分应用中是不会产生重复的记录,最常见的是过程表与历史表UNION。如:

select * from gc_dfys
union
select * from ls_jg_dfys

这个SQL在运行时先取出两个表的结果,再用排序空间进行排序删除重复的记录,最后返回结果集,如果表数据量大的话可能会导致用磁盘进行排序。
而UNION ALL只是简单的将两个结果合并后就返回。这样,如果返回的两个结果集中有重复的数据,那么返回的结果集就会包含重复的数据了。
从效率上说,UNION ALL 要比UNION快很多,所以,如果可以确认合并的两个结果集中不包含重复的数据的话,那么就使用UNION ALL,如下:
select * from gc_dfys
union all
select * from ls_jg_dfys



Hashtable和HashMap的区别:
1.Hashtable是Dictionary的子类,HashMap是Map接口的一个实现类;
2.Hashtable中的方法是同步的,而HashMap中的方法在缺省情况下是非同步的。即是说,在多线程应用程序中,不用专门的操作就安全地可以使用Hashtable了;而对于HashMap,则需要额外的同步机制。但HashMap的同步问题可通过Collections的一个静态方法得到解决:
Map Collections.synchronizedMap(Map m)
这个方法返回一个同步的Map,这个Map封装了底层的HashMap的所有方法,使得底层的HashMap即使是在多线程的环境中也是安全的。
3.在HashMap中,null可以作为键,这样的键只有一个;可以有一个或多个键所对应的值为null。当get()方法返回null值时,即可以表示HashMap中没有该键,也可以表示该键所对应的值为null。因此,在HashMap中不能由get()方法来判断HashMap中是否存在某个键,而应该用containsKey()方法来判断。

4.HashTable使用Enumeration,HashMap使用Iterator。


以上只是表面的不同,它们的实现也有很大的不同。



5.HashTable中hash数组默认大小是11,增加的方式是 old*2+1。HashMap中hash数组的默认大小是16,而且一定是2的指数。



6.哈希值的使用不同,HashTable直接使用对象的hashCode,代码是这样的:
int hash = key.hashCode();
int index = (hash & 0x7FFFFFFF) % tab.length;
而HashMap重新计算hash值,而且用与代替求模:
int hash = hash(k);
int i = indexFor(hash, table.length);

static int hash(Object x) {
  int h = x.hashCode();



  h += ~(h << 9);
  h ^= (h >>> 14);
  h += (h << 4);
  h ^= (h >>> 10);
  return h;
}
static int indexFor(int h, int length) {
  return h & (length-1);
}
分享到:
评论
1 楼 iteeye 2013-03-15  
学习了

相关推荐

    IT名企JavaEE面试题最新整理(附答案)

    HashMap与HashTable的区别:HashTable是线程安全的,同步处理所有公共方法,而HashMap不是线程安全的,且它比HashTable快。 Collection框架:Collection和Collections的区别在于前者是Java集合框架的根接口,后者...

    易保笔试题目.doc

    - **允许null值**:`Hashtable`不允许键或值为null,而`HashMap`允许一个null键和任意数量的null值。 - **性能**:`HashMap`通常性能优于`Hashtable`,除非在多线程环境下,此时应考虑使用`ConcurrentHashMap`。 - *...

    J2EE高性能编程

    HashMap与HashTable都用于键值对存储,但两者之间存在关键区别: - **HashTable**:线程安全,这意味着可以在多线程环境中使用而无需额外的同步措施。然而,这种线程安全性是通过内部同步机制实现的,这会降低整体...

    java 面试题目集锦

    14. **HashMap与Hashtable**:比较它们的线程安全性和性能差异。 15. **静态与最终关键字**:`static`修饰成员变量和方法,`final`确保不可变性。 16. **文件读取**:使用`FileInputStream`或`BufferedReader`等...

    海联讯科技Java面试题.doc

    28. **Hashtable与HashMap** - Hashtable线程安全,但速度慢;HashMap非线程安全,速度快。 以上内容详细解答了Java面试中可能出现的一些问题,涵盖基础知识、框架使用及并发处理等多个方面。

    最新Java面试宝典pdf版

    60、HashMap和Hashtable的区别 44 61、List 和 Map 区别? 45 62、List, Set, Map是否继承自Collection接口? 45 63、List、Map、Set三个接口,存取元素时,各有什么特点? 45 64、说出ArrayList,Vector, LinkedList的...

    Java面试宝典-经典

    60、HashMap和Hashtable的区别 44 61、List 和 Map 区别? 45 62、List, Set, Map是否继承自Collection接口? 45 63、List、Map、Set三个接口,存取元素时,各有什么特点? 45 64、说出ArrayList,Vector, LinkedList的...

    JAVA面试宝典2010

    60、HashMap和Hashtable的区别 44 61、List 和 Map 区别? 45 62、List, Set, Map是否继承自Collection接口? 45 63、List、Map、Set三个接口,存取元素时,各有什么特点? 45 64、说出ArrayList,Vector, LinkedList的...

    java面试题大全(2012版)

    60、HashMap和Hashtable的区别 44 61、List 和 Map 区别? 45 62、List, Set, Map是否继承自Collection接口? 45 63、List、Map、Set三个接口,存取元素时,各有什么特点? 45 64、说出ArrayList,Vector, LinkedList的...

    Java面试宝典2012版

    60、HashMap和Hashtable的区别 44 61、List 和 Map 区别? 45 62、List, Set, Map是否继承自Collection接口? 45 63、List、Map、Set三个接口,存取元素时,各有什么特点? 45 64、说出ArrayList,Vector, ...

    java面试宝典2012

    60、HashMap和Hashtable的区别 48 61、List 和 Map 区别? 49 62、List, Set, Map是否继承自Collection接口? 49 63、List、Map、Set三个接口,存取元素时,各有什么特点? 49 64、说出ArrayList,Vector, LinkedList的...

    Java面试宝典2012新版

    60、HashMap和Hashtable的区别 44 61、List 和 Map 区别? 45 62、List, Set, Map是否继承自Collection接口? 45 63、List、Map、Set三个接口,存取元素时,各有什么特点? 45 64、说出ArrayList,Vector, LinkedList的...

    2021-2022计算机二级等级考试试题及答案No.11667.docx

    7. **传统集合运算**:在数据库操作中,传统的集合运算包括并集(Union)、差集(Difference)和交集(Intersection),答案为B。 8. **数据库模型的历史**:最早的数据库模型是层次模型(Hierarchical Model),...

    java面试问题汇总(非常全面)

    抽象类和接口的区别 - **抽象类**:可以包含构造函数、抽象方法、具体方法、变量等;可以被继承,且子类可以覆盖其方法;可以定义构造器,从而初始化状态。 - **接口**:只能包含常量和抽象方法(Java 8 开始支持...

    JermaineDataStructures:数据结构类中的常见问题

    `java.util.HashMap`和`java.util.Hashtable`是常见的实现,但哈希冲突处理是个关键问题。 7. 集合(Set)与列表(List):Java的`java.util.Set`接口表示不允许重复元素的集合,如`HashSet`和`TreeSet`。`List`...

Global site tag (gtag.js) - Google Analytics