【发布时间】:2014-12-03 16:13:26
【问题描述】:
我有两个这样的数组..
Long key1= 1l; Long key2= 2l; Long key3= 3l; Long key4= 4l;
Long key5= 2l; Long key6= 3l; Long key7= 1l; Long key8= 2l;
Long key9= 4l;
MyObject ob1= new MyObject(1l); MyObject ob2= new MyObject(3l); MyObject ob3= new MyObject(2l);
MyObject ob4= new MyObject(1l); MyObject ob5= new MyObject(4l); MyObject ob6= new MyObject(3l);
MyObject ob7= new MyObject(4l); MyObject ob8= new MyObject(2l); MyObject ob9= new MyObject(1l);
Long[] keys= new Long[]{key1,key2,key3,key4,key5,key5,key7,key8,key9};
MyObject[] objects= new MyObject[]{ob1,ob2,ob3,ob4,ob5,ob6,ob7,ob8,ob9};
我想用键映射对象。所以每个键都有与之关联的对象列表。
(或多或少我的问题是......映射“A”与“Apple,Axe,Aero”;“B”与“Box,Ball..etc”)
按我的方式我是成功的,但问题是时间复杂度超过 O(n * n)(我正在拿一个键,将它与每个对象键进行比较。)。
有人可以帮助我以小于 o(n * n) 的时间复杂度完成这项工作。对我来说,时间复杂度很重要。
使用 JDK 1.6。
My Program:
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class Bar
{
Long key1= 1l; Long key2= 2l; Long key3= 3l; Long key4= 4l;
Long key5= 2l; Long key6= 3l; Long key7= 1l; Long key8= 2l;
Long key9= 4l;
MyObject ob1= new MyObject(1l); MyObject ob2= new MyObject(3l); MyObject ob3= new MyObject(2l);
MyObject ob4= new MyObject(1l); MyObject ob5= new MyObject(4l); MyObject ob6= new MyObject(3l);
MyObject ob7= new MyObject(4l); MyObject ob8= new MyObject(2l); MyObject ob9= new MyObject(1l);
Long[] keys= new Long[]{key1,key2,key3,key4,key5,key5,key7,key8,key9};
MyObject[] objects= new MyObject[]{ob1,ob2,ob3,ob4,ob5,ob6,ob7,ob8,ob9};
public void mapper()
{
Map<Long, List<MyObject>> keyToObjectMap= new HashMap<Long,List<MyObject>>();
for(int i=0;i<keys.length;i++)
{
for(MyObject object:objects)
{
if(keyToObjectMap.containsKey(keys[i]))
{
if(keys[i].equals(object.getKey()))
{
List<MyObject> objs= keyToObjectMap.get(keys[i]);
if(!objs.contains(object))
{
objs.add(object);
}
keyToObjectMap.put(keys[i], objs);
}
}
else if(keys[i].equals(object.getKey()))
{
List<MyObject> objs= new ArrayList<MyObject>();
objs.add(object);
keyToObjectMap.put(keys[i], objs);
}
}
}
}
public static void main(String[] args)
{
Bar b= new Bar();
b.mapper();
}
}
class MyObject
{
Long key;
String desc="description";
MyObject(Long key)
{
this.key=key;
}
public Long getKey(){
return key;
}
}
【问题讨论】:
标签: java arrays performance time