小编Men*_*ena的帖子

String.intern()真的提高了性能吗?

我做了一些调查,以了解如何String.intern()在java中实现该方法.

我从Open JDK 6看了Intern池的C++实现,在那里我看到了一个简单的HashSet.对我而言,这意味着当有人试图实习时String,应该完成下一步:

  1. 找到与给定相关联的哈希码 String
  2. 寻找合适的水桶
  3. 将给定的String与存储桶中的所有其他字符串进行比较.在此步骤之前,桶中可能有0个字符串,一个字符串或很多字符串.因此,如果先前已经将给定的String放入存储桶中,我们将至少进行一次比较(这是最好的情况.当然可能存在很多冲突,现在许多其他字符串都在桶中)
  4. 如果在存储桶中找到了String,则应该通过intern()方法返回它
  5. 如果在存储桶中找不到String,则应将其放入存储桶并通过intern()方法返回

很多人说str1.intern() == str2.intern()会比这更快str1.equals(str2).

但我看不出它应该更快的原因.

正如我所见,str1.equals(str2)我们总是有两个字符串比较char String.equals()方法中的char .

在这种情况下str1.intern() == str2.intern(),我们需要进行多少次比较或将字符串放入池中(对吧,它可以进行大量的比较,它们也是char比较的简单char)?

因此,str1.intern() == str2.intern()即使我们使用==比较字符串,我们也会有许多其他操作,例如前面描述的比较.

当我理解它时,我决定做一些基准测试.

第一个结果告诉我str1.intern() == str2.intern()比这更快str1.equals(str2).

此行为是由于该String.intern()方法是本机的,因此不应每次都解释它并且String.equals()是一个java方法.

所以我决定使用-Xcomp选项让JVM在启动时编译所有代码.

在那之后等于比实习生更快的速度.

我在Java 6和7上测试过它.

所以我的问题是你有没有看到在实际比较字符串比较速度增加的情况?我是怎么回事?

或者也许intern()只能帮助节省更多的免费记忆?

java string string-interning

16
推荐指数
1
解决办法
700
查看次数

Button.setBackground(Drawable background)抛出NoSuchMethodError

我正在实现一个简单的方法来ButtonLinearLayout编程方式添加一个.

当我调用setBackground(Drawable background)方法时,Error抛出以下内容:

java.lang.NoSuchMethodError: android.widget.Button.setBackground

我的addNewButton方法:

private void addNewButton(Integer id, String name) {

        Button b = new Button(this);
        b.setId(id);
        b.setText(name);
        b.setTextColor(color.white);
        b.setBackground(this.getResources().getDrawable(R.drawable.orange_dot));
            //llPageIndicator is the Linear Layout.
        llPageIndicator.addView(b);
}
Run Code Online (Sandbox Code Playgroud)

java android exception button

11
推荐指数
1
解决办法
6万
查看次数

Collectors.toMap()中的错误报告是否已损坏?

List<String> strings = Arrays.asList("3","55","3");
Map<String,Integer> map = strings
    .stream()
    .collect(Collectors.toMap(s ->s, s -> s.length()));
Run Code Online (Sandbox Code Playgroud)

回报

java.lang.IllegalStateException: Duplicate key 1
Run Code Online (Sandbox Code Playgroud)

我希望在哪里复制密钥3

java java-stream

11
推荐指数
1
解决办法
427
查看次数

Java Generics通配符扩展了最终类

为什么Java在编译my时不会抛出任何警告TestGenerics class,考虑到String class是否final且无法扩展?

import java.util.*;
    public class TestGenerics { 
        public void addStrings(List<? extends String> list) {
          // some code here
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

java generics

10
推荐指数
2
解决办法
839
查看次数

将Double转换为long而不会丢失确切的值

我有一个Double对象在转换为long值时会丢失确切的值.

Double d = 1.14*100

System.out.println(d.longValue());
Run Code Online (Sandbox Code Playgroud)

上面的陈述将打印:113.

我想要114打印.

谢谢

java

7
推荐指数
1
解决办法
3万
查看次数

Spring 启动控制器测试 - 模拟存储库但测试实际服务

我正在尝试在Spring boot 2中编写一个测试类,其中:

  • 我想测试一个控制器
  • 我想模拟一个存储库
  • 我想按原样注入服务(即模拟它)

这个类看起来像:

@RunWith(SpringRunner.class)
@WebMvcTest(MyController.class)
public class MyControllerTest {
    @Autowired
    private MockMvc mvc;
    @MockBean
    private MyRepositoryInterface myRepository;
    @Autowired
    private MyService myService;
    // tests follow ...
}
Run Code Online (Sandbox Code Playgroud)

的(唯一)实现MyService带有注释@Service并允许通过其@Autowired构造函数注入存储库:

@Service
public class MyActualService implements MyService {
    private MyRepository repo;
    @Autowired
    public MyActualService(MyRepository repo) {
        this.repo = repo;
    }
    // ...
} 
Run Code Online (Sandbox Code Playgroud)

NoSuchBeanDefinitionException在运行测试时得到了一个,广泛地说“没有MyService可用的”。

我怀疑我可能需要特定的测试配置来获取服务,但我对可用的在线文献感到非常困惑。

任何指针?

spring integration-testing spring-boot

6
推荐指数
1
解决办法
3336
查看次数

Java正则表达式具有正面的表象和负面的表象

我从这种字符串试图提取ou=persons,ou=(.*),dc=company,dc=org立即最后一个字符串前面加一个昏迷后面没有(。*)。在最后一种情况下,应给出dc=company,dc=org

从正则表达式上看,这似乎是正面的(正面)负面看法(之前)。

因此,我已经实现了此regex:,(?<=(,(?!.*\Q(.*)\E))).*但是它,dc=company,dc=org以昏迷形式返回。我想要同样的东西而没有昏迷。我做错了什么?

java regex regex-lookarounds

5
推荐指数
1
解决办法
1276
查看次数

Http Api 响应:列表与地图

我有一个Price包含唯一的Item Id, Mrp, Discount,的对象Seller Price

有一个公开的 Http Api,给定项目 Id 列表后会返回其数据。现在有两种方法可以做到这一点。例如:如果有人在 上执行 GET A,B,C,则响应:

方法 1:返回价格对象列表:

[
    { "ItemId" : "A",
      "Mrp" : 55.0,
      "Discount" : 0.0,
      "Seller Price" : 55.0
    },
    { "ItemId" : "B",
      "Mrp" : 100.0,
      "Discount" : 10.0,
      "Seller Price" : 90.0
    },
    { "ItemId" : "C",
      "Mrp" : 75.0,
      "Discount" : 0.0,
      "Seller Price" : 75.0
    }
]
Run Code Online (Sandbox Code Playgroud)

方法 2:返回价格对象的映射:

{
    "A" :{ "ItemId" : …
Run Code Online (Sandbox Code Playgroud)

rest json web-services http

5
推荐指数
1
解决办法
2624
查看次数

在不可序列化的类中使用瞬态关键字

transient在没有实现的类中使用关键字有意义Serializable吗?

因为没有实现的类Serializable仍然可以被ObjectOutputStream.

java serializable transient

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

java中的模拟setinterval

我需要检查网址(每秒一次)

Timer timer = new Timer();
    TimerTask task = new TimerTask() {
        public void run()
        {
            System.out.print(engine.getLocation());
        }
    };
timer.schedule( task, 1000 );
Run Code Online (Sandbox Code Playgroud)

但我不需要时间表

在JavaScript中它看起来像

var interval = self.setInterval(function(){
    console.log(mywindow.location.href);
},1000);
Run Code Online (Sandbox Code Playgroud)

java

3
推荐指数
1
解决办法
7254
查看次数