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

如何创建一个只返回Java中不同元素的迭代器?,java,iterator,stack,Java,Iterator,Stack,问题的更多细节:我需要为字符串堆栈创建一个迭代器,该迭代器使用一个ArrayList,该ArrayList只返回文件中所有小写单词后不同的单词,并使用扫描器进行此操作。最后我必须对数组进行排序。我必须为这个问题创建两个单独的类 这就是我目前的情况: import java.io.*; import java.util.*; public class StackClass { static StringSet stringStack; static Scanner conso

问题的更多细节:我需要为字符串堆栈创建一个迭代器,该迭代器使用一个ArrayList,该ArrayList只返回文件中所有小写单词后不同的单词,并使用扫描器进行此操作。最后我必须对数组进行排序。我必须为这个问题创建两个单独的类

这就是我目前的情况:

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>;}
}
}   
这是我的另一门课:

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>;}
}
}   
import java.util.*;
公共类StringSet实现了Iterable
{
静态堆栈;
private ArrayList stackList=new ArrayList();
//for循环遍历堆栈中的所有单词
//如果找到该单词,则忽略它,如果没有,则将其添加到堆栈中
公共字符串添加(字符串s)
{
对于(int i=0;i>0;i++)
{
stringStack.push(s);
}
返回s;
}
公共整数大小(整数i)
{
返回stringStack.size();
}
公共迭代器迭代器()
{返回新的WordIterator();}
类WordIterator实现了迭代器
{
私有整数i=0;
公共布尔hasNext(){return i>0;}
公共字符串next(){return stackList;}
}
}   
如果问题是“如何仅通过唯一的单词进行迭代”,我只需对单词使用哈希集,然后将单词推到堆栈上

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

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

如果您需要保留某些内容的顺序和出现次数,我会保留一个单独的非唯一堆栈,在那里我只需推送所有内容


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

这是家庭作业吗?如果是,请贴上标签。是否允许在消除重复项的过程中使用集合?为什么不将它们放入集合并返回集合的迭代器?如果这是家庭作业,请将其贴上标签。我已将其改为家庭作业…对不起!杰夫,你是说散列集吗?如果是这样的话,我不太熟悉。为了保留插入顺序,您可以使用
LinkedHashSet
LinkedHashMap
而不是常规的。谢谢。我们还没有真正讨论hashset。我知道该怎么做,但就是不知道怎么做。我只想将所有单词读入数组列表,然后对列表进行排序。然后,我想遍历列表,将每个元素与前面的元素进行比较,如果元素与前面的元素匹配,则删除该元素。我不知道什么时候最好的办法是转换成小写字母。