Solved

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

Posted on 2010-08-16
15
554 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
  • 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:gurvinder372
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
Active Directory Webinar

We all know we need to protect and secure our privileges, but where to start? Join Experts Exchange and ManageEngine on Tuesday, April 11, 2017 10:00 AM PDT to learn how to track and secure privileged users in Active Directory.

 
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:gurvinder372
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 250 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:gurvinder372
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

Free Tool: Subnet Calculator

The subnet calculator helps you design networks by taking an IP address and network mask and returning information such as network, broadcast address, and host range.

One of a set of tools we're offering as a way of saying thank you for being a part of the community.

Question has a verified solution.

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

Suggested Solutions

Title # Comments Views Activity
table example 4 32
tomcat startup error 5 106
jmss example java 2 23
Java syntax, or is it Selenium 6 30
The greatest common divisor (gcd) of two positive integers is their largest common divisor. Let's consider two numbers 12 and 20. The divisors of 12 are 1, 2, 3, 4, 6, 12 The divisors of 20 are 1, 2, 4, 5, 10 20 The highest number among the c…
Basic understanding on "OO- Object Orientation" is needed for designing a logical solution to solve a problem. Basic OOAD is a prerequisite for a coder to ensure that they follow the basic design of OO. This would help developers to understand the b…
Viewers learn about the “for” loop and how it works in Java. By comparing it to the while loop learned before, viewers can make the transition easily. You will learn about the formatting of the for loop as we write a program that prints even numbers…
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…

830 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