2013-09-06 2 views
0

Я ищу эффективный способ сделать это. Предположим, у меня есть два массива с объектной точкой.Java Узнайте о взаимных элементах в двух массивах

Point[] a1 = {/*something that is Point*/} 
Point[] a2 = {/*something that is Point*/} 

И то, что я хочу получить взаимные вещи в двух массивах без использования java.util. *

, например

Point[] a1 = {Point1, Point2, Point3} 
Point[] a2 = {Point2, Point3} 

Я хочу, чтобы получить новый массив a3, который

a3 = {Point2, Point3} 

То, что меня смущает, я не знаю, как долго будет a3. Так что я должен перебрать как a1, a2, чтобы посчитать, сколько взаимных пунктов там, и

Point[] a3 = new Point[count] 

Затем цикл через a1, a2 снова и положить вещи в ?? Это выглядит довольно неэффективно. Есть ли более элегантные способы сделать это, так как это может появиться все время.

+2

Вы хотите сделать перекресток? (Это ключевое слово, используйте его для поиска) –

+1

yup get the intersection без использования java.util. * –

+0

Есть ли какая-то конкретная причина, почему вы не можете использовать 'java.util. *'? –

ответ

2

Поскольку массивы не являются повторно значимыми, то вы можете сделать массив, размер которого равен размеру самого маленького из двух других массивов.

Сохраните индекс для этого массива и добавьте общие элементы при прохождении через оба массива.

Когда вы закончите, создайте новый массив с размером, равным индексу, который вы достигли, и скопируйте его.

Но, честно говоря, используйте java.util.* или какую-нибудь другую библиотеку, такую ​​как Guava.

+0

OK .. это экономит один цикл –

+0

@TimothyLeung Внесите свой собственный 'связанный список' :) для динамического изменения размера. –

+0

Будет ли это помогать? –