例如。添加(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
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));
}
}
摘自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数据类型时,转换失败。 我该如何克服? 问题答案: 替换为: 有了这个: