Sunday 15 April 2012

java - Maping key values from arrays of values where time complexity matters -



java - Maping key values from arrays of values where time complexity matters -

i have 2 arrays this..

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};

i want map objects keys. each key have list of objects associate it.

(more or less problem like.. map 'a' "apple, axe, aero" ; 'b' "box, ball..etc")

i successful way doing problem time complexity more o(n * n)(i taking key , comparing each objects key.).

can help me work less o(n * n) time complexity.for me time complexity matters.

using jdk 1.6.

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(){ homecoming key; } }

you can in o(n) this.

map<long, set<myobject>> keytoobjectmap = new hashmap<>(); (myobject o : objects) { set<myobject> set = kettoobjectmap.get(o.getkey()); if (set == null) keytoobjectmap.put(o.getkey(), set = new hashset<>()); set.add(o); }

in java 8 can do

map<long, set<myobject>> map = objects.stream() .collect(collectors.groupingby(myobject::getkey, collectors.toset()));

java arrays performance time

No comments:

Post a Comment