小编lba*_*scs的帖子

关于集合的Java可修改视图

我想解决以下问题:
从集合A开始,我想将该集合(比如集合B)上的某种"视图"传递给某个方法.视图B不必包含原始集合A的所有元素.如果在此方法中将对象添加到视图(集合B)或从视图中删除,则这些更改也应反映在原始集合A上.

例如(伪代码):

  1. 开始情况:

    Collection A = {1, 2, 3};  
    View-on-collection B = {1, 2};
    
    Run Code Online (Sandbox Code Playgroud)
  2. 方法调用:

    someMethod(B) {  
        B.add(4);  
        B.remove(2);  
    }
    
    Run Code Online (Sandbox Code Playgroud)
  3. 结束情况:

    Collection A = {1, 3, 4};
    
    Run Code Online (Sandbox Code Playgroud)

有谁知道这个问题的巧妙解决方案?

java collections data-structures

7
推荐指数
2
解决办法
711
查看次数

重叠间隔的Oracle时间线报告

我使用的是Oracle 10g,我有一个重叠间隔的表.以简化形式:

create TABLE INTERVAL_TEST (
    STARTDATE DATE NOT NULL,
    ENDDATE DATE,
    ITEM VARCHAR2(100) NOT NULL
)

insert into INTERVAL_TEST (STARTDATE, ENDDATE, ITEM) values (to_date('2012-01-01', 'YYYY-MM-DD'), null, 'AAA');
insert into INTERVAL_TEST (STARTDATE, ENDDATE, ITEM) values (to_date('2012-02-01', 'YYYY-MM-DD'), to_date('2012-03-01', 'YYYY-MM-DD'), 'BBB');
Run Code Online (Sandbox Code Playgroud)

如您所见,有重叠的条目.第一个中的null意味着它"永远"有效.我需要生成一个报告,在时间轴上显示历史记录,列出每行的有效项目数.输出中应该没有时间重叠,而是应该为没有变化的每个子区间列出所有有效项:

START       END          VALID_ITEMS
----------  ----------   --------------
2012-01-01  2012-02-01   AAA
2012-02-01  2012-03-01   AAA, BBB
2012-03-01  NULL         AAA
Run Code Online (Sandbox Code Playgroud)

是否有生成此类结果的SQL语句?

sql oracle intervals

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

如何在一个r/w线程和一个只读线程之间同步Map?

我有一个Collections.synchronizedMap()由线程A读取和更新的同步Map(via ).线程B仅通过Map.keySet()(只读)访问Map .

我应该如何同步?该文件说,键集()(对于Collections.synchronizedMap)"不需要在synchronized块".我可以在同步块中放置线程A的读/写访问权限,但这是否必要?

我想即使使用同步Map或同步块,如果Map.keySet不需要同步(根据上面的文档链接),我似乎很奇怪...

更新:我错过了必须同步keySet的迭代,即使检索keySet不需要同步.拥有keySet而不能查看它并不是特别令人兴奋,因此最终结果=需要同步.改为使用ConcurrentHashMap.

java multithreading map synchronized data-structures

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

使用rownum的Oracle视图性能

我使用的是Oracle 10g,我有一个加入两个大表(数百万条记录)的视图.我试图为用户选择有限的"样本"数据,如下所示:

select * from VIEW_NAME where ROWNUM < 5; 
Run Code Online (Sandbox Code Playgroud)

它非常慢,我认为它不应该是,因为我只需要几行结果,所以Oracle不应该计算完整的连接.

要求是用户应该能够以交互方式指定返回的行数(与结果中的哪些行无关紧要).有没有办法实现这个目标?(使用rownum或其他方法)

(我可以更改视图定义或最终SQL的构建方式,但据我所知,我不能动态地传递有关行的所需数量的视图的信息)

编辑:视图定义非常简单,如下所示:

CREATE OR REPLACE VIEW VIEW_NAME AS
(
    select
    e.id as ID,
    e.somefield as something,
    ... (some similar selects from e)
    c.field as anotherthing,
   ... (lots of other fields from c)
    from SCHEMA.TABLE1 e
    inner join SCHEMA.TABLE2 c on e.key = c.key
)
Run Code Online (Sandbox Code Playgroud)

解释计划提到两个表的完整表访问并不奇怪,因为只返回前几行不应该花费很长时间.

EDIT2:这是完整的计划

SQL> select * from table(dbms_xplan.display);

PLAN_TABLE_OUTPUT
------------------------------------------------------------------------------------------------------------------------------------------------------
Plan hash value: 2644394598

----------------------------------------------------------------------------------------------------------------------------------------------
| Id  | Operation                 | Name        | Rows  | Bytes …
Run Code Online (Sandbox Code Playgroud)

database oracle performance view rownum

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

Java7中的集合中间操作库

我喜欢的意思intermediate operationsJava8,当a terminal operation到达时,所有操作都会应用一次.

我在问是否有我可以使用的库Java 7允许我实现这样的行为.

注意:
commons-collections4用于收集操作,比如forAllDo,所以有可能在这种情况下使用它吗?(中间与终端运营)

collections guava java-7 java-8 apache-commons-collection

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

Arrays.sort和Arrays.parallelSort函数行为

我有以下代码,

import java.util.Arrays;


public class ParellelStream {

    public static void main(String args[]){
        Double dbl[] = new Double[1000000];
        for(int i=0; i<dbl.length;i++){
            dbl[i]=Math.random();
        }

        long start = System.currentTimeMillis();
        Arrays.parallelSort(dbl);
        System.out.println("time taken :"+((System.currentTimeMillis())-start));

    }

}
Run Code Online (Sandbox Code Playgroud)

当我运行此代码时需要大约700到800毫秒的时间,但是当我将行Arrays.parallelSort替换为Arrays.sort时,它需要500到600毫秒.我读到了Arrays.parallelSort和Arrays.sort方法,该方法说Arrays.parellelSort在数据集较小时性能较差但在这里我使用的是1000000个元素的数组.什么可能是parallelSort性能不佳的原因?? 我正在使用java8.

java java-8

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

Java Graphics2D 擦除到 alpha 背景

我正在制作一个具有绘图板的应用程序,您可以在其中使用鼠标进行绘制,它会绘制在 BUfferedImage 中的标签之上。我现在正在尝试实现的是橡皮擦,问题是我找不到任何帮助将橡皮擦制作为 clearRect() 到 alpha 背景。(我无法定义颜色背景,因为用户可以将背景更改为他想要的任何图像)。总结:

  • 如何用 alpha 像素擦除/覆盖 Graphics2D 像素?我发现的方法是使用 clearRect 但您需要指定背景颜色。

以下是我的 DrawBoard 类,其中包含要绘制的所有内容。

public class DrawBoard extends JPanel implements MouseListener, MouseMotionListener{


public JLabel status;
private JLabel imgLabel; // this is where the drawing happens
public Point pstart, pfinish;
private List<Point> points = new ArrayList<Point>();
private List<BufferedImage> lines = new ArrayList<BufferedImage>();

private static final int BI_WIDTH = 1024;
private static final int BI_HEIGHT = 800;
private static int STROKESIZE = 7;

private BufferedImage bImage = new BufferedImage(BI_WIDTH, …
Run Code Online (Sandbox Code Playgroud)

java user-interface java-2d erase graphics2d

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

以更好的方式重新分配ArrayList

下面的代码是有效的,但它看起来很奇怪,有没有更好的方法.

var res:scala.collection.mutable.LinkedHashMap[String,scala.collection.immutable.Map[String,String]]=??
var arList = new ArrayList[String]()
res.keySet.map(arList.add(_))
//here res key set changed so i want to reassign the list by new keySet
res=??                                                        //updated
arList.clear
res.keySet.map(arList.add(_))
Run Code Online (Sandbox Code Playgroud)

它看起来很奇怪,打电话给.cleararList

collections scala scala-collections scalastyle

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

快速迭代集合并删除符合特定条件的项目

所以我有一个包含Set中的一堆记录的程序.该集可能有几个项目或可能有数十万个.每条记录的一位数据是时间戳.我需要消除一组中的所有项目,但是相互之间的时间间隔为15秒.最有效的方法是什么?

目前我创建了该集的副本.然后我遍历集合,将第一个项目与其他项目进行比较,然后重复.如果发现匹配在15秒内,我将从重复集中删除它.然后将副本集写出到文件中.

显然这有效,但我终于意识到这是非常低效的.对于大型套装,这似乎需要花费很长时间,假设它不是出现其他问题.有人能为我提供更智能,更快捷,更有效(或恰当)的方式来实现这一点吗?我意识到,因为记录包含时间戳,排序它们可能会有很大帮助.我想保留这一切都包含在程序中,所以我想我需要研究排序和比较器.

我无法完全解决这个问题.我想出了一些改进我的代码的其他想法,但我不禁感到我仍然完全错了.谢谢你的任何建议.

哦,这是为了工作,而不是学校或任何其他任何帮助表示赞赏.

java collections performance data-structures

0
推荐指数
1
解决办法
1158
查看次数

Java模式匹配要匹配的特定模式

我尝试匹配给定字符串中的模式,这将是静态的,以下是我的程序:

package com.test.poc;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class RegexTestPatternMatcher {
  public static final String EXAMPLE_TEST = "http://localhost:8080/api/upload/form/{uploadType}/{uploadName}";

  public static void main(String[] args) {
    Pattern pattern = Pattern.compile("{\\w+}");
    // In case you would like to ignore case sensitivity you could use this
    // statement
    // Pattern pattern = Pattern.compile("\\s+", Pattern.CASE_INSENSITIVE);
    Matcher matcher = pattern.matcher(EXAMPLE_TEST);
    // Check all occurance
    while (matcher.find()) {
      System.out.print("Start index: " + matcher.start());
      System.out.print(" End index: " + matcher.end() + " ");
      System.out.println(matcher.group());
    }
    // Now create …
Run Code Online (Sandbox Code Playgroud)

java regex split

0
推荐指数
1
解决办法
988
查看次数