Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/343.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 提高代码的时间效率_Java - Fatal编程技术网

Java 提高代码的时间效率

Java 提高代码的时间效率,java,Java,如何编辑此代码以提高时间效率 public static LLList intersect(LLList list1, LLList list2) { LLList inters = new LLList(); for (int i = 0; i < list1.length(); i++) { Object item1 = list1.getItem(i); for (int j = 0; j < list2.length(); j

如何编辑此代码以提高时间效率

public static LLList intersect(LLList list1, LLList list2) {
    LLList inters = new LLList();

    for (int i = 0; i < list1.length(); i++) {
        Object item1 = list1.getItem(i);
        for (int j = 0; j < list2.length(); j++) {
            Object item2 = list2.getItem(j);
            if (item2.equals(item1)) {
                inters.addItem(item2, inters.length());
                break;   // move onto the next item from list1
            }
        }
    }

    return inters;
}
公共静态LLList intersect(LLList list1,LLList list2){
LLList inters=新的LLList();
对于(int i=0;i
问题解决方案:您正在使用两个
循环,并将每个列表的项与其他列表项进行比较。因此,解决方案是O(n^2)

优化解决方案:您可以使用
HashMap
,然后使用O(n)复杂度在其中插入一个列表项,而不是进行比较

然后使用循环检查
HashMap
中是否存在项,第二个循环也具有O(n)复杂性

因此,解的复杂度为O(N)+O(N)

请检查最终解决方案:

公共静态LLList intersect(LLList list1,LLList list2){
LLList inters=新的LLList();
Map list1Map=newhashmap();
for(int i=0;i
谁说可以?这是我的任务之一,但我不确定如何简化,不清楚这些是链表、数组列表还是其他类型。但是您可以查看
LinkedList
类或
ArrayList
类的
Retainal
方法来了解它是如何在那里完成的。另外,如果您知道这两个列表是按等效顺序排序的,你可以利用这个事实来加速你的算法。它是一个LinkedList类,但我不知道你说的保留是什么意思。你可以用
HashSet
而不是
HashMap
来实现这一点。另外,我认为您的
if
条件应该是
if(list1Map.get(list2.getItem(I))==1)
。当然,如果您更改为
HashSet
,那么将是
if(list1Set.contains(list2.getItem(i))
。没有理由有多余的
;我不知道你为什么一直把它加回去。
public static LLList intersect(LLList list1, LLList list2) {
    LLList inters = new LLList();

    Map<LLList, Integer> list1Map = new HashMap<>();

    for(int i = 0; i < list1.length; i++) {
       list1Map.put(list1.getItem(i), 1);
    }

    for(i = 0; i < list2.length; i++) {
       if(list1Map[list1.getItem(i)] == 1) {
          inters.addItem(list1.getItem(i)], inters.length());
       }
    }

    return inters;
}