小编Mar*_*llo的帖子

为什么String中的equals方法不使用哈希?

equalsString类中方法的代码是

public boolean equals(Object anObject) {
    if (this == anObject) {
        return true;
    }
    if (anObject instanceof String) {
        String anotherString = (String)anObject;
        int n = count;
        if (n == anotherString.count) {
            char v1[] = value;
            char v2[] = anotherString.value;
            int i = offset;
            int j = anotherString.offset;
            while (n-- != 0) {
                if (v1[i++] != v2[j++])
                    return false;
            }
            return true;
        }
    }
    return false;
}
Run Code Online (Sandbox Code Playgroud)

我有一个问题 - 为什么这个方法不使用hashCode()?

据我所知,hashCode()可以快速比较两个字符串.

更新:我知道,两个不相等的字符串,可以有相同的哈希值.但两个相等的字符串具有相等的哈希值.因此,通过使用hashCode(),我们可以立即看到两个字符串是不相等的.

我只是想,使用hashCode()方法可以很好的过滤器equals.

更新2:这里有一些代码,我们在这里谈论.

这是String方法等于的示例 …

java string hashcode

44
推荐指数
3
解决办法
4633
查看次数

在Android中显示SVG文件

我想创建一个可以在某个平面图上显示位置的应用程序.导航正以某种方式通过WiFi实现,我已经完成了,所以现在我有显示楼层平面图的问题.

它可能是某种矢量格式,在浏览互联网一段时间之后我已经确定它必须是svg文件.我找到了一些解决方案,但它对我不起作用!

  1. 库svg-android

    有机会显示.svg文件,但只显示"简单"文件.它仅适用于教程中的文件,但不适用于任何其他.svg文件(例如,您将使用Inkscape创建的其他文件).

    所以,我决定,我将解析.svg文件,从中创建DOM,以某种方式获取对象和属性,并通过OpenGL ES绘制它.

  2. Apache Batik

    乍一看,非常好的解决方案,但有一个问题.Android有一些"原生"apache库,当我尝试用蜡染做某事时,它会抛出NoClassDefFoundError,因为它不是在蜡染库中搜索,而是在"本机"库中搜索.

    当然,我们可以在我们的项目中添加源代码,只接受.svg文件的蜡染解析器并以某种方式编辑它,但是有很多工作,同样的成功我们可以编写自己的解析器.

  3. 小线

    没有试用版,但是如果我们看到它对svg文件和android的工作原理的描述,我们会看到只有这些文件的光栅化而且都是.

有没有比编写自己的解析器更好的解决方案?有人遇到过这个问题吗?

svg android vector-graphics

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

为什么方法签名中不包含返回类型的方法?

为什么返回类型的方法不包含在签名中?

例如 -

public void method1(String arg){...}

public String method1(String arg){...}
Run Code Online (Sandbox Code Playgroud)

它会导致错误

java

17
推荐指数
2
解决办法
3642
查看次数

无效的ejb jar:它包含零ejb.

我有2个模块:ejb和war,以及包含它们的ear模块.模块构建成功,但是当我尝试将ear部署到glassfish时,我收到了这个错误:

glassfish3.1.2|javax.enterprise.system.tools.admin.org.glassfish.deployment.admin|_ThreadID=17;_ThreadName=Thread-2;|Exception while deploying the app [EarModule] : Invalid ejb jar [BackEnd-1.0-SNAPSHOT.jar]: it contains zero ejb. 
Note: 
1. A valid ejb jar requires at least one session, entity (1.x/2.x style), or message-driven bean. 
2. EJB3+ entity beans (@Entity) are POJOs and please package them as library jar. 
3. If the jar file contains valid EJBs which are annotated with EJB component level annotations (@Stateless, @Stateful, @MessageDriven, @Singleton), please check server.log to see whether the annotations were processed properly.|#]
Run Code Online (Sandbox Code Playgroud)

我真的不知道该怎么做,我发现了很多类似我的问题,但没有解决方案.

ear ejb glassfish

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

如何从每个线程的数组中读取唯一元素?

我有一个基于数组的对象,它实现了以下接口:

public interface PairSupplier<Q, E> {
     public int size();

     public Pair<Q, E> get(int index);
}
Run Code Online (Sandbox Code Playgroud)

我想在它上面创建一个特定的迭代器:

public boolean hasNext(){
     return true;
}

public Pair<Q, E> next(){
     //some magic
}
Run Code Online (Sandbox Code Playgroud)

接下来的方法中,我想从PairSupplier返回一些元素.

这个元素对于线程应该是唯一的,其他线程不应该有这个元素.

由于PairSupplier具有最终大小,因此这种情况并非总是可行,但我想接近它.

元素的顺序无关紧要,线程可以在不同的时间使用相同的元素.

示例: 2 Threads,5 elements-{1,2,3,4,5}

Thread 1  | Thread 2
   1           2
   3           4
   5           1
   3           2
   4           5
Run Code Online (Sandbox Code Playgroud)

我的解决方案:

我创建AtomicInteger索引,我会在每次下一次调用时递增.

PairSupplier pairs;
AtomicInteger index;

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

java concurrency multithreading scalability

12
推荐指数
1
解决办法
1282
查看次数

以编程方式"关闭"bean验证(javax.validation.constraints)

例如,我们在一些实体中有几个字段正在使用注释@Pattern进行验证.该实体在项目的任何地方都使用,但只在一个地方我们需要"关闭"此验证.

有没有办法以编程方式进行,或者这是不可能的?

java validation javabeans jsr bean-validation

8
推荐指数
1
解决办法
2750
查看次数

如何在xsd:enumeration中使用任何字符串

我有这样的xsd类型

<xsd:simpleType name="carsEnum">
    <xsd:restriction base="xsd:string">
        <xsd:enumeration value="Seat"/>
        <xsd:enumeration value="Opel"/>
    </xsd:restriction>
</xsd:simpleType>
Run Code Online (Sandbox Code Playgroud)

现在我可以这样使用它 - <xsd:attribute name="carModel" type="carsEnum"/>

我如何重建carEnum以使用任何其他字符串?

举个例子 -

< ... carModel="Seat"/>
< ... carModel="Some string"/>
< ... carModel="Opel"/>
Run Code Online (Sandbox Code Playgroud)

因为我可以像往常一样制作类型carsEnum String,但是在IDE Idea中使用这样的构造相当舒服,因为它显示了工具提示.

xml xsd

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

如何理解bean是否存在于运行时?

例如,我有一个班级

public class Car{
     private Motor motor;

     public void setMotor(Motor motor){
          this.motor = motor;
     }   
}
Run Code Online (Sandbox Code Playgroud)

我的豆子看起来像

<bean id="car" class="Car">
    <property name="motor" ref="${motorProvider.getAvailableMotor()}"/>
</bean>
Run Code Online (Sandbox Code Playgroud)

这个方法: motorProvider.getAvailableMotor()返回一个bean名称(字符串),我应该使用哪个电机.

但是可能存在这样的情况:没有创建这样的bean(具有这样的名称).我怎么检查呢?

java spring javabeans

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

为什么我的流程终止?

我有一个运行ping操作的Runnable对象 -

Runnable r1 = new Runnable() {
            @Override
            public void run() {
                try{
                    List<String> commands = new ArrayList<String>();
                    commands.add("ping");
                    commands.add("-c");
                    commands.add("10");
                    commands.add("google.com");

                    System.out.println("Before process");
                    ProcessBuilder builder = new ProcessBuilder(commands);
                    Process process = builder.start();

                    BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
                    String line = null;
                    while ((line=reader.readLine()) != null){
                        System.out.println(line);
                    }
                    process.waitFor();
                    System.out.println("After process");

                }catch (Exception ex){
                   ex.printStackTrace();
                }
            }
        };
Run Code Online (Sandbox Code Playgroud)

如果我在这样的当前线程中启动它:

r1.run();
Run Code Online (Sandbox Code Playgroud)

我得到这个输出:

Before process
PING google.com (173.194.32.33): 56 data bytes
64 bytes from 173.194.32.33: icmp_seq=0 ttl=53 time=34.857 ms
64 …
Run Code Online (Sandbox Code Playgroud)

java multithreading process

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

缓慢的冬眠冲洗

我尝试将我的数据保存到MySql(本地数据库)抛出HibernateTemplate -

getHibernateTemplate().execute(new HibernateCallback<Void>() {
            @Override
            public Void doInHibernate(Session session) throws HibernateException, SQLException {
                for (TimeInvocationStatistics stat : statistics) {
                    session.persist(stat);
                }
                session.persist(workloadProcessDescriptiveStatistics);
                session.flush();
                return null;
            }
        });
Run Code Online (Sandbox Code Playgroud)

数据的大小不是很大,但这个操作需要60秒.

我试图描述它 -

在此输入图像描述

(好的图片分辨率 - 图片)

我可以看到session.flush()(stacktrace中的第二行)工作缓慢,我怎么能改进它?可能是MySql服务器问题?

UPD:找到有趣的线程 - 休眠论坛,试着这样做

java mysql performance hibernate

5
推荐指数
2
解决办法
2637
查看次数