equals
String类中方法的代码是
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方法等于的示例 …
我想创建一个可以在某个平面图上显示位置的应用程序.导航正以某种方式通过WiFi实现,我已经完成了,所以现在我有显示楼层平面图的问题.
它可能是某种矢量格式,在浏览互联网一段时间之后我已经确定它必须是svg文件.我找到了一些解决方案,但它对我不起作用!
有机会显示.svg文件,但只显示"简单"文件.它仅适用于教程中的文件,但不适用于任何其他.svg
文件(例如,您将使用Inkscape创建的其他文件).
所以,我决定,我将解析.svg
文件,从中创建DOM,以某种方式获取对象和属性,并通过OpenGL ES绘制它.
乍一看,非常好的解决方案,但有一个问题.Android有一些"原生"apache库,当我尝试用蜡染做某事时,它会抛出NoClassDefFoundError
,因为它不是在蜡染库中搜索,而是在"本机"库中搜索.
当然,我们可以在我们的项目中添加源代码,只接受.svg
文件的蜡染解析器并以某种方式编辑它,但是有很多工作,同样的成功我们可以编写自己的解析器.
有没有比编写自己的解析器更好的解决方案?有人遇到过这个问题吗?
为什么返回类型的方法不包含在签名中?
例如 -
public void method1(String arg){...}
public String method1(String arg){...}
Run Code Online (Sandbox Code Playgroud)
它会导致错误
我有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)
我真的不知道该怎么做,我发现了很多类似我的问题,但没有解决方案.
我有一个基于数组的对象,它实现了以下接口:
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) 例如,我们在一些实体中有几个字段正在使用注释@Pattern进行验证.该实体在项目的任何地方都使用,但只在一个地方我们需要"关闭"此验证.
有没有办法以编程方式进行,或者这是不可能的?
我有这样的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中使用这样的构造相当舒服,因为它显示了工具提示.
例如,我有一个班级
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(具有这样的名称).我怎么检查呢?
我有一个运行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) 我尝试将我的数据保存到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 ×7
javabeans ×2
android ×1
concurrency ×1
ear ×1
ejb ×1
glassfish ×1
hashcode ×1
hibernate ×1
jsr ×1
mysql ×1
performance ×1
process ×1
scalability ×1
spring ×1
string ×1
svg ×1
validation ×1
xml ×1
xsd ×1