Still celebrating National IT Professionals Day with 3 months of free Premium Membership. Use Code ITDAY17

x
?
Solved

Best way to combine two Java arrays and create a new one with unique objects

Posted on 2010-08-16
15
Medium Priority
?
558 Views
Last Modified: 2012-08-14
Hi,

I have two arrays of a user-define object type say outlinks.

Outlink[] a, b;
a = some function to initiate a;
b = some function to initiate b;

I would like to combine a and b and get a new array (say c) that has all unique Outlink objects of the two original arrays. Note please that there is an equal function define in the Outlink object already.

Thanks.
0
Comment
Question by:ddzz2010
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 5
  • 3
  • 3
  • +2
15 Comments
 
LVL 92

Expert Comment

by:objects
ID: 33451969
0
 

Author Comment

by:ddzz2010
ID: 33451994
object:

I saw the link but it is not very helpful. One thing I forgot to mention is that all elements in array A should stay in front of any new elements in array B. Sorry for missing that part.
0
 
LVL 40

Expert Comment

by:Gurvinder Pal Singh
ID: 33452000
you can also use Set for the same

Outlink[] a, b;

Set set = new HashSet( Arrays.asList(a) );
set.addAll( Arrays.asList(b) );

Set automatically removes the duplicates
0
Will your db performance match your db growth?

In Percona’s white paper “Performance at Scale: Keeping Your Database on Its Toes,” we take a high-level approach to what you need to think about when planning for database scalability.

 
LVL 58

Expert Comment

by:cyberkiwi
ID: 33452005
Outlink[] a, b;
//// a, b
Outlink[] c = new Outlink[a.length+b.length];
System.arraycopy(a, 0, c, 0, a.length);
System.arraycopy(b, 0, c, a.length, b.length);
Arrays.sort(c);
Outlink[] d = new Outlink[c.length];
int j=0;
for(int i=0;i<c.length;i++) {
if((i==0) || (!c[i].Equals(c[i-1]))) {
d[j++] = c[i];
}
}
Outlink[] e = new Outlink[j];
System.arraycopy(d, 0, e, 0, j);

// e is the result
0
 
LVL 92

Expert Comment

by:objects
ID: 33452028
> One thing I forgot to mention is that all elements in array A should stay in front of any new elements in array B. Sorry for missing that part.

the method i posted above does that
0
 
LVL 40

Expert Comment

by:Gurvinder Pal Singh
ID: 33452114
to continue my answer

then you can convert set to array using

Outlink[] array = (Outlink[])set.toArray(new Outlink[set.size()]);

please check it should retain the order
0
 
LVL 86

Accepted Solution

by:
CEHJ earned 1000 total points
ID: 33452118
Try the following
	Set<Outlink> combined = new LinkedHashSet<Outlink>(Arrays.asList(a));
	for(Outlink add : b) {
	    if(!combined.contains(add)) {
		combined.add(add);
	    }
	}
	Outlink[] combinedArray = (Outlink[])new ArrayList<Outlink>(combined).toArray(new Outlink[combined.size()]);

Open in new window

0
 

Author Comment

by:ddzz2010
ID: 33454319
Hi, quite a few solutions mentioned above use such a function, Arrays.asList() on the Outlink array. However, when I tested the function, the Eclipse compiler shows error that Arrays.asList() can only be used to ArrayList<String> instead of ArrayList<Outlink>.

Am I missing something? Thanks.
0
 
LVL 86

Expert Comment

by:CEHJ
ID: 33454360
How did you use the code i posted?
0
 

Author Comment

by:ddzz2010
ID: 33455064
CEHJ, what do you think about your solution compared with cyberkiwi's?

Thanks.
0
 

Author Closing Comment

by:ddzz2010
ID: 33455192
Work like a charm. Thank you!
0
 
LVL 40

Expert Comment

by:Gurvinder Pal Singh
ID: 33455568
@ddzz2010: why did you ignored my solution? doesn't it look similar to what i have posted?
0
 

Author Comment

by:ddzz2010
ID: 33456396
gurvinder372:

I didn't ignore. I tried your solution and I had the reported compile error as I mentioned. But when I tried CEH J's solution, I got no error and everything was smooth. I credited him with his solution.

Thanks.
0
 
LVL 86

Expert Comment

by:CEHJ
ID: 33457516
>>doesn't it look similar to what i have posted?

Unfortunately your approach won't guarantee the correct ordering

>>CEHJ, what do you think about your solution compared with cyberkiwi's?

Well i haven't got the time to read all that code of cyberwiki's ;)
0
 
LVL 92

Expert Comment

by:objects
ID: 33459985
> But when I tried CEH J's solution

which copied from gurvinder372's solution to iuse a Set.  You should have split the points
Though it would be preferred if CEHJ didn't copy other experts suggestions.
0

Featured Post

Will your db performance match your db growth?

In Percona’s white paper “Performance at Scale: Keeping Your Database on Its Toes,” we take a high-level approach to what you need to think about when planning for database scalability.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Article by: Nadia
Suppose you use Uber application as a rider and you request a ride to go from one place to another. Your driver just arrived at the parking lot of your place. The only thing you know about the ride is the license plate number. How do you find your U…
When there is a disconnect between the intentions of their creator and the recipient, when algorithms go awry, they can have disastrous consequences.
Viewers learn about the scanner class in this video and are introduced to receiving user input for their programs. Additionally, objects, conditional statements, and loops are used to help reinforce the concepts. Introduce Scanner class: Importing…
I've attached the XLSM Excel spreadsheet I used in the video and also text files containing the macros used below. https://filedb.experts-exchange.com/incoming/2017/03_w12/1151775/Permutations.txt https://filedb.experts-exchange.com/incoming/201…
Suggested Courses

722 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question