을 중요한 I는 다음과 같이 두 개의 배열을 가지고 ..Maping 키 값 시간 복잡도가
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};
내가 키 객체를 매핑 할. 따라서 각 키에는 연관된 객체 목록이 있습니다. 나는이 방법으로 성공입니다
,
('B' "상자, Ball..etc"자세히 이하 내 문제는 "애플, 도끼, 에어로 '지도'A '... 같은 것입니다) 내가하고있는 일이지만 문제는 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;
}
}
이 HashMap의 <롱, HashMap의>와 같은 당신의 제안이다 할 수 있습니까? 하지만 키와 객체의 키를 어떻게 비교할 수 있습니까? 그것은 단지 o (n * n)의 비용 만 듭니까? 당신이 말한대로 –
가장 좋은 방법은 해시 코드를 무시하는 것입니다 – Dude