这可能吗?Java中字符串和集合的交集。
例如,我有一个包含城市名称的字符串和一个包含城市名称的集合这可能吗?Java中字符串和集合的交集。,java,string,Java,String,例如,我有一个包含城市名称的字符串和一个包含城市名称的集合 String line = "I love New York, but I left my heart in San Fransisco."; Set<String> set = new HashSet<String>(); set.add("New York"); set.add("San Fransisco"); set.add("Atlanta"); 如果您使用的是Java8,那么可以像这样查找集合中包含
String line = "I love New York, but I left my heart in San Fransisco.";
Set<String> set = new HashSet<String>();
set.add("New York");
set.add("San Fransisco");
set.add("Atlanta");
如果您使用的是Java8,那么可以像这样查找集合中包含的所有城市名称
String line = "I love New York, but I left my heart in San Fransisco.";
Set<String> set = new HashSet<>();
set.add("New York");
set.add("San Fransisco");
set.add("Atlanta");
set.stream().filter(line::contains).forEach(System.out::println);
String line=“我爱纽约,但我把心留在了旧金山。”;
Set=newhashset();
集合。添加(“纽约”);
集合。添加(“旧金山”);
集合。添加(“亚特兰大”);
set.stream().filter(line::contains).forEach(System.out::println);
这两种方法(OP的问题和@janith1024的答案)在时间复杂度上是相同的-O(n*m)
n
是集合的大小,m
是字符串中的字符数
这两种方法中哪一种更好是一个偏好问题(基于您觉得哪一种更容易阅读)
获得更好答案的一种方法是对这两个集合进行排序,并对它们进行线性比较。然后,时间复杂度将是
O(n logn)
,其中n
将是较大集合的大小。但问题是,没有办法将行
拆分为一个集合。您不能将其分解为单词,因为某些城市将由2个单词组成。您的意思是行。包含?似乎需要找到所有城市对?@user7不一定所有对。它可能需要一个、两个或多个城市。如果(set.contains(city1){…}
是完全不必要的。周围的循环将city1
设置为set
的成员,因此city1
只包含set
的成员,因此set.contains(city1)
将始终为true
。这不会影响结果,但只会增加低效率。redix trie将是一个不错的选择
String line = "I love New York, but I left my heart in San Fransisco.";
Set<String> set = new HashSet<>();
set.add("New York");
set.add("San Fransisco");
set.add("Atlanta");
set.stream().filter(line::contains).forEach(System.out::println);