小编Aru*_*pal的帖子

为什么servlet的init()方法在另一个线程中运行?

这摘自《 Head First Servlets and JSP》一书。我不明白的是为什么该init()方法仅在线程中运行A,而之后的service()方法在另一个线程中运行B

这是否意味着从浏览器到servlet的每个请求都有两个线程?还是 init()容器可能创建的所有servlet实例通用?那是错误的,因为它不是静态方法?

在此处输入图片说明

java multithreading jsp tomcat servlets

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

为什么Map.values()返回抽象实现?

Map<Integer, String> map = new TreeMap<>();
map.put(1, "String1");
map.put(2, "String2");
map.put(3, "String3");
Run Code Online (Sandbox Code Playgroud)

我想将map的值转换为set。我知道我可以轻松做到

Set<String> set = new HashSet<>(map.values());
Run Code Online (Sandbox Code Playgroud)

在考虑这一点时,我很好奇它到底是什么map.values()?所以我尝试了这个

System.out.println("Set:"+ (map.values() instanceof Set));      
System.out.println("List:"+ (map.values() instanceof List));    
System.out.println("Queue:"+ (map.values() instanceof Queue));
System.out.println("SortedSet:"+ (map.values() instanceof SortedSet));
Run Code Online (Sandbox Code Playgroud)

输出令人惊讶的是

Set:false
List:false
Queue:false
SortedSet:false
Run Code Online (Sandbox Code Playgroud)

就是所有文档所说的。

此地图中包含的值的集合视图

然后,我查看了反编译的类文件。

public Collection<V> values() {
    if (values == null) {
        values = new AbstractCollection<V>() {
            public Iterator<V> iterator() {
                return new Iterator<V>() {
                    private Iterator<Entry<K,V>> i = entrySet().iterator();

                    public boolean hasNext() {
                        return …
Run Code Online (Sandbox Code Playgroud)

java collections

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

在编程中 !(~A &amp;&amp; ~B) 比 (A||B) 更好吗?

我正在开发Java并使用它IntelliJ作为我的 IDE。我写了一份if声明如下。

if( list1.size() >= 1 || list2.contains(itemX) ) {
    //do something
}
Run Code Online (Sandbox Code Playgroud)

IntelliJ建议进行转换 ( DeMorgan's Law),并将其转换为:

if( ! ( list1.size() < 1 && !( list2.contains(itemX) ) ) ) {
    //do something
}
Run Code Online (Sandbox Code Playgroud)

因此它应用了一种非常常见的离散数学理论来简化布尔表达式。我想知道这是如何优化的?

||如果第一部分本身为 true,则运算符无论如何不会执行整个条件,并且仅当第一部分为 false 时才执行 RHS。

改造后的条件是否有效?如何?

java if-statement intellij-idea demorgans-law

2
推荐指数
1
解决办法
547
查看次数