本人菜鸟,前几天学习数据结构,看到hashtable,被它的优点深深的吸引了,
突发奇想,想到一个利用hashtable去掉集合中重复的数据,这里贴出代码,大家别笑我package fx.algorithm.hash.app;/**
 * 利用hashtable去掉重复的数据
 * 
 * @author 咖啡
 * 
 */
public class HashTableApp3 { private static int[] array = { 10, 10, 2, 3, 5, 7, 8, 2, 9, 2, 5, 6, 7 }; public static void main(String[] args) {
HashTable table = new HashTable(array.length);
for (int i = 0; i < array.length; i++) {
table.insert(new DataItem(array[i]));
} table.displayTable();
}
}/**
 * 封装数据,可要可无
 * 
 * @author 咖啡
 * 
 */
class DataItem { private int iData; public DataItem(int ii) {
this.iData = ii;
} public int getkey() {
return iData;
}
}/**
 * 自定义一个table
 * 
 * @author 咖啡
 * 
 */
class HashTable { private DataItem[] hashArray;
private int arraySize; public HashTable(int size) {
arraySize = size;
hashArray = new DataItem[arraySize];
} /**
 * 显示table
 */
public void displayTable() {
System.out.print("Table ");
for (int i = 0; i < arraySize; i++) {
if (hashArray[i] != null) {
System.out.print(hashArray[i].getkey() + " ");
}
}
System.out.println();
} /**
 * 将值直接作为table中的下标,如果该下标存在一个数据说明有冲突,不管
 */
public void insert(DataItem item) {
int key = item.getkey();
if (hashArray[key] == null) {
hashArray[key] = item;
}
}
}自己分析一下,复杂度为O(n),比较时间也是O(n),需要一个与集合相同大小的数组,遍历也是O(n) 
如果集合中的数据值很大的话,可以采用比较的哈希函数进行压缩一下

解决方案 »

  1.   

    把有重复的数据存放到一个Set集合中也能达到去掉重复数据的目的,而且更加简洁!
    private static int[] array = { 10, 10, 2, 3, 5, 7, 8, 2, 9, 2, 5, 6, 7 };
    Set<Integer> set=new Set<Integer>();
    for (int i = 0; i < array.length; i++) {
                set.add((Integer)array[i]);
            }
      

  2.   

    顶还是要顶一下...
    不过建议LZ不要用HashTable,那个类感觉快要被抛弃了....用HashSet或者HashMap或许会好点只是建议啦建议...........
      

  3.   

    放到Set集合里的方法最简便吧..
      

  4.   

    其实去掉重复数据可以用collection的几个不能添加重复数据的接口,类就能实现,但是要考虑对程序性能的判断选用轻量级还是重量级的
      

  5.   


    什么是数据结构?
    所谓的Set属于集合,那个不算,要自己写的
      

  6.   

    private static int[] array = { 10, 10, 2, 3, 5, 7, 8, 2, 9, 2, 5, 6, 7 }; 
    Set <Integer> set=new Set <Integer>(); 
    for (int i = 0; i < array.length; i++) { 
                set.add((Integer)array[i]); 
            } 
      

  7.   

    以前一直用hashmap做这个,今天研究一下你这个程序
      

  8.   

    放到Set集合里的方法最简便吧..
      

  9.   

    HashTable好像没有insert方法吧?我只找到put和get方法。。
      

  10.   

    Set中也行,呵呵.楼主技术分这么高,谦虚了.
      

  11.   

    楼主在搞笑,鉴定完毕!你既然然知道"复杂度为O(n)"这几个字,怎么连数据长度和数据元素的关系都不知道?如果我的int[] array只有三个数, int[] array = {1000000001,1000000001,1000000002};
    你将如何把1000000001放到长度只有3的数组中?
      

  12.   

    楼主设计思想很强!另外说明一下,熟练工一般第一时间想到的是:Set
      

  13.   

    好像java中提供set、hashSet、hashTable等库的吧?不过lz要是通过自己写hashTable学习数据结构和理解的话,倒是不错的办法!
    支持!!!