View Full Version : تفاوت این دو چیه؟
nargesi
سه شنبه 29 فروردین 1385, 21:23 عصر
سلام دوستان
این دو تعریف چه مزیت و معایبی نسبت به هم دارند؟
Set set = new TreeSet();
TreeSet set = new TreeSet();
persianshadow
سه شنبه 29 فروردین 1385, 22:10 عصر
سلام
من تا جای که فکر می کنم دستور اول کلا اشتباهه . مگه این که یه چیز خاص باشه .
ولی دستور دوم کاملا درست هست. آخه در دستور اول شما از روی Set داری شی می سازی
ولی سازنده کلاس همنامش نیست. که فکر می کنم این امکان پذیر نیست.
nargesi
چهارشنبه 30 فروردین 1385, 21:18 عصر
این دو تعریف هر دو درست هستند.Set یک interface است که TreeSet آنرا implement کرده کلا منظورم این است که مثلا ما در اولی یک طرف interface داریم یک طرف دیگر یک کلاس و در دومی هر دوش یک کلاسن این دو جور تعریف رو اگه می تونید مقایسه کنید مثلا من خودم فکر می کنم یه جا دیدم اینو نوشته بود که مثلا در اولی راحت می تونیم TreeSetرا مثلا با HashSet یا هر کلاسی که Set را implement کرده عوض کنیم کسی چیز دیگه ای می دونه؟؟
persianshadow
چهارشنبه 30 فروردین 1385, 22:12 عصر
!
اگه یه تکه کد درباره این موضوع داشته باشی جالب می شه. بازهم به نظر می رسه که نمی شه
حتی از یک اینترفیس اینطوری استفاده کرد.
nargesi
پنج شنبه 31 فروردین 1385, 17:04 عصر
import java.util.*;
public class Test {
public static void main(String[] args) {
Set<String> set = new TreeSet<String>();
// Set<String> set = new HashSet<String>();
// TreeSet<String> set = new TreeSet<String>();
set.add("1");
set.add("2");
set.add("3");
set.add("6");
set.add("5");
set.add("4");
System.out.print(set);
}}
pooyanm
جمعه 01 اردیبهشت 1385, 04:05 صبح
همون طور که خودتون هم گفتید در تعریف اول set یک رابط پایه است که در ادامه برنامه می توان چندین نوع دیگر به آن اختصاص داد ولی در دومی تنها می توانید TreeSet و زیر کلاس هایی از همان را قرار دهید. هر دو تعریف به میزان زیاد کاربرد دارند و تحت شرایط مختلف همه برنامه نویسان از هر دو روش استفاده می کنند. روش اول گاهی بهتر است.
pooyanm
جمعه 01 اردیبهشت 1385, 04:07 صبح
تنها ضعف در روش اول این است که در TreeSet و HashSet تعدادی متد دیگر وجود دارد که در Set وجود ندارد و دسترسی به آنها به این شکل است:
Set set= new TreeSet();
.
.
.
((TreeSet)set).anyTreeSetMethod();
set = new HashSet();
.
.
.
((HashSet)set).anyHashSetMethod();
pooyanm
جمعه 01 اردیبهشت 1385, 04:07 صبح
نمی دونم این توضیحات کافی بود یا نه؟ اگر توضیحات بیشتری هم لازمه تا بیشتر به اون بپردازیم.
nargesi
جمعه 01 اردیبهشت 1385, 06:07 صبح
ممنون
اگر چیزای دیگه ام هست لطفا کمی توضیح بدید
nargesi
جمعه 01 اردیبهشت 1385, 07:22 صبح
شما مطمینید که ((TreeSet)set).anyTreeSetMethod(); این کد درسته؟ error میده!
pooyanm
شنبه 02 اردیبهشت 1385, 15:55 عصر
منظور از anyTreeSetMethod هر متدی است که در Set وجود ندارد ولی در TreeSet اضافه شده است نه یک متد خاص.
pooyanm
شنبه 02 اردیبهشت 1385, 15:58 عصر
چیز دیگری الان برای توضیح به خاطر ندارم مگر اینکه جایی از توضیحات واضح نباشد
nargesi
شنبه 02 اردیبهشت 1385, 18:39 عصر
ممنون اینا رو فکر کنم متوجه شدم
hps
سه شنبه 12 اردیبهشت 1385, 23:36 عصر
این موضوع جالب بود!
<p dir="left">Set s = new TreeSet();</p>
این حالت انتزاعیتر و شاید از نظر برنامهنویسی قشنگتر باشه اما این یکی
<p dir="left">TreeSet s = new TreeSet();</p>
در واقع بهتر اجرا میشه. چون زحمت Casting یه TreeSet به یه Set رو به Compiler ندادید. در ضمن توصیه نمیشه که در طول برنامه یه Object رو چند با Initialize کنید، بلکه مطلوبتر اینه که اونها رو Recycle کنید.
p_frce
سه شنبه 28 شهریور 1385, 16:25 عصر
همون طور که خودتون هم گفتید در تعریف اول set یک رابط پایه است که در ادامه برنامه می توان چندین نوع دیگر به آن اختصاص داد ولی در دومی تنها می توانید TreeSet و زیر کلاس هایی از همان را قرار دهید. هر دو تعریف به میزان زیاد کاربرد دارند و تحت شرایط مختلف همه برنامه نویسان از هر دو روش استفاده می کنند. روش اول گاهی بهتر است.
چطور میتونم لیستی از این کلاسهای پایه رو با کلاس هایی که اوناروImplement میکنند تهیه
کنم؟
ممنون.
pooyanm
شنبه 01 مهر 1385, 08:34 صبح
چطور میتونم لیستی از این کلاسهای پایه رو با کلاس هایی که اوناروImplement میکنند تهیه
کنم؟
ممنون.http://download.java.net/jdk6/docs/api/
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.