Java Arraylist中计数字段出现问题并保存
我有一个ArrayList,它的值是Java Arraylist中计数字段出现问题并保存,java,arraylist,Java,Arraylist,我有一个ArrayList,它的值是 ACU ACU ACU ACU ACY ACY AER AER AER AGC 我需要得到每个单词的项数,以便 ACU我们将得到4 我们将得到2个 我们将得到3个 AGC我们将得到1 通常,一个单词重复的数字是一个变量 所以另一次ACU可能是1,ACY可能是100 所以,我有一个类来保存值“whatWord”和“howmount” 我被困在这里,因为我知道下面代码中的get(I+1)部分会导致错误,你知道值不存在,但我不知道该怎么办 ArrayList
ACU
ACU
ACU
ACU
ACY
ACY
AER
AER
AER
AGC
我需要得到每个单词的项数,以便
- ACU我们将得到4
- 我们将得到2个
- 我们将得到3个
- AGC我们将得到1
ArrayList<Word> arrayWords = new ArrayList<Word>();
int cuantos = 0;
for (int i=0;i<OriginalList.size();i++) {
String word1 = OriginalList.get(i).getWord();
String word2 = OriginalList.get(i+1).getWord();
if (word1.equals(word2)){
//this counter is bad here...
//where do i increment it??
howMany++;
Word a = new Word(word1,howMany);
///....DONT KNOW WHERE TO ADD THE OBJECT
//to the list
//arrayWords.add(a)
}
}
首先,我尝试进行HashMap尝试,请帮助我使用以下代码:
HashMap table = new HashMap();
int value=0;
String key=null;
//INITIALIZE HASH??? LIKE THIS
for (int i = 0; i < OriginalList.size; i++) {
table.put(0,OriginalList.get(i).getWord());
}
String word1=null;
ArrayList<Word> arrayWords = new ArrayList<Word>();
//LOOP FOR SEARCHING
for (int i = 0; i < OriginalList.size(); i++) {
key = OriginalList.get(i).getWord();
if (table.containsKey(key)) {
word1 = (String) table.get(key);
value++;
}else {
word1 = (String) table.get(key);
value=1
}
//Add result??
Word a = new Word(word1,value);
}
HashMap table=newhashmap();
int值=0;
字符串键=null;
//初始化哈希???这样地
for(int i=0;i
提前谢谢 迭代
原始列表
并将单词放入哈希映射
。如果不存在,则从count1开始,否则递增。为什么不将循环计数器设置为1
String word1 = OriginalList.get(i-1).getWord();
String word2 = OriginalList.get(i).getWord();
这样,您就永远不会超出限制。对于您想要做的事情来说,这可能是过火了。您可以更简单地创建一个以三个字母字符串作为键、以计数作为值的映射。然后只需在ArrayList上迭代:
Map<String, Integer>wordCount = new HashMap<String, int>();
for(String seq : yourWordList){
// increment the count of the word by first obtaining its count,
// and then incrementing it. Paranthesis for clarity
wordCount.put(seq, (wordCount.get(seq)) + 1);
}
MapwordCount=newHashMap();
for(字符串顺序:yourWordList){
//通过首先获取单词的计数来增加单词的计数,
//然后增加它。为了清楚起见
wordCount.put(seq,(wordCount.get(seq))+1);
}
我认为您要寻找的答案是“普通收藏”
JavaDoc:返回一个映射,将给定集合中的每个唯一元素映射到一个整数,该整数表示该元素在集合中的出现次数
例如
List<String> words = new ArrayList();
Map counts = CollectionUtils.getCardinalityMap(words);
List words=new ArrayList();
映射计数=CollectionUtils.getCardinalityMap(字);
+1好主意,但是对于计算数字,我建议使用AtomicInteger(因为它是可变的)。@Helper:事实上,AtomicXXXXX似乎没有做得更好,请参见Ok!!!,感谢您的帮助,但仍然不知道在我的ArrayList中添加具有正确值的元素的位置,也有您放置“wordCount.get(seq++)”的位置。请解释一下,好吗??谢谢,wordCount将包含这些值!!!,但是“wordCount.get(seq++)”将做什么?在wordCount.put(seq,wordCount.get(seq++)中获取一个错误;“无法从字符串转换为int”如何解决此问题,谢谢!!:)如果我删除反增量wordCount.put(seq,wordCount.get(seq));我得到了列表,但它们的值为null ACU=null ACY=null,由于自动装箱,请参阅@达伦:另外,你的代码应该是wordCount.put(seq,wordCount.get(seq)++)代码>重复?实际上,看起来埃德加从达伦的解决方案中提出了一个新问题:对不起,凯文·布洛克,原因是我需要解决这个问题,我知道我对地图了解不多,但我确实一直在搜索类似这样的信息
Map<String, Integer>wordCount = new HashMap<String, int>();
for(String seq : yourWordList){
// increment the count of the word by first obtaining its count,
// and then incrementing it. Paranthesis for clarity
wordCount.put(seq, (wordCount.get(seq)) + 1);
}
List<String> words = new ArrayList();
Map counts = CollectionUtils.getCardinalityMap(words);