如何构造动态类型的哈希表

时间:2013-12-06 06:50:51

标签: java hashmap runtime hashset

我有一个函数,它有两个不同类型的列表参数输入。为了优化,我想创建一个最小列表类型的HashSet / Hashtable(其中任何一个)。 java中有没有办法在运行时决定type of Set

当前代码:

   public static void innerJoinHash(List<SportsMan> sportsMans, List<Sport> sportList) {
        if (sportsMans.size() < sportList.size()) {
            Set<SportsMan> set = new HashSet<SportsMan>();
        } else {
            Set<Sport> set = new HashSet<Sport>();
        }
    }

我想做什么:

public static void innerJoinHash(List<SportsMan> sportsMans, List<Sport> sportList) {
    Set< // some magic //> set       
       if (sportsMans.size() < sportList.size()) {
         set = new HashSet<SportsMan>();
    } else {
        set = new HashSet<Sport>();
    }
}

4 个答案:

答案 0 :(得分:1)

您可以尝试使用Java Generics。 Set<E> customSet=new HashSet<E>();

这是一种可以在运行时使用分配数据类型的方法。

  public static void innerJoinHash(List<SportsMan> sportsMans, List<Sport> sportList) {
  Set set = new HashSet();  
  if (sportsMans.size() < sportList.size()) {
        set.addAll(sportsMans)
    } else {
        set.addAll(sportList);
    }
  }

答案 1 :(得分:1)

&#34; //一些魔法//&#34;您正在寻找的是SportSportsMan中最具体的常见超类型。即,如果两个类都实现或扩展了公共接口,则可以使用它。否则,它将是Object

Set<Object> set = new HashSet<>(
    sportsMan.size() < sportsList.size()
    ? sportsMan : sportsList);

答案 2 :(得分:0)

也许我不明白你的问题,但这种做法有什么不对?

    Set myset = new HashSet();
    myset.add("Hello");
    myset.add(new Long(1));

如果你使用Set或Set将其愚蠢,那么你将无法获得泛型。

答案 3 :(得分:0)

创建Set as Object的类型,并且在检索时运行时,您始终可以将对象转换为所需的数据类型。

OR

public static void innerJoinHash(List<SportsMan> sportsMans, List<Sport> sportList) {    
       if (sportsMans.size() < sportList.size()) {
      Set set = new HashSet<SportsMan>();
    } else {
       Set set = new HashSet<Sport>();
    }
}