当前位置: 首页 > 知识库问答 >
问题:

如何用原语替换整数对象

云联
2023-03-14
    null

例如。添加(0,2),(0,1),(3,4),(6,8)将返回(0,4),(6,8)check(2,4)-true check(3,8)-false,因为4和6之间有一个间隙。

如何修改下面的代码,例如setlist和listdata将包含基元int而不是对象integer

编辑:我知道java泛型不能是一个原语,所以列表是不可能的。我的动机来自于其他数据结构的实现。
例如hashmap 与android SparseArray基本相同,不同之处在于SparseArray使用整数而不是整数作为键。

public class GapAwareList {
  Set<Integer> list = new HashSet<>();

  public void put(int start, int end) {
    for (int i = start; i <= end; i++) {
      list.add(i);
    }
  }

  public void remove(int start, int end) {
    for (int i = start; i <= end; i++) {
      list.remove(i);
    }
  }

  public List<Pair<Integer, Integer>> getPairs() {
    List<Integer> data = new ArrayList<>();
    data.addAll(list);
    Collections.sort(data);
    List<Pair<Integer, Integer>> pairs = new ArrayList<>();
    int last = data.get(data.size() - 1);
    int s = -1;
    int e;
    for (int i = 0; i <= last; i++) {
      if (list.contains(i)) {
        if (s == -1) {
          s = i;
        }
        e = i;
        if (!list.contains(i + 1)) {
          Pair<Integer, Integer> p = new Pair<>(s, e);
          pairs.add(p);
          s = -1;
        }
      }
    }
    return pairs;
  }

  public boolean haveGap(int start, int end) {
    boolean b = false;
    for (int i = start; i < end; i++) {
      if (!list.contains(i)) {
        b = true;
        break;
      }
    }
    return b;
  }
}
public class Pair {
  public final int first;
  public final int second;

  public Pair(int first, int second) {
    this.first = first;
    this.second = second;
  }

}
public class ExampleUnitTest {

  @Test public void gapSize() throws Exception {
    GapAwareList gaps = fillGaps();

    gaps.put(0, 2);
    gaps.put(0, 1);
    gaps.put(3, 4);
    gaps.put(6, 8);
    List<Pair<Integer, Integer>> pairs = gaps.getPairs();

    assertEquals(3, pairs.size());
  }

  @Test public void gapFirst() throws Exception {
    GapAwareList gaps = fillGaps();

    gaps.put(0, 2);
    gaps.put(0, 1);
    gaps.put(3, 4);
    gaps.put(6, 8);
    List<Pair<Integer, Integer>> pairs = gaps.getPairs();

    assertTrue(pairs.get(0).first == 0);
    assertTrue(pairs.get(0).second == 4);
  }

  @Test public void gapSecond() throws Exception {
    GapAwareList gaps = fillGaps();
    List<Pair<Integer, Integer>> pairs = gaps.getPairs();

    assertTrue(pairs.get(1).first == 6);
    assertTrue(pairs.get(1).second == 8);
  }

  private GapAwareList fillGaps() {
    GapAwareList gaps = new GapAwareList();
    //add (0,2),(0,1),(3,4),(6,8)
    gaps.put(0, 2);
    gaps.put(3, 4);
    gaps.put(0, 1);
    gaps.put(6, 8);
    gaps.put(13,11);
    gaps.put(13, 13);
    gaps.put(13, 14);

    return gaps;
  }
  @Test public void checkGaps(){
    GapAwareList gaps = fillGaps();
    assertFalse(gaps.haveGap(0,4));
    assertFalse(gaps.haveGap(6, 8));
    assertFalse(gaps.haveGap(6, 7));
    assertTrue(gaps.haveGap(4, 6));
  }
}

共有1个答案

赵雅懿
2023-03-14

摘自Java文档“泛型的限制”:

无法用基元类型实例化泛型类型

请考虑以下参数化类型:

class Pair<K, V> {

    private K key;
    private V value;

    public Pair(K key, V value) {
        this.key = key;
        this.value = value;
    }

    // ...
}
Pair<int, char> p = new Pair<>(8, 'a');  // compile-time error
Pair<Integer, Character> p = new Pair<>(8, 'a');
Pair<Integer, Character> p = new Pair<>(Integer.valueOf(8), new Character('a'));
 类似资料:
  • 本文向大家介绍如何将整数转换为用R语言写的整数?,包括了如何将整数转换为用R语言写的整数?的使用技巧和注意事项,需要的朋友参考一下 如果我们有数字,那么我们可能希望将这些数字转换为单词。例如,将1转换为1。如果我们有文本数据并且数字是文本的一部分,则可能需要这样做。因此,最好以文本形式表示数字,以使文本保持一致。这可以通过使用replace_number函数qdap软件包来完成。 安装和加载qda

  • 问题内容: 更好写吗 要么 我认为第二个更好,应该更快并且更多的内存优化。但是他们不平等吗? 问题答案: 为了提高性能,通常最好使代码尽可能简单明了,并且通常会表现良好(因为JIT会最优化该代码)。就您而言,最简单的示例也可能是最快的。 我要么做 或更长的版本 要么 如果不需要,最好不要创建对象。 性能明智,第一是最好的。 如果您确定不会溢出,可以使用 您不会比这更快。

  • 问题内容: 我有一个看起来像的字符串: 我得到此字符串作为结果返回给AJAX请求。 我希望浏览器呈现并显示该字符串。这个想法是做这样的事情: 好吧,那是行不通的。我尝试使用IFRAME,但是我也没有弄清楚如何使它工作。 注意: 我无法更改此字符串。我也无法在随后的服务器调用中重新生成此字符串(否则我可以将浏览器重定向到该URL)。 问题答案: document.open/write/close方法

  • 本文向大家介绍JavaScript:用数组替换对象键,包括了JavaScript:用数组替换对象键的使用技巧和注意事项,需要的朋友参考一下 我们需要编写一个JavaScript函数,该函数接受一个对象和一组文字。 数组的长度和对象中的键数将始终相等。我们的函数应将对象的相应键替换为数组的元素。 例如:如果输入数组和对象是- 那么输出应该是- 示例 为此的代码将是- 输出结果 控制台中的输出-

  • null 我读过PDO的书。如何使用MySQL或MSSQL将代码更新为PDO?

  • 问题内容: 如果在select语句中有空值,我尝试用新字符串替换列: 我不尝试更新它,仅在查询结果中将值显示为“ no person”。 但我收到一个错误消息: 将varchar值转换为int数据类型时,转换失败。 我该如何克服? 问题答案: 替换为: 有了这个: