Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
这可能吗?Java中字符串和集合的交集。_Java_String - Fatal编程技术网

这可能吗?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);