如何创建一个只返回Java中不同元素的迭代器?

时间:2012-01-24 23:16:55

标签: java iterator stack

问题的更多细节:我需要为Stack of Strings创建一个迭代器,它使用一个ArrayList,它只返回文件中全部小写后的单词,并使用Scanner。我最后必须对数组进行排序。我必须为这个问题创建两个单独的类。

这是我到目前为止所拥有的:

import java.io.*;
import java.util.*;

 public class StackClass
 {
    static StringSet stringStack;
    static Scanner console = new Scanner(System.in);
    public static void main(String[] args)
    {


    stringStack = new StringSet();

    System.out.println("Please input the filename: ");
    String fileName = console.next();

    try {
        FileReader file = new FileReader(fileName);
        Scanner input = new Scanner(file);
        while (input.hasNext())
        {   
            input.useDelimiter("\\W");
            //lcString.toLowerCase();
              (I commented this out^ until I figure it out)
            stringStack.add(input.next());

        }
        }
    catch (FileNotFoundException e) {e.printStackTrace();}
}
 }

这是我的另一堂课:

import java.util.*;

public class StringSet implements Iterable<String>
{
static Stack<String> stringStack;
private ArrayList<String> stackList = new ArrayList<String>();


//for loop goes through all the words in stack 
//if the word is found then ignore it, if not add it to the stack
public String add(String s)
{
    for(int i=0;i>0;i++)
    {
    stringStack.push(s);
    }
    return s;
}


public int size( int i)
{
    return stringStack.size();
}

public Iterator<String> iterator()
{return new WordIterator();}

class WordIterator implements Iterator<String>
{
    private int i=0;
    public boolean hasNext(){return i>0;}
    public String next(){return stackList<String>;}
}
}   

1 个答案:

答案 0 :(得分:2)

如果问题是“如何仅通过唯一的单词进行迭代”,我只需使用HashSet作为单词,并将单词推入堆栈

1)如果单词在HashSet中,请不要将其推入。 2)如果单词不在HashSet中,则将其推入并将其添加到HashSet。

如果需要跟踪出现的次数,可以使用HashMap而不是HashSet,在那里增加遇到的重复字符串的数量。

如果您需要保留订购&amp;对于某些东西的出现次数,我会保留一个单独的非唯一堆栈,我只是推动所有东西。

我希望我能正确理解你的问题。