简体   繁体   中英

HashSet contains

I have set of keywords and I have one string which contains keyword instances separated by '/'. eg 'Food' or 'Car' are keywords and '/food/oatmeal/fruits' , '/tyre/car/wheel' are strings. Total # of keywords are 5500 . I need to flag this string 'eligible' if it has at least one of the 5550 keywords in it. One way I can do is to load all 5500 keywords in hashSet and split String in to tokens and check if hashSet contains each of the tokens. If find match, I flag that String 'eligible'.

Performance wise, Can there be a better solution ?

A simplified solution for token matching could be

public class REPL {

    private static final HashSet<String> keyWords = new HashSet<>();

    public static void main(String[] args) {
        keyWords.add("food");
        keyWords.add("car");

        String[] strings = {
            "/food/oatmeal/fruits",
            "/tyre/car/wheel",
            "/steel/nuts/bolts",
            "/cart/handle/grill"
        };

        for (String s : strings) {
            System.out.printf("string: %-20s  ", s);
            if (isEligible(s)) {
                System.out.println("eligible: true");
            } else {
                System.out.println("eligible: false");
            }
        }
    }

    private static boolean isEligible(String s) {
        StringTokenizer st = new StringTokenizer(s, "/");
        while (st.hasMoreTokens()) {
            if (keyWords.contains(st.nextToken())) {
                return true;
            }
        }
        return false;
    }
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM