Metoda clone() mimo tego co napisali koledzy nie zawsze zadziała.
Aby mogła działać, to <ort>conajmniej </ort>elementy tablicy muszą implementować interfejs Cloneable. Jego najciekawszą cechą jest to, że jest on pusty (nie zawiera ani jednej metody). :|
Chodzi o to, że wersja metody clone() zaimplementowana przez Object jest chroniona (czyli kompletnie nieużyteczna w sensie użytkowym) i robi jedną jedyną rzecz: Wyrzuca wyjątek, który powoduje wylot programu w kosmos (sic!).
Aby tak się nie działo należy zaimplementować interfejs Cloneable oraz przeciążyć metodę clone() wraz z jednoczesnym upublicznieniem jej.
Jeżeli Vector zawiera obiekty, które nie mają publicznej metody clone(), ani żadnej innej, którą można o takie działanie podejrzewać, to w tej chwili wydaje mi się, że nie ma w Javie sposobu na skopiowanie takiej tablicy wraz z obiektami. Mogą być one przecież wszystkim - nawet kolejnymi tablicami czy całymi drzewami struktur.
Aby móc skopiować Vectora trzeba zapytać czy on i wszystkie jego elementy przechodzą test "instanceof Cloneable". Jeżeli tak, to da się tablicę skopiować. Jeżeli nie, to płacz. ;) Da się jeszcze ominąć brak Cloneable dla Vectora ponieważ jego zawsze możemy stworzyć od zera znając jedynie jego pojemość i ilość elementów (publiczne), ale dla elementów już nie.
Być może w takim ogólnym wypadku mogłaby pomóc refleksja lub przerzucenie adresu Vectora i jego elementów do C++ za pomocą JNI/JNA. Ale tutaj nie mam pewności.
I zapomniałem dopisać. Problem wcale nie jest trywialny. W Javie kopiowanie głębokie implementuje clone(), kopiowania płytkiego właściwie nie ma (chyba, że znowu clone) poza szczególnym przypadkiem Arrays.copyOf(), a nie ma jak określić długości pamięci obiektu bo nie ma czegoś takiego jak sizeof. Metody określające dokładne zużycie pamięci na obiekt są bardzo okrężne, czasochłonne i nie na każdej JVM działające na 100%.