Thread View: pl.comp.lang.java
5 messages
5 total messages
Started by Borneq
Thu, 16 Jul 2015 09:50
Tablica int a tablica Integerów
Author: Borneq
Date: Thu, 16 Jul 2015 09:50
Date: Thu, 16 Jul 2015 09:50
10 lines
501 bytes
501 bytes
Czy jest jakiś narzut gdy mam tablicę miliona intów a dla odmiany tablicę miliona Integerów? Chciałem posortować piksele, każdy RGB reprezentowany przez int. Tablica int nie chce sortować się z Comparatorem, a Integerów chce Czy jeśli Integer to obiekt, nie oznacza to że mam tablicę miliona wskaźników, gdzie dla każdego przydzielono miejsce i wskazuje dopiero na liczbę? Czy też Integer to coś innego niż gdybym sam zrobił sobie public class Integer { public int value; } ?
Re: Tablica int a tablica Integerów
Author: Borneq
Date: Thu, 16 Jul 2015 10:16
Date: Thu, 16 Jul 2015 10:16
9 lines
493 bytes
493 bytes
W dniu 2015-07-16 o 09:50, Borneq pisze: > Czy jest jakiś narzut gdy mam tablicę miliona intów a dla odmiany > tablicę miliona Integerów? Sprawdziłem przy przydzielaniu tablicy intów i Integerów ile wynosi czas - nie ma różnić. Przy czym, co ciekawe, czas przydzielania zależy od rozmiaru tablicy; Małe obiekty przydzielany są błyskawicznie, znacznie szybciej niż w takim C++, za to duże długo, między innymi musi czyścić pamięć, ale chyba nie tylko z tego powodu.
Re: Tablica int a tablica Integerów
Author: Pit
Date: Thu, 16 Jul 2015 16:29
Date: Thu, 16 Jul 2015 16:29
39 lines
1686 bytes
1686 bytes
Dnia 16.07.2015 szemrany <szemrany@offline.off> napisał/a: > Otóż ktoś kiedyś mi opowiadał o tych typach prostych będących de facto > obiektami i jest to tak, że jeśli Integer ma wartość innego integera > istniejącego już w runtimie to oba są referencjami na ten sam obiekt. Nie do końca tak jest. Dla przykładu dla typu Integer: tam gdzie kompilator spodziewa się int lub Integer , to niejawnie jest wywoływana metoda intValue() która zwraca KOPIĘ wartości Integera (jako typ prosty) a nie referencję do "oryginału", przez co kod postaci: public class Klasa { public static void increment (Integer x) { ++x; } public static void main(String a[]) { Integer obiekt = new Integer(1); increment(obiekt); System.out.println(obiekt); } } zwróci wynik '1' (taki sam jakby w deklaracji było increnemt(int x)). Tak się zachowują wszystkie wbudowane typu pochodne od Number, mają metody intValue(), longValue(), doubleValue() itd. (wywoływane w zależności od kontekstu na jakich wartościach jest wykonywana operacja), które zwracają kopię wartości a nie referencję. Podobnie zresztą zachowa się kod: public class Klasa { public static void main(String arg[]) { Integer a = new Integer(1); Integer b = a; a++; System.out.print(a+" "); System.out.println(b); } } który zwróci wynik '2 1'. Momo że a i b są obiektami, to b=a przypisze do b KOPIĘ wartości a (zwróconą przez metodę a.intValue()). Po prostu kompilator wszędzie niejawnie wywołuje metody typu intValue(), floatValue(), toString() itp. W ten sposób zapewnione jest, że obiekty Integer, Double itd. zachowują się w praktyce tak samo jak typy proste.
Re: Tablica int a tablica Integerów
Author: szemrany
Date: Thu, 16 Jul 2015 17:25
Date: Thu, 16 Jul 2015 17:25
25 lines
1288 bytes
1288 bytes
On Thu, 16 Jul 2015 10:16:09 +0200, Borneq wrote: > W dniu 2015-07-16 o 09:50, Borneq pisze: >> Czy jest jakiś narzut gdy mam tablicę miliona intów a dla odmiany >> tablicę miliona Integerów? > > Sprawdziłem przy przydzielaniu tablicy intów i Integerów ile wynosi czas > - nie ma różnić. Przy czym, co ciekawe, czas przydzielania zależy od > rozmiaru tablicy; Małe obiekty przydzielany są błyskawicznie, znacznie > szybciej niż w takim C++, za to duże długo, między innymi musi czyścić > pamięć, ale chyba nie tylko z tego powodu. Nie programuje w Javie, więc nie wiem czy to co napiszę to prawdziwa prawda czy połowiczna, ale z racji milczenia innych osób... ;-) Otóż ktoś kiedyś mi opowiadał o tych typach prostych będących de facto obiektami i jest to tak, że jeśli Integer ma wartość innego integera istniejącego już w runtimie to oba są referencjami na ten sam obiekt. Niemniej wszystkie są obiektami i przy dużych tablicach zapewne jest jakiś narzut na zasoby do ich obsługi, choćby z racji ich referencyjności a nie natywności. Niemniej czy jest sens się tym przejmować? Nie sądzę. -- howgh szemrany "Trzeba z żywymi naprzód iść, po życie sięgać nowe, a nie w uwiędłych laurów liść z uporem stroić głowę"
Re: Tablica int a tablica =?ISO-8859-2?Q?Integerów?
Author: Smyk
Date: Mon, 20 Jul 2015 13:07
Date: Mon, 20 Jul 2015 13:07
6 lines
173 bytes
173 bytes
Borneq wrote at Do 16.07.2015 09:50: > Tablica int nie chce sortowaæ siê z Comparatorem, a Integerów chce Je¶li to zwyk³a tablica int[]: java.util.Arrays#sort(int[]) Smyk
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads