我在java中实现了一包Integers,我不知道该怎么做。我想用HashMap,LinkedHashMap,TreeMap,TreeSet或HashSet这样做。我想做的一些事情是
到目前为止,我尝试过实现一个地图,但是当我尝试添加到地图时遇到问题,因为我正在尝试实现一个整数对象而不是键值对。
public class Bag<Integer> {
private int count = 0;
private HashMap <T, Integer> map;
//class constructor
public Bag(){
this.map = new HashMap <T, Integer>();
}
链接的哈希集最好吗?我想添加重复的整数。
答案 0 :(得分:1)
如果我正确地阅读了你的问题,你只需要
Map<Integer, Integer> integerBag = new HashMap<>();
键:代表你手中的不同整数。
值:表示计数添加相应键的频率。
添加&#34;新&#34;整数,你put(newValue, 1)
进入地图。当相同的数字出现时,你增加那个计数器;并减少删除。
除此之外:
没有立即删除重复整数的结构没有多大意义。整数只是数字;你为什么要记住&#34; 6 6 6&#34; ......当你记得&#34;我得到了6次&#34;呢?!
鉴于您的意见:
见这里:
int intval =5;
Integer asInteger = Integer.valueOf(intval);
if (Integer bag.contains(asInteger)) {
答案 1 :(得分:0)
只需使用HashMap
即可。您可能想要计算您有多少重复项:
Map<Whatever, Long> bag = new HashMap<>();
要添加元素,请使用merge
方法:
bag.merge(someElement, 1, (oldValue, value) -> oldValue + 1);
要删除元素,您可能需要使用computeIfPresent
方法:
bag.computeIfPresent(someElement, (key, value) -> (value == 1 ? null : value - 1));
答案 2 :(得分:0)
由于你的要求#2,我认为你不能使用任何基于散列的集合。如果您需要保留重复的整数,则需要使用List。
添加新项目很简单,只需在列表中调用add()
即可。查找所有项目需要一个短循环;计算它们只需在结果列表中调用size()
。
以下代码未经过测试。
public class Bag<T> {
private List<T> items = new ArrayList<>();
public void add( T i ) { items.add(i); }
public List<T> findAll( T target ) {
ArrayList<T> retVal = new ArrayList<>();
for( T i : items ) {
if( i.equals(target) )
retVal.add( i );
}
return retVal;
}
}