相关疑难解决方法(0)

如何计算方法在Java中的执行时间?

如何获得方法的执行时间?是否有Timer实用程序类用于计算任务需要多长时间等等?

Google上的大多数搜索会返回计划线程和任务的计时器的结果,这不是我想要的.

java timing

792
推荐指数
26
解决办法
65万
查看次数

在Java中迭代列表的方法

对于Java语言有些新意,我试图让自己熟悉一个可能遍历列表(或者可能是其他集合)以及每个集合的优点或缺点的所有方法(或者至少是非病态方法).

给定一个List<E> list对象,我知道以下循环所有元素的方法:

基本 循环(当然,还有就是相当于while/ do while循环以及)

// Not recommended (see below)!
for (int i = 0; i < list.size(); i++) {
    E element = list.get(i);
    // 1 - can call methods of element
    // 2 - can use 'i' to make index-based calls to methods of list

    // ...
}
Run Code Online (Sandbox Code Playgroud)

注意:正如@a​​marseillan指出的那样,这种形式对于迭代Lists来说是一个糟糕的选择,因为该get方法的实际实现可能不如使用时那样有效Iterator.例如,LinkedList实现必须遍历i之前的所有元素以获得第i个元素.

在上面的例子中,List实现没有办法"保存它的位置"以使未来的迭代更有效.因为ArrayList它并不重要,因为复杂性/成本get是恒定时间(O(1)),而a LinkedList是它与列表的大小(O(n))成比例.

有关内置Collections实现的计算复杂性的更多信息,请查看此问题 …

java iteration collections loops

543
推荐指数
6
解决办法
87万
查看次数

哪个更有效,for-each循环还是迭代器?

哪种是最有效的遍历集合的方式?

List<Integer>  a = new ArrayList<Integer>();
for (Integer integer : a) {
  integer.toString();
}
Run Code Online (Sandbox Code Playgroud)

要么

List<Integer>  a = new ArrayList<Integer>();
for (Iterator iterator = a.iterator(); iterator.hasNext();) {
   Integer integer = (Integer) iterator.next();
   integer.toString();
}
Run Code Online (Sandbox Code Playgroud)

请注意,这不是这个,这个,这个这个的完全重复,尽管最后一个问题的答案之一很接近.这不是欺骗的原因是,大多数都是比较你get(i)在循环中调用的循环,而不是使用迭代器.

正如Meta上所建议的,我将发布我对这个问题的回答.

java collections foreach

196
推荐指数
4
解决办法
18万
查看次数

计算字符串中字符出现次数的简单方法

有没有一种简单的方法(而不是手动遍历所有的字符串,或循环遍历indexOf),以便找到一个字符出现在字符串中的次数?

假设我们有"abdsd3 $ asda $ asasdd $ sadas",我们希望$出现3次.

java string

63
推荐指数
6
解决办法
39万
查看次数

Java中传统for循环与Iterator/foreach的性能

在遍历ArrayList,HashMap和其他集合时,是否有任何性能测试结果可用于比较传统的for循环与Iterator?

或者我为什么要使用Iterator for循环,反之亦然?

java iterator for-loop arraylist map

60
推荐指数
3
解决办法
5万
查看次数

为什么foreach语句不会改变元素值?

为什么以下打印老板而不是低音?

String boss = "boss";
char[] array = boss.toCharArray();

for(char c : array)
{
 if (c== 'o')
     c = 'a'; 
}
System.out.println(new String(array)); //How come this does NOT print out bass?It prints boss.
Run Code Online (Sandbox Code Playgroud)

java foreach

49
推荐指数
2
解决办法
3万
查看次数

什么是Java中的每个表达式转换为?

 for ( SomeListElement element : objectWithList.getList() ) { ... }
Run Code Online (Sandbox Code Playgroud)

上面的代码片段是什么?

我最感兴趣的是如果getList()方法调用一次,还是每次迭代/元素?

java foreach

35
推荐指数
2
解决办法
2762
查看次数

for循环中的python变量的范围

下面是我遇到问题的python代码:

for i in range (0,10):
    if i==5:
        i+=3
    print i
Run Code Online (Sandbox Code Playgroud)

我期望输出为:

0
1
2
3
4
8
9
Run Code Online (Sandbox Code Playgroud)

然而翻译吐出:

0
1
2
3
4
8
6
7
8
9
Run Code Online (Sandbox Code Playgroud)

我知道for循环为C中的变量创建了一个新的作用域,但不知道python.任何人都可以解释为什么python i中的for循环中没有变化的值,并且为了获得预期的输出有什么补救措施.

python scope for-loop

34
推荐指数
4
解决办法
3万
查看次数

为什么增强的for循环的局部变量必须是本地的?

根据Java语言规范,§14.14.2,增强for循环的变量必须是循环的局部变量.换句话说,这编译:

for (State state : State.values()) {
    // do something for each state
}
Run Code Online (Sandbox Code Playgroud)

但这不是:

State state;
for (state: State.values()) {
    // do something for each state
}
Run Code Online (Sandbox Code Playgroud)

JLS没有给出这种语言设计选择的理由.我可以看到为什么如果局部变量被final注释修改或者注释修改了类型名称必须存在,但我不明白为什么不允许在其他地方声明的变量的裸名称.有没有人知道为什么要施加这种限制?

编辑

到目前为止,几个答案似乎暗示在循环外发生的事情是以这种方式设计语言的原因.或许仔细研究JLS所说的将澄清为什么我没有发现这令人信服.考虑这个循环,其中State是枚举:

for (State state : State.values()) {
    // ...
}
Run Code Online (Sandbox Code Playgroud)

State.values() 是一个数组,所以根据JLS,循环在功能上与:

State[] a = State.values();
for (int i = 0; i < a.length; i++) {
    State state = a[i];
    // ...
}
Run Code Online (Sandbox Code Playgroud)

现在显然可以编写后一个循环:

State state;
State[] a = State.values();
for (int …
Run Code Online (Sandbox Code Playgroud)

java foreach language-design

32
推荐指数
4
解决办法
5456
查看次数

检测最后的foreach循环迭代

假设我有这样的foreach循环:

Set<String> names = new HashSet<>();

//some code

for (String name: names) {

     //some code

}
Run Code Online (Sandbox Code Playgroud)

有没有办法检查内部foreach实际名称是Set没有计数器的最后一个?

(对不起,如果这是一个重复的问题,我在这里找不到这样的问题)

java algorithm collections

29
推荐指数
3
解决办法
5万
查看次数