[واسط StringUtil را دانلود کنید](http://bayanbox.ir/download/8609900801606446938/StringUtil.java). یک کلاس با نام StringUtilImpl بنویسید که این واسط (interface) را پیادهسازی (implement) کند. متد numberOfCharacters تعداد کاراکترهای پارامترش را برمیگرداند. مثلاً تعداد
کاراکترهای “salam” مقدار 5 است. اگر پارامتر این متد null باشد، باید 0 برگرداند.
آن چه باید آپلود کنید: فقط فایل StringUtilImpl.java را زیپ کنید و فایل زیپ را ارسال کنید. دقت کنید که در فایل زیپ هیچ فایل یا فولدری به جز StringUtilImpl.java نباشد. دقت کنید که کلاس StringUtilImpl نباید در هیچ پکیجی باشد.
بسته (package) با عنوان ir.javacup.contest.collections را [دانلود کنید](http://bayanbox.ir/download/1281830682496985785/src.zip) و واسطهای MapUtil و ListUtil را ببینید.
کلاسهای MapUtilImpl و ListUtilImpl را تعریف کنید که به ترتیب واسطهای فوق را پیادهسازی (implement) میکنند. توضیح درباره متدهای این کلاسها:
+ متد ListUtil.uniques یک لیست به عنوان پارامتر میگیرد و لیستی برمیگرداند که فقط
شامل مقادیر یکتا (غیرتکراری) از پارامترش است. به ازای پارامتری که null یا لیست خالی
باشد، این متد باید null برگرداند.
+ متد MapUtil.frequency یک لیست به عنوان پارامتر میگیرد و یک Map برمیگرداند که
در آن، به ازای هر عضو پارامتر یک سطر دارد. ستون اول خروجی، یکی از مقادیر موجود
در پارامتر است و ستون دوم تعداد تکرار همان مقدار در پارامتر است. اگر پارامتر
این متد null یا خالی باشد، این متد باید null برگرداند.
**آن چه باید آپلود کنید**: یک فایل زیپ با نام q3.zip شامل بستهی ir.javacup.contest.collections . (وقتی این فایل زیپ را باز میکنیم، فقط دقیقاً شاخهی ir را ببینیم)