如何在数组列表中查找唯一单词的数量

时间:2017-01-13 07:45:00

标签: java

所以我试图创建一个for循环来查找ArrayList中的唯一元素。 我已经存储了ArrayList用户输入20个位置(允许重复)但我仍然坚持如何计算列表中输入的不同位置的数量,不包括重复项。 (我想避免使用哈希)

输入:

[park, park, sea, beach, town]

输出:

[Number of unique places = 4]

以下是我试图制作的代码的一个粗略示例:

public static void main(String[] args) {

  ArrayList<City> place = new ArrayList();
  Scanner sc = new Scanner(System.in);

  for(...) {  // this is just to receive 20 inputs from users using the scanner
    ...
  }

# This is where i am lost on creating a for loop...

}

6 个答案:

答案 0 :(得分:4)

您可以使用Set。 https://docs.oracle.com/javase/7/docs/api/java/util/Set.html

将列表数据存储到SetSet中不会有重复项,因此set的大小将是没有重复项的元素。

使用此方法获取设置大小。 https://docs.oracle.com/javase/7/docs/api/java/util/Set.html#size()

示例代码。

        List<String> citiesWithDuplicates =
                Arrays.asList(new String[] {"park", "park", "sea", "beach", "town"});
        Set<String> cities = new HashSet<>(citiesWithDuplicates);

        System.out.println("Number of unique places = " + cities.size());

答案 1 :(得分:2)

如果您能够使用Java 8,则可以使用Java流的distinct方法:

int numOfUniquePlaces = list.stream().distinct().count();

否则,使用集合是最简单的解决方案。由于您不想使用&#34; hash&#34;,请使用TreeSet(尽管HashSet在大多数情况下是更好的解决方案)。如果这也不是一个选项,那么您必须手动检查每个元素是否重复。

答案 2 :(得分:1)

如果您不想使用SetMap接口的实现(这可以解决您的一行代码问题)并且您希望坚持ArrayList,我建议使用Collections.sort()方法之类的东西。它会对你的元素进行排序。然后遍历排序的数组并比较和计算重复项。这个技巧可以让您更轻松地解决迭代问题。

无论如何,我强烈建议使用Set接口的一个实现。

答案 3 :(得分:1)

想到的一种方法(不使用Set或哈希值)是制作第二个列表。

ArrayList<City> places = new ArrayList<>();
//Fill array

ArrayList<String> uniquePlaces = new ArrayList<>();
for (City city : places){
    if (!uniquePlaces.contains(city.getPlace())){
        uniquePlaces.add(city.getPlace());
    }
}

//number of unique places:
int uniqueCount = uniquePlaces.size();

请注意,这不是超级效率= D

答案 4 :(得分:0)

使用以下答案。如果有多个重复元素,这将在不同列表中添加最后一个重复元素。

List<String> citiesWithDuplicates = Arrays.asList(new String[] {
                "park", "park", "sea", "beach", "town", "park", "beach" });
        List<String> distinctCities = new ArrayList<String>();

        int currentIndex = 0;

        for (String city : citiesWithDuplicates) {
            int index = citiesWithDuplicates.lastIndexOf(city);
            if (index == currentIndex) {
                distinctCities.add(city);
            }
            currentIndex++;
        }
            System.out.println("[ Number of unique places =  "
            + distinctCities.size() + "]");

答案 5 :(得分:0)

好吧,如果你不想使用任何HashSets或类似的选项,这样的快速和脏的嵌套for循环就可以了(如果你有很多项目,那就太慢了)很好)):

int differentCount=0;
for(City city1 : place){
    boolean same=false;
    for(City city2 : place){
       if(city1.equals(city2)){
         same=true;
         break;
       }
    }
    if(!same)
      differentCount++;
}
System.out.printf("Number of unique places = %d\n",differentCount);