بسم الله والحمد لله والصلاة والسلام علي رسول الله
اليوم ان شاء الله يا بنات هنتكلم على ال Java
collections موضوع مهم و من المواضيع اللي رفعت ال
Java لفوق و خصوصا لما نسينا ان نتكلم عن ال generic
program الآن ال Java collection بتكلم على واحدة من
ال data structures من تركيب البيانات و المفروض ان
انت اما خلصت data structure او تردسيها حالياإيش
فكرتها إن هذا ال object اللي هو ال collection بدي
شير لمين؟ reference ل object آخر وهذا الكلام
بيعطينا مفهوم مهم جدا إن ال contents تبع ال
collection عبارة عن reference data type not
primitive data type تمام؟ وبالتالي إيش نوع ال
object اللي أنا ممكن أشيرله؟أي object أبسطها الـ
string اللي بنعرفه لك ممكن يكون ال collection عنده
collection of employees collection of cars
collection of students حسب ال data type اللي
موجودة وبالتالي ال object هذا ممكن يكون من أي type
is a relationship يعني أنا فيه عندي employeeوفي
عندي part-time employee وفي عندي full-time
employee، مظبوط؟ إيش العلاقة بينهم؟ ال part-time
employee is a employee و ال full-time is an
employee يعني لو عملت collection .. collection من
ال employee بقدر يشير .. يشير لمين؟ يشير على full
-time و يقدر يشير على ال part-time لأن عبارة عن
العلاقة بينهم isdata structure إيش يعني generate
data structure؟ إنها مش مرتبطة بنوع معين من
البيانات مش مرتبطة بنوع معين من البيانات وبالتالي
بقدر ال list هذه تحتوي أي نوع من ال objects اللي
ممكن يخطر على بالك طيب السؤال اللي بيطرح نفسه لو
أنا بدي array أو بدي collection of integers شو بدي
أسوي؟
الآن أنا بدي على سبيل المثال بدي listوال data
تابعتها integer هذا
الكلام مستحيل يصير ليش؟ لأن هذا primitive data بس
مرت علينا في البداية ال rubber class اللي
هو integer وبالتالي ممكن انا اعمل collection of
integers لكن باعتمادي على ال rubber class تبع ال
integerمش على الـ Primitive Data اللي موجودة عندنا
تمام من
ال collections اللي موجودة عندى مجموعة ال
interfaces collection set list map و queue وانت
المفروض في ال data structure مرّت عليك شو يعني
queueواستخدمتيها بالـ Java وعملتي الـ
implementation بالـ Java و stack و link list إلى
آخرهم من العناصر الموجودة أنا هركز اليوم على أو في
محاضرة نهادة مع ال collections على التلات عناصر
الموجودة اللي هي ال set و ال list و ال map و هشوف
كيف ممكن أستفيد من ال route interface اللي موجود
عندي اللي هي ال collection و ال class او ال
general class اللي انبنى او ال super class اللي تم
بناءه على ال interface اللي موجود عندهاcollection
interface و collections class طبعا عادة انا مش هدق
معاكي على ال spelling كتير خصوصا عندما تكتب ..
خليك تكتب code بس بدك تنتبه من البداية ان انا في
عند collection بتمثل interface و في عند
collections بتمثل class وبالتالي ال calling لهذه
غير، يعني أنا الآن ممكن أstudy ال collections و
أstudy كل ال static method اللي في داخلها لكن
ماقدرش أستفيد من ال collection اللي جاريه من خلال
ال implementation طيب ال interface collection لأن
هو الأساس عامل implementation لمجموعة من ال method
اللي لها علاقة بعض بالاشبالإضافة والمسح والمقارنة
ما بين عناصر ال collection اللي موجودة يعني أنا
بتكلم على group of objects اول
حاجة ال collection can be converted to array
والعكس صحيح مرت عليك شغل اسمها arrays class dot في
عندنا شغل اسمها as listأو method اسمها as list
بتاخد مني array و بترجعلي الاش؟ بترجعلي list
بترجعلي list هنشوفها خلال ال code اللي موجود لكن
أهميتها أنه فعليا أنا بقدر أحول ال collection ل
array و العكس صحيح و بحور ال array ل collection
كذلك
الـ Interface Collection بيزودني بـ Iterator
بيزودني بـ Iterator إيش الـ Iterator؟ قولنا هو
عبارة عن application أو counter بيمكنني أني أمر
على عناصر الـ list أو ال collection اللي موجود
وشوفنا وين؟ مع ال scanner لمش قولنا كنا قوله while
ال scanner object dot hasnext أو has next line
الآن
هذا بنسميه iterator ايش ال iterator؟ هو عبارة عن
object بمور على كل عناصر ال collection على كل
عناصر ال collection ودر بالك هذه من أهم الميزات
اللي بتفرج بين ال scanner و ال buffered reader
وبالتالي وجود الـ iterator عشان انا أستفيد منه
ماهو الـ iterator؟ هو عبارة عن object بيخلّي
البرنامج يمر عبر عناصر الـ collection كلها element
إلى element وبقدر من خلاله أعمل remove لل element
يعني انت تخيلي ان في عندي list عليها مجموعة من
الألوان R أو Red أو Green
Blue هاي ال RGB وهاي في عندي مثلا ال white في
الآخر ال
iterator object عادة يشير لأول element في ال list
اللي موجودة عندي هنا في method الأصل تقول ليه في
data ولا مفيش يعني ال iterator الأصل يكون فيه dot
has next زي ما شوفنا مع ال scanner هذه Boolean
functionالان لما انا بقوله الـ iterator.next
مباشرة بيرجعلي ب object من نفس ال data type اللي
انبنت علي يمين ال collection hand string هيرجع
bred و مباشرة ال iterator هيتحرك للأمام خطوة عشان
هيك بنقول احنا ال walks through the collections
element بمشي من خلال ال element بظل يمشي لما متى
يصلالنغل اللي في الآخر مافيش element معناته هتكون
ال method has next ال iterator dot has next بترجع
ب false طيب ال current position اللي أنا بقشر عليه
بإمكاني زي ما بقرأه بال next ممكن أروح أقوله ال
iterator dotremove عشان يحذف ال element هذا من ال
collection عشان هيك بقول انه بقدر يمر على عناصر ال
collection and remove elements from the collection
during the iteration طيب تماممعناته أنا الآن صرت
بتكلم على ال data وصار بإمكاني أحصل على iterator
أمر عليها وبالطريقة التقليدية اللي إحنا بنعرفها في
عند list عدد العناصر اللي فيها خمسة بقدر أعمل for
loop و أمر عليهم، أه تقدر غالبا تشتغل من خلال ال
index اللي موجود ال collections class بزودني
بمجموعة من ال aesthetic methods إيش يعني aesthetic
methods؟
بقدر أستدعيها بدون مانشي object من ال class اللي
موجود عندي هذا يعني بصير أقوله أنا collections هذا
اسم ال class dot sort collection dot search حسب
إيش ال method اللي موجودة طبعا ما تاخديش اسم ال
search و ال sort بال spelling صحيح 100% قدر ما أن
عمالي بعبر على إيش ال methods اللي موجودة هذه من
أجل البحث وترتيب
والشغل اللي ممكن يلزمني على الـ collections start
ال sort هي موجودة لكن ال search بالمسمى نفسه شوية
هنشوفه تمام ال collections as a framework جمعت
مجموعة من ال element مع بعضهم واحنا فعليا هنشوفهم
في عند ال collection interface اللي حكينا عنه هيه
بنبني عليه interface آخر listو Interface Q ده مش
هنطرقله و Interface اسمه set و من ال interface
list في عندي array list وفي عندي stack المفروض
شوفتيها في ال data structure في عندك list شوفتيها
في ال data structure و priority queue شوفتيها في
ال data structure وبالتالي أنا مع ال list
interface فقط هعتمد على two classes اللي هي ال
array list فقط
الان في الـ hash أو في ال set في ال interface set
في عندي hash set و في عندي tree set طيب، هل في فرق
بين ال set و ال list؟ الأصل يكون فيه فرق مرت عليك
في ال data structure set؟ عفوا، في ال discrete
mathematics، اللي قضيت مفاصلة المجموعات ال sets
أهم تعريف فيها إيش كان؟ unordered groupof unique
elements عنصر واحد تمنع التكرار تمام؟ وبالتالي
فيها different implementation سواء باعتمادنا على
ال hash set أو ال tree set سنشوفهم بالاضافة لدي
واحد من ال collections اسمه map وانا بتكلم على
ordered pairs او ازواج بتكلم على keyو value بتكلم
على key و value هنتكلم في حينها على ال maps يعني
أنا فعليا هتكلم على three objects من ال
collections هتكلم على ال list أو ال array list
هتكلم على ال set و هتكلم على ال map هتكلم على ال
map الآن
لما أنا بتكلم أو نبدأ بال listال list هي عبارة عن
ordered collection ordered collection وبديش تفهمي
أو بديك تميزي بين sorted و ordered ايش يعني
sorted؟ مرتبة ordered مرتبة
أيوة، بس الآن أنا ببتكلم ordered يعني قاعد ببتكلم
على الترتيب، ترتيب العراصر حسب أو .. أو ليه وليت
قدومها أو حسب قدومها أو وجودها في ال list باشي
بقول العنصر الأول في ال list، الآن كمان مرة، نرجع
للألوان R أو Red، Green، Blue، اللي هي ال RGB
colorsالان لو انا هدول العناصر موجودين في list
بقول عنهم ordered العنصر الأول مين؟ Red، التاني
Green، التالت بلو و هكذا الأول، التاني، التالت،
هذه المفهوم في ordering عشان نعمل ترتيب أو ندّر
label لكن لما باجي بتكلم على sorted بدي ارتبهم
تبعا ل criteria معينةبدي أرتبهم على كريتيريا معينة
حسب .. هنا ممكن أقول الـ alphabetical character
بتيجي blue في الأول بعدين green بعدين red لأنه
بناء على الحرف لكن ممكن برضه أتكلم أنا بناء على ال
size ال string size أعملهم ordering تبع ال size
تيجي red تيجي blue بعدين تيجي وراها green في ال
sorted لازم يكون في sorting criteriaفي الـ ordered
كل element بيجي بياخد ال position وبياخد الترتيب
اللي هو إجا فيه بالإضافة
لـ inherited from ال collection ال list هتزود
مجموعة من العناصر اللي ممكن تعمل manipulate لل
elements من خلال ال indexأنا عندي list فيها خمس
عناصر بقدر أتعامل مع ال list من خلال ال index أه
بقدر لأن هي ordered لأن هي ordered يعني في عندي
position واحد اتنين تلاتة يعني في عندي index و
بقدر أستفيد منه search for element يعني بقدر أدور
لأن طالما في عندي index بقدر أعمل loopو بقدر امر
على العناصر اللي موجودة عندها بالاضافة بقدر احصل
على list iterator عشان امر على عناصر ال list اللي
موجودة عندها ال interface اللي اسمه list انه عمله
implementation من different classes الray list
link list و ال vector كلهم list كلهم عبارة عن list
الـ link list الأصل إنه كل object بيحتوي على ال
data اللي هي ال value ومؤشر أو pointer to next
object، مصبوط؟ يعني هيك بجنه نسميه كل object هو
عبارة عن node ال node بتحتوي على مشاقين data و
next node، مصبوط؟ و next node pointer، تمامالان
بقى عندى ال array list و ال vector ال array list و
ال vector هذه بتحتوي data و هذه بتحتوي data هذه
بتحتوي على pointers انا مابديش اياهم الان طيب الان
عشان اسأل او ايش الفرق اللى بين ال vector و ال
array list الفرق بكل بساطة ان ال data او ال vector
عادةً Synchronized ايش Synchronized؟ متزامن ومفهوم
التزامن في ال threading لحظة احنا روحنا علوان على
شغل اسمها multi threads او multi threading انه انا
اخلي ال application تبعي بدل ما كان بيشتغل ب one
flow في مرحلة من المراحل اروح اعمله اعمله split
يشتغل و بعد ذلك ممكن انا اجمع ال data في point
واحدة او اكمل هذه مرحلة ال split بنسميها ايش او كل
split بنسميها thread الفكرة فيها ان احصل على اداء
افضل لل application تبعي عبر اعطاء او خلال ال
application تبعي يدّي مهام اكتر لل CPU لان ال CPU
لان لما اتكلم البرنامج او اللي عندي core i7 و
جاعدين بتكلموا على تمانية coreأنا بالوضع التقييدي
في البرنامج تابع بشغل على one core هل في ممكن
أستفيد من ال course التانية؟ طيبهذه المفروضة الـ
Parallel الآن إذا أنا بدي أستفيد منها معناته بدي
يكون برنامجي عنده القدرة إنه ينفذ مجموعة من ال
task بشكل إيش متزامن عشان يقدر يستفيد من المعالج
بشكل كامل يستفيد من ال cores بشكل مكتمل الشغل
التاني حتى لو كان عندي one core عادة ال operating
system مش بروح بساوي بروح بيعمل scheduling لوقت
المعالج والمعالج سريع جدا، بصبت؟ وغالبا بكون
ideal، مابشتغلشأيش الحل؟ أن أخلّي برنامجي ينفذ
أكتر من task في نفس الواجهة فبصير بدل ما ال
operating system بدي ال application تبعي one slice
of thyme بروح بديتين، تين و تلاتة أو أربعة بس كل
واحدة اللحظة بتاخد different task هذا بنسمي multi
-threading الآن في الموضوع الـSynchronized لو كان
عندي thread أو two threads بدهم يصلوا لنفس ال
object of dataماذا سيحدث فيه؟ إذا قلت له
Synchronized فهو سيبحث عن الـ data هذه لحد ما ال
thread اللي مسكها في الأول يعمل release وهذا لما
تكون ال data critical والـ update عليها مهم لكل
يشوفه تخيّلي .. تخيّلي .. أنا في عندي two
different thread T1 و T2 هدولة بمثله teller في بنك
تمام؟ بمثله teller في بنك و بدهم يعملوا axisعلى
نفس الـ record في نفس الوقت الـ account و بدهم
يروحوا يعملوا with a draw بدهم يعملوا سحب هنا صاحب
الرصيد موجود في البنك اللي في الفرع المدينة اللي
موجود و عميل إله أو زبون آخر مع شيك بده يسحب و
ربنا قدر إن الاتنين دخلوا في نفس الوقتلأنه ممكن
يبقى في مشكلة لو كان الرصيد غير كافي ولا لأ تخيل
أن الرصيد فقط بيحتوي على ألف دولار وقيمة الشك هذا
معاها شك بـ 700 دولار وهذا بده يسحب 400 دولار
الأصل لو مافيش look أو مافيش synchronizationعلى
الـ record هذا، ماذا سيحدث؟ الـ tiller hand شاف
الرصيد ألف و ال tiller hand اللي شاف الرصيد ألف،
معناته العملية okay proved فسحب لهذا سبعمية و سحب
لهذا أربعمية فبيصير رصيد ال hand minus سالب مية،
بصبوط ولا لأ؟ بس هذا الكلام not allowed فإيش الحل؟
حتما في واحد من اتنين وصل لل resource قبل، صح؟
مفهوم الـ Synchronized أنه بمجرد تمسك ال data
source تعمل عليه lock يعني تمنع أي حد تاني يصلّه
لحد ما انا اعمله release وبالتالي الفرق .. احنا
بنعرف نشتغل ال system بنشتغل بال nano second
وبالتالي الفرق الزمني هيكون موجود بين ال tasks و
بقدر اعمل lock by default ال vector هو عبارة عن
Synchronized by default لكنه
الـ Unrealist، الـ Unrealist لأ طبعا لما أنا بتكلم
على الـ Synchronized و بدّي أعمل ال thread weight
معناته أنا فيه عندي ال time ال system تبعي مش
هيقدر يشتغل بالقدرة اللي كان بعته كاملة عشان هيك
بنقول في الـ Unsynchronized ال performance أفضل في
ال Unsynchronized بنقول ال performance أفضل لكنه
في ال Synchronized data أو ال Synchronized object
بكون متكلم على safer more safer ان ال data محمية
اكثر وبالتالي انا مافيش عندى مشكلة في ال system
هنتكلم عليها بالتفصيل ان شاء الله لما نتقل للموضوع
ال multi-threading احنا في ال collections هنركز
على ال unrealist هنركز على ال unrealistطيب من ال
array list interface أو عفوًا ال class أنا عندي
add و size و get add من اسمها تعمل إضافة لعنصر على
ال list يعني بروح بقوله ال list تبعتي او ال array
list dot add read الان أول element read dot add
white
الـ element التاني هيكون white size بترجعلي بحجم
ال list كام element في ال list الموجودة بترجع ب
integer get بترجع ب object من ال list اللي عندي
حسب ال index المُعضَى حسب ال index المُعضَى وبما
أن ال array list هي عبارة عاملة implementation لل
collection interface معناته أنا فيه عندي contents
بوليان فانكشن بترجع
بـ true لما بتكون ال element موجود زي ما شوفنا مع
ال folder و ال file مع ال file is a file is exist
او exist مظبوط الآن ال method التاني اسمها
iterator عشان ترجعلي ب iterator object على ال
lists اللي موجودة عندى هان ال iterator object
هيكون فيه عندىالـ main method هدول has next بوليان
function عشان تتأكد دائما في element في ال
iterator next عشان تعمل obtain لل current element
في ال iterator و remove تعمل remove لل current
element على ال iterator اللي موجود عندها نعم؟ تخيل
ال iterator
بدأت color list ولا array اللي فوق خالص اللي هي ال
colors array فيها تلت ألوان لأن أعرفت array list
هي color list سميتها array list من نوع string طب و
لاحظوا السطر اللي معموله ال comment فوق إيش نوعه
list correct أو color list equal new array list من
ال string لاحظوا إن في البدايةلازم اعرف ال data
type معاها، تمام؟ طيب السؤال ال commented line صح
ولا غلط؟ ال commented line هذا صح ولا غلط؟ ايوة،
هذه عبارة عن subclass من ال list وبالتالي العلاقة
بينهم is a وبالتالي مافيش فيها مشكلة، ال line صحيح
مئة في المئة، تمامبدي أضيف عناصر ال array على ال
list اللي موجودة عندي هنا ممكن أعمل ال loop
العادية iterator i equals 0 أقل من ال length من
تبع ال color بس plus color list dot add ال colors
of i طريقة تانية ممكن أروح أعمل for
string s في مين؟ أو الـ C في ال killers صح؟ ماشي
راح أقوله ال dot add ال C أو ال S مش قضية كتير
وبالتالي يعني اللوب هذا يقدر يعملها implementation
بال 4H contains
قلنا بترجع ب trueلو كان ال color موجود او لو كان
ال object موجود ال color list dot contains it true
white هترجع ب false نفي ال false true يعني لو كان
اللون مش موجود اضيفه لو
انا بدى اطبع ال array او ال array list اللى عندى
ممكن اطبعهم element element بناء على ال index و ال
size تبعتها لحظة انا ماتكلمتش على ال iterator لحد
اللحظة
ممكن اعتمد على ال 4H بداخل ال array list زي ما
كتبته قبل شوية مع ال array اللى موجودة عندى مافيش
مشكلة وممكن استفيد من ال iterator العرف iterator
object على string iterator object على string يساوي
color list dot iteratorwhile الـ iterator dot has
next مابهمنيش العدد جديش ولان مافيه element بدياهو
مانعيش كلهم system dot out dot print line
literator dot next عشان احصل على القيمة الموجودة
بالمناسبة لو احنا عملنا system dot out dot print
line او dot print ل ال colors فوق ايش ال output؟
هاي ال colors
أيوة بتديني ال reference address بتقولها طيب لو
أنا راح قلتله print ال color list نفس
الأشياء لأ هأضعلك الريب الشكل هذا red كما blue
green احنا حطيناه في البداية
green blue و white وهذا الفرق الأساسي بين ال array
و ال list لأنه في مجال أن أشوف ال data اللي موجودة
في الداخل ال list as one shot كأنها one element
أنا بأتعامل معاه طيب
في
طريقة تانية اللي حكيناها قبل شويةاللي هي arrays
.asList الـ arrays class في method aesthetic
method اسمها asList بترجع ب object من نوع list
وبالتالي أنا بقدر أستفيد منه أستفيد من ال array ..
من ال arrays.asList عشان أضيف ال element مرة واحدة
بدل ما أضيفهم element element من خلال .. أولا هقول
له ال list تبعتي بدأت ساوي arrays.asList colors
صارت في عندي listو أروح أستخدم ال list هذه as
argument لل constructor تبعت ال array list أو ممكن
بشكل مباشر أجيب ال line هذا بدون
ال semi colon طبعا و أجيبه مباشر أحطه مكان ال list
اللي عندي هان و بصير مباشر أخد كل عناصر ال array
بدون مضطر أكتب ال codeالطويل السابق اللي احنا
شوفناه قبل شوية هي
فعليا arrays as list عملت عاملة implementation
تماما لل code اللي احنا كتبناه قبل شوية عاملة
iterator او عاملة loop على عناصر ال array واضفتهم
بالترتيب السابق اللي احنا شوفناه
شوفنا الـ ArrayList وشوفنا الـ methods add و get و
contains و iterator مجموعة الـ method بما أن هذه
عاملة implementation ل ال collection class وفي
قلنا ال collections عاملة implementation ل ال
collection interface ال collection interface وقلنا
في عنا collection class collections class عامل
implementation ل الالـ interface اللي موجود عندى
وفيه عندى مجموعة من الـ static methods اللي ممكن
أنا أستفيد منها sort
يعني الأن هقول ال collections dot
sort عشان نكون واضحين من البداية لوالـ code أو
السؤال اللي جاكي كان بيقولك صحح الخطأ و كنت كاتب
لك collection تمام؟
انت مسئول اتحدد الخطأ هذا تمام؟ لكن لو قلت في
أثناء الامتحان قلت لك اكتبي code عشان تعملي صورة
القرية لو كتبت و نسيت ال Sأنا ممكن إيش؟ أمشيها
لأنه بفترض و للأسف هذا اللي بيصير أن معظمنا بيعتمد
على ال compiler يحددله الأخطاء فانت بدك تنتبه إذا
كان السؤال بيقول حدد الخطأمعناته بيتنتبهي للأسس
هذه مش تقولي والله الدكتور مابرحمش لاحقا لأ حسب
السؤال بيتتعاملي معاه لكن بوعدك إذا كانت السؤال
كتابة code و ال code اللي فيه طويل و محتاج يعني
تركيز عالي ممكن أسامح هنا في بعض الأخطاء اللي
املاقية أثناء الكتابة طيب collections قولنا that
sort إيش بتساوي تعمل ترتيب للعناصر ترتيب بناء على
إيش؟مباشرة مايخطرش على بالك إلا غير ترتيب Alpha
Numeric فقط إذا كل ال data اللي موجودة عند ال
string معناته بتتكلم على alphabetical ordering طب
تصعدي ولا تنازلي؟ لأ تصعدي، ترتيب by default
تصعدي، طب بتعمل ترتيب تنازلي؟ مافيشش، آه ال
reverse هي يا أستاذ اللي شدت نظرك هي بتعمل reverse
لل element يعني القارية تبعتي مثلا، فيها redو فيها
green و فيها blue إذا أنا قلتله reverse هتصير blue
green و red أنا بدي descending order sorting
descending sorting إيش بدي أساوي؟ بدي أروح أقوله
في الأول sort هيرتبلي إياها ترتيب تصعدي بعد هيك
إيش راح أقوله؟ أقول له أعملها reverse بروح بنعملي
إياها تنازلي فانا محتاج تجري ل two methods بالشكل
هذاbinary search مرت عليكي في ال data structure ان
ال array list هذه العناصر فيها مرتبة ترتيب sorted
ترتيب تصعدي وعملية ال search بتعتمد على halving ان
اجسم دائما ال list لرصين عشان اعمل skip لواحد من
ال half اللي موجودين عندى جولنا ال reverse ان انا
اروح اعمل reverse to the element of the list
shuffleترتيب عشوائي اعيد ترتيب العناصر ترتيب
عشوائي fill اعبّ القراية طبعا كمان مرة collections
dot
fill هذه هتاخد مني two objects او تاخد مني two
objects الأول اللي هي ال list تبعتنا والتانيالـ
object اللي أنا بدي أقعد بيه أضيفه تخيلي مثلا
white أو بلاش black عارفة
إيش هتصير في ال list اللي عندي هان؟ كل العناصر
اللي فيها هتصير black جداش هتضيف كام element؟ طب
لو كانت ال list فاضية مش هيعمل حاجةمش هيقدر يعبيها
ليش لأنه فعليا هو أنا جاعة بقوله fill فعشان ي fill
لازم يعمل list plus يكون already exist من خلال ال
add method اللي موجود عندها copy بنسخ
reference من list ل element ل list تانية minimum و
maximum معروفات add all يجيب كل العناصر اللي في
listويعملهم append لل list الموجودة عندي frequency
عشان يرجع ب number انتجة كم مرة ال element هذا
موجود في ال list كم مرة ال element هذا موجود في ال
list ولو كان في عندي two lists وبدأ أسأل هل في
بينهم تقاطع أو لأ؟ في عناصر مشتركة بينهم أو لأ؟
ممكن ألجأ للمتد اسمها disjoint بدي تنتبه أنه دائما
هذه الـ methods مابتعملش return مابتعملش return
مابتعملش
return مابتعملش return مابتعملش return مابتعملش
return مابتعملش return
مابأنا هيك بقوله collections.sort و بتديه الـ
killer list التقييم مباشرة الالمتحدث ان عمل ترتيب
لمين للعناصر في داخل الـ array يعني انت لو طبعتها
جبل و طبعتها بعد تمام مباشرة هتلاقيها جبل جبل عملت
ال sort كانت غير مرتبة و بعد ال sort تم ترتيبها
ترتيب تصعدي
الـ set ال
class التاني بتفرج عن ال array list على أنها
unordered collection of unique elements، unordered
طيب، بدياك تنتبه لكلمة ordered و unorderedغاد
قولنا ال order يعني الآن تخيل ال list ال first
position ال second ال third ال fourth إلى آخره
هدولة بالنسبالك معروفات بناء على إيش؟ بناء على ال
add بناء على ال push اللي صوتيها للعناصر اللي
موجودة عندها وعشان هات قولت ordered بينما .. بينما
لو كانت عندي set وروحت قولت لل set.add وقلت له red
object ووراها green ووراها blue مش ضروري يطلع ليهم
نفس الترتيب عشان إيه قلت عنها unordered لو أنا
أضفت ال read كمان مرة مش هيقبله مدنيش syntax error
هو بياخد ال object و بروح بده يعمله add إذا هو
existخلاص موجود does not exist بيضيفه على عناصر ال
array اللي موجودة عندها ال implementation تبعت ال
set ها اما من ال hash set او tree set اما hash set
او tree set ايش الفرق بينهم؟ ايش ال hashing؟
معناته ال hashing هي عبارة عن schema او algorithm
تمام الفكرة فيه انه يعمل place لل items يضيفهم
اضيفهم وين على index بتتم تحديده من ال element
نفسه يعني لو مانا في الدياجي أقولك أنا عندي مجموعة
من الأسماء أحمد و خالد و .. بس لحظة شوية اه مش
collection في الآخر بس اصبر شوية اه اصبر اصبر بهاء
و رائد مثلا و أضفت هدول لست أضفت هدول لست بناء على
hash function تمام تحدد ال position بناء على عدد
ال characters بناء على عدد ال characters بهاء خمسة
أحمد أو خالد ستة أحمد خمسة رائد أربعة يعني انه
رائد في الأول
الان بهاء و أحمد نفس الأشياء الأولوية اللي ظهر في
الأول و
بعدين بتجيبلي خالد هذا بناء على إيش؟ بناء على الـ
string length لكن ممكن تكون ال hash code مبنية
بناء alphabetical هتروح تحقق ليه بهاء أو أحمد بهاء
خالدرائد، حسب إيش الـ hash core الـ function تبعتي
اللي موجودة، ممكن يكون في عندي hash function تانية
تبني بناءً على ال summation تبعتي ال binary value
لكل character، تمام؟ فحسب إيش ال hashing اللي أنا
بتقدر، في الآخر بتعمل generate لمين؟ لل index،
عشان أحدد ال position تبعتي، الآن، هل ال index
اللي تم إنشاه وأنا بقدر استفيد منه؟ لأالـ Index
موجود نعم لكنه من خلال الـ hash code تمام؟ ففيش
مجال أروح أستخدم صفر و واحد و اتنين اللي أنا
بعرفهم لأ لأ لأ هذا مع ال order لأن ال locationهو
اللي له الـ index تمام؟ بينما ال location هذا تم
تحديده أو تم تحديد ال address .. ال index بتاعته
بناءًا على مين؟ بناءًا على ال hash function اللي
موجود ده عندي وبالتالي بقدرش .. أنا مش عارف إيش ال
output تبعت ال hash function عشان أقدر أعتمد على
مين؟ على ال index اللي عندي فال index موجود، هل
أستفيد منه؟ طيب، الآن .. وبالتالي أنا فيه عندي
hashingفي عندي hash code ال hash code في ال system
عندي هي عبارة عن integer value تم حسابتها بناء على
ال object اللي هم زي ما قلنا قبل شوية و المفروض ان
ال different object تديني different hash code عشان
مايصيرش في عندي duplication و في عندي .. يصير في
عندي two elements في نفس ال .. نفس الم .. نفس ال
location او نفس ال place لان أحيانا بصير في عندي
collision لما بكون في عندي different objectوطلع
لهم نفس الـ hash code يعني .. أجي أقول .. زي ما
قلنا قبل شوية عندي أحمد و بهق تمام؟ لو كنت باعتمد
على عدد ال characters التنب طلع لهم خمسة أصبت؟ طب
معناه أن التنب دول بيكونوا في نفس ال position هانا
حابب أسميه إيه اللي صار في عندي؟ collision بحيث أن
ال two different objects طلع لهم same hash code
طبعا المفروض أن ال hash function الجيدةالـ hash
function الجيدة دائماً عدد الـ collection فيها
منخفض جداً من الأمثلة الفعالة جداً في موضوع الـ
hash code اللي بناخد عليها رقم الهوية أو الرقم
الوطني هو كيف بنعملها validation وهذه الشيء التاني
في الـ hash code المفروض إن الـ hash code هذا أقدر
من خلاله أصل ال data الحقيقية لما أعمل reverse
Engineering للـ code اللي موجود عندى anyway ففي
الآخر هذا هو ال hash code في عندى ال hash table هو
ال position او هو الجدول اللى بيبنى على مين على ال
hash code و ال index تبعته بتكون هي عبارة عن ال
hash code اللى موجود عندى عشان اضيفه طبعا في عندى
ال load factor جدش في عندى data موجودة وجدش في
عندى ال ratio بينعدد الخلايا الموجودة في الـ hash
table وعدد الخلايا المستخدمة من الجدول على عدد
الخلايا الكلي بنسميها ال load factor وليس قضية
كتير هيديلها علاقة بال performance كده ال hash
code تبعتي بتعمل generate صح أو allocation صح
للعناصر anyway تعالى نشوف بال Java بال code تبعنا
array list أو a b c array عبارة عن array of string
فيها مجموعة من ال characters ال b و ال c
duplicated values أنا روحت عرفت array list في
البداية اللي حشوفناها في الكود السابق و أضفت ال
array تبعتيها لل array list و روحت طبعتها مباشرة
هيطبعلي ال array list مثل ما أضفتها تماما ordered
و تسمح بال duplication هي ال list
عملت set هاش set وأضفت لها ال array list تبعتي أو
ال array عفوا اللي عندي أو ال array list فاش مشكلة
عندي وروحت طبعتها مباشرة إيش تتوقعي؟ أول حاجة مش
هيكون في duplication الشغل التاني الترتيبالترتيب
حسب الـ hash function حسب الـ hash function
المعتمدة الجافة في ال output اللي عندي فاطلع لي a
b c d e هيك أنا بفهم ان ال hash function اعتمدت
على ال alphabetical او alphabetical schema لترتيب
ال data اللي موجود عندها بقى عندي اخر شغلة خلال
دقيقة ان شاء الله بنخلصها و لو اضطرنا بنرجع لها
مرة تانية الآن بما انهبشكل أو باخر بدي أعمل
implementation للـ tree أو للـ set اللي موجودة
عندي هان قولنا احنا اما ب hash code او hash
function او hash set او tree set ايش مفهوم الـ
tree؟ انا بتكلم على مجموعة من الباخذ و لا لأ من
المسارات فالـ tree هي لازم تكون sorted مفهوم الـ
tree دائما إذا أنا بتكلم على ال roadالـ value اللي
على اليسار أقل والـ value اللي على اليمين أكبر
سواء كنت بتكلم على binary tree أو غيرها ففي الآخر
هتكون في عندي sorted وفعليا حتى ال hash ممكن أحصل
على sorted حسب ال scheme ال hash code ال hash
function اللي موجودة عندها طيب إذا كانت ال data
sortedفي الـ Tree اللي عندي معناته أنا بقدر ..
طبعا إذا كنت استخدمت الـ Tree set object عشان أنشئ
ال set تبعتي في عندي شغل اسمها ال head set و ال
tail set بالإضافة لل first و ال last ال method
الأولى ال head set بترجع ب subset تمام اللي موجودة
قبل يعني تخيلي A,B,C,D,E هاي العناصر اللي موجودة
عندي هنا و ال F يكنو جيت و قلت لك بدي الـ sub أو
الـ tail set لل set اللي موجود هذا بناء على ال D
هذه ال function هذه ABC بمثله head set المجموع
اللي هي sub set المجموع القبل وال tail set من ال D
للآخربتحتوى الـ D طب و ال first و ال last ال first
element و ال last element اللي موجودين على ال tree
تعالى نشوف ال code هذا على السريع المحاضرة الجاية
ان شاء الله تعالى لأن الوقت أدركنا بنبدأ من عند ال
sets و بنتكلم على ال tree set ان شاء الله تبارك
وتعالى تي اي سؤال يا بنات؟ بيبقى سهل ال tree set
انا بحدد من وين و من كده بناء على ال character
اللي بتحدي دي نعم الله تكل عافية