使用Java中的集合重复消除

时间:2012-11-07 22:30:01

标签: java duplicates set

编写一个程序,该程序读入一系列名字,并通过将它们存储在Set中来消除重复项。允许用户搜索名字。

(相信我,我没有参加任何Java课程。所以,不是我的作业)。

我的问题是要实现这一点:允许用户搜索名字。

其他一切都有效,只有搜索功能。

到目前为止

我的代码....

package com.Sets;

import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Scanner;
import java.util.Set;

public class DuplicateElimination {

    public static void main(String[] args) {

        // Write a program thats ask for first names and store it in an array.

        String fName;

        Scanner input = new Scanner(System.in);
        String[] names = new String[10];

        for (int i = 0; i < names.length; i++) {
            System.out.println("Enter First Name: ");
            names[i] = input.nextLine();
        }
        // Printout that array as a list.
        List<String> list = Arrays.asList(names);

        // Initial Array Elements
        System.out.printf("%s ", list);
        System.out.println();

        // Calling removeDuplicates method
        removeDuplicates(list);

    }

    // Make a method called removeDuplicates.
    private static void removeDuplicates(Collection<String> values) {

        // Implement a Hashset in it.
        Set<String> set = new HashSet<String>(values);

        // Printout a non-duplicate list of elements.
        for (String value : set) {
            System.out.printf("%s ", value);
        }

        System.out.println();

    }

    // Make a method to search for a first name.
    public static void searchForName(Collection<String> names) {

        String someName;

        Set<String> set = new HashSet<String>(names);
        Scanner input = new Scanner(System.in);


        for (int i = 0; i <= 10; i++) {
            System.out.println("Search this name: ");
            someName = input.nextLine();
        }

        if (someName ) {

        } else {

        }
    }

}

我对我的searchForName方法没有信心...有人可以就如何使这项工作有所了解吗?

4 个答案:

答案 0 :(得分:1)

考虑让removeDuplicates返回Set。将Set传递给searchForName。然后使用Set.contains

Set.contains

答案 1 :(得分:1)

public static boolean searchForName(Collection<String> names, String someName) 
{
    Set<String> set = new HashSet<String>(names);
    return set.contains(someName);
}

答案 2 :(得分:1)

使用set.contains()方法检查集合是否包含输入字符串。

   for (int i = 0; i <= 10; i++) {
            System.out.println("Search this name: ");
            someName = input.nextLine();
        }

if(set.contains(someName)) {
System.out.println("set contains name");

}
else {
System.out.println("set doesnt contain this name");
}

答案 3 :(得分:1)

您可以使用A TreeSet,然后使用tailSetheadSet 按字母顺序查找所有“大于或等于”和“小于或等于”搜索关键字的元素。

final TreeSet<String> p = new TreeSet<String>();

        p.addAll(Arrays.asList(new String[] { "aaaaaa", "bbbbbbb", "cccccc", "dddddd", "eeeeeee", "fffff" }));

        System.out.println(p.headSet("dd", true));
        System.out.println(p.tailSet("dd", true));

结果:

[aaaaaa, bbbbbbb, cccccc]
[dddddd, eeeeeee, fffff]

tailSet的第一个元素是以搜索键(“dd”)开头的键。 有一个问题 - 如果找不到姓“dddddd”,tailSet会返回:

[eeeeeee, fffff]

所以你总是要检查第一个元素是否与之​​跳过(“dd”),否则就是NotFound!