当前位置: 首页 > 面试题库 >

如何有效地小写集合的每个元素?

阎修明
2023-03-14
问题内容

小写列表或集合的每个元素的最有效方法是什么?

我对清单的想法:

final List<String> strings = new ArrayList<String>();
strings.add("HELLO");
strings.add("WORLD");

for(int i=0,l=strings.size();i<l;++i)
{
  strings.add(strings.remove(0).toLowerCase());
}

有没有更好,更快的方法?对于Set,此示例的外观如何?由于当前没有方法可以将操作应用于集合(或列表)的每个元素而无需创建其他临时集合?

这样的事情会很好:

Set<String> strings = new HashSet<String>();
strings.apply(
  function (element)
  { this.replace(element, element.toLowerCase();) } 
);

谢谢,


问题答案:

对于列表,这似乎是一个非常干净的解决方案。它应该允许使用特定的List实现,以提供对于线性遍历列表和在恒定时间内替换字符串都是最佳的实现。

public static void replace(List<String> strings)
{
    ListIterator<String> iterator = strings.listIterator();
    while (iterator.hasNext())
    {
        iterator.set(iterator.next().toLowerCase());
    }
}

这是我可以拿出的最好的一套。正如其他人所说,由于多种原因,无法在集合中就地执行该操作。小写字符串可能需要放置在集合中与其替换的字符串不同的位置。此外,如果小写字符串与已添加的另一个小写字符串相同,则可能根本不会将其添加到集合中(例如,“
HELLO”和“ Hello”都将产生“ hello”,这将只能添加到集合一次)。

public static void replace(Set<String> strings)
{
    String[] stringsArray = strings.toArray(new String[0]);
    for (int i=0; i<stringsArray.length; ++i)
    {
        stringsArray[i] = stringsArray[i].toLowerCase();
    }
    strings.clear();
    strings.addAll(Arrays.asList(stringsArray));
}


 类似资料:
  • 问题内容: 如何合并两个保持BST属性的二叉搜索树? 如果我们决定从一棵树中取出每个元素并将其插入到另一个元素中,则此方法的复杂度将为,其中是我们已拆分的树的节点数(例如),是的结点数。另一棵树(例如)。此操作后,只有一个具有节点。 我的问题是:我们能做得比好吗? 问题答案: 纳夫的答案还有更多细节: 将BST展平为排序列表为O(N) 它只是整个树上的“有序”迭代。 两者都做O(n1 + n2)

  • 出身背景我有数字1到20(黑色背景上的白色数字),可以出现在屏幕上,我希望识别这些数字。由于它们不能简单地复制粘贴,我将比较屏幕上数字的白色像素位置与所有20个数字的白色像素位置列表。然而,每个数字可以有大量的像素,并且可能不需要比较所有这些像素来识别该数字。因此,我希望尽可能少地进行比较。 算法问题:我有多个集合,其中的元素在每个集合中是唯一的,但在所有集合中可能不是唯一的。如何找到每个集合的最

  • 所以我试图生成一个数组,其中填充了唯一的随机整数,我发现用arraylist来实现这一点是最有效的方法。 现在我试着使用但我不太确定括号里应该放什么,也不确定这是否真的能起作用。有没有其他转换方法,因为我不能简单地通过。

  • 问题内容: 定大小的ndarray有1000左右,如何乘在一起的每一行,快的所有元素?下面的(不明确的)第二个解决方案运行大约0.3毫秒,是否可以改进? 问题答案: 进一步提高性能 起初,一般的经验法则。您正在使用数值数组,因此请使用数组而不是列表。列表看起来可能有点像一个通用数组,但是在后端却完全不同,并且对于大多数数值计算来说绝对是不可行的。 如果您使用Numpy-Arrays编写简单的代码,

  • 问题内容: 如何有效地遍历Java Map中的每个条目? 问题答案: 最佳答案:

  • 在我的Scala(2.11)流应用程序中,我正在使用IBM MQ中的一个队列中的数据,并将其写入一个具有一个分区的Kafka主题。在使用MQ的数据之后,消息负载被拆分为3000个较小的消息,这些消息存储在字符串序列中。然后使用KafkaProducer将这3000条消息中的每一条发送到Kafka(2.x)。 你怎么发那3000条信息? 我不能增加IBM MQ中的队列数(不在我的控制之下),也不能增