Я делаю datastucture, где я могу:Как заменить объекты Integer с примитивами
- добавить пару с начальными и конечными точками
- может получить список испытаний пара
- интервала для имеющих пробелов
Например (0,4), (6,8) проверить (2,4) - true проверить (0), (0) (3,8) - ложь, поскольку существует разрыв между 4 и 6.
Как я могу изменить код ниже, например, установить list
и список data
будет содержать примитивные int
вместо объекта Integer
?
EDIT: Я знаю, что дженерики java не могут быть примитивными, поэтому список невозможно. Моя мотивация исходит от реализации других данных.
eh HashMap < Целое, Объект> в основном то же самое, что android SparseArray с diffenrece, что SparseArray использует ints вместо целых чисел для ключей.
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 Generics не поддерживает примитивы. Если вы так хотите, вы можете создать явный массив. –
Вы запрашиваете реализацию списка, которая запрещает пробелы или о дженериках? –
@TimBiegeleisen о дженериках. например, HashMap - это, в основном, то же самое, что android SparseArray