集合-倒排索引

import java.util.*;

public class Main {

    public static void main(String[] args) {

        Scanner in = new Scanner(System.in);//新创建一个输入的Scanner 对象,然后赋值给in

        Map<String, List<Integer>> map = new HashMap();//Map 是 interface,HashMap 是 实现类

        int n = 0;

        List<String> lines = new ArrayList<>();

        while (true) {

            String line = in.nextLine();

            if (line.equals("!!!!!"))

                break;

            n++;

            lines.add(line);

            String[] words = line.split(" ");

            for (String word : words) {

                if (map.containsKey(word)) {

                    if (map.get(word).contains(n))

                        continue;

                    map.get(word).add(n);

                } else {

                    List<Integer> index = new ArrayList<>();

                    index.add(n);

                    map.put(word, index);

                }

            }

        }

        List<Map.Entry<String, List<Integer>>> list = new ArrayList<>(map.entrySet());

        Collections.sort(list, Comparator.comparing(Map.Entry::getKey));//冒泡排序,效率对比

        for (int i = 0; i < list.size(); i++) {

            System.out.println(list.get(i));

        }

        while (true) {

            String[] keys = in.nextLine().split(" ");

            List<List<Integer>> index = new ArrayList<>();

            for (int i = 0; i < keys.length; i++) {

                for (int j = 0; j < list.size(); j++) {

                    if (list.get(j).getKey().equals(keys[i])) {

                        index.add(list.get(j).getValue());

                    }

                }

            }

            if (index.size() == 0) {

                System.out.println("found 0 results");

                continue;

            }

            List<Integer> result = index.get(0);

            if (keys.length >= 2) {

                for (int i = 1; i < index.size(); i++) {

                    result.retainAll(index.get(i));

                }

                if (result.size()==0){

                    System.out.println("found 0 results");

                    continue;

                }

            }

            System.out.println(result);

            for (int i : result) {

                System.out.println("line "+i+":"+lines.get(i-1));

            }

        }

    }

}

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容