🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

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
#152039
Author: Borneq
Date: Thu, 16 Jul 2015 09:50
10 lines
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
#152040
Author: Borneq
Date: Thu, 16 Jul 2015 10:16
9 lines
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
#152042
Author: Pit
Date: Thu, 16 Jul 2015 16:29
39 lines
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
#152041
Author: szemrany
Date: Thu, 16 Jul 2015 17:25
25 lines
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?
#152047
Author: Smyk
Date: Mon, 20 Jul 2015 13:07
6 lines
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