当前位置: 代码迷 >> Java相关 >> [讨论]contains()的效率问题
  详细解决方案

[讨论]contains()的效率问题

热度:695   发布时间:2007-02-01 09:39:08.0
[讨论]contains()的效率问题
GeneralPath类里面的contains()方法是不是效率很低?我感觉用了contains()方法以后程序执行起来明显慢了很多。
搜索更多相关的解决方案: contains  效率  GeneralPath  

----------------解决方案--------------------------------------------------------
你可以直接用Shape的contains方法啊
----------------解决方案--------------------------------------------------------
我是要判断一个点是否位于一个做了旋转操作以后的矩形里面,我是这样做的:先把矩形转换成GeneralPath,然后对GeneralPath进行旋转操作,再调用GeneralPath里面的contains()方法来判断。在这种情况下如何调用Shape里面的contains()方法?Shape里面的contains()方法要比GeneralPath里面的contains()方法快吗?
----------------解决方案--------------------------------------------------------
呵呵,一般来说不会有什么效率问题的,是不是你别的方法效率不高?
一般JAVA的类库都是经过了优化的,不可能效率低下的

----------------解决方案--------------------------------------------------------
public boolean contains(int x, int y){
//(x,y) is in the outer panel's coordinates system
Rectangle2D.Double rectIPS = new Rectangle2D.Double(
topLeftX,topLeftY,imageWidth,imageHeight);
GeneralPath rectPath = new GeneralPath(rectIPS);
rectPath.transform(AffineTransform.getRotateInstance(
angle, (getCenter().x + topLeftX), (getCenter().y + topLeftY)));


return rectPath.contains(x, y);
}
是这样的,如果我把红色部分注释掉,直接调用rectIPS.contain(),速度很快,但是加上红色部分以后速度就变慢了,几乎慢了有2秒钟,我想应该就是GeneralPath里面的contains()方法比较慢吧。但是矩形旋转以后还是矩形,慢也不会慢这么多啊
----------------解决方案--------------------------------------------------------
那应该是在旋转的时候要计算比较多的地方

----------------解决方案--------------------------------------------------------
嗯,那也有可能
----------------解决方案--------------------------------------------------------
  相关解决方案