آموزش جامع Map در جاوا (بخش دوم)
جلسات دوره
مهدی عباسی
مهدی عباسی هستم، مسلط به حداقل ۲۰ زبان مطرح برنامه نویسی به صورت پیشرفته، مدیر عامل شرکت آریا نرم افزار و بنیانگذار آکادمی درسمن، مسلط به تدریس دروس تخصصی کاردانی و کارشناسی کامپیوتر، پایگاه داده ها، برنامه نویسی پیشرفته، مبانی برنامه نویسی، مباحث ویژه طراحی وب و .... مشاهده رزومه
آموزش جامع Map در جاوا – بخش دوم
در جلسه گذشته ساختار Map را توضیح دادیم و گفتیم که Map ها مانند کالکشن ها هستند با این تفاوت که عناصر آنها دارای کلید(key) و مقدار(value) است. در این جلسه ادامه متد های Map را بررسی میکنیم.
متدهای کاربردی Map ها
متد keySet
این متد کلیدهای Map را در قالب Set برمیگرداند.
Map<String,String> mapColor=new HashMap<String,String>(){{
put("R","Red");
put("B","Blue");
put("G","Green");
put("Y","Yellow");
}};
Set<String> keys= mapColor.keySet();
System.out.println(keys);
خروجی
[R, B, G, Y]
متد values
این متد تمام مقدار(value) Map را در قالب Collection برمیگرداند.
Map<String,String> mapColor=new HashMap<String,String>(){{
put("R","Red");
put("B","Blue");
put("G","Green");
put("Y","Yellow");
}};
Collection<String> values=mapColor.values();
System.out.println(values);
خروجی
[Red, Blue, Green, Yellow]
متد entrySet
این متد برای حرکت روی عناصر Map استفاده میشود. Entry یک کلاس داخلی درون Map است که Map را به کالکشن با دو مقدار key و value تبدیل میکند.
Map<String,String> mapColor=new HashMap<String,String>(){{
put("R","Red");
put("B","Blue");
put("G","Green");
put("Y","Yellow");
}};
System.out.println(mapColor.entrySet());
خروجی
[R=Red, B=Blue, G=Green, Y=Yellow]
با استفاده از حلقه for و متد entrySet میتوان روی Map حرکت کرد.
for(Map.Entry<String,String> entry :mapColor.entrySet()){
System.out.println(entry.getKey()+" ==> "+entry.getValue());
}
خروجی
R ==> Red
B ==> Blue
G ==> Green
Y ==> Yellow
همچنین زمانی که تابع entrySet را فراخوانی میکنیم خروجی از نوع کالکشن است و میتوان با استفاده از Iterator روی آن حرکت کرد.
Iterator iterator= mapColor.entrySet().iterator();
while (iterator.hasNext()){
System.out.println(iterator.next());
}
خروجی
R=Red
B=Blue
G=Green
Y=Yellow
تا اینجا متدهای کاربردی مپ ها را توضیح دادیم در ادامه میخواهیم کلاس مدل خود را به عنوان key یا value مپ قرار دهیم.
در ابتدا یک کلاس به نام Person میسازیم و توابع equals, hashCode, compareTo را بازنویسی میکنیم که برابر با کد های زیر است:
public class Person implements Comparable {
private int personId;
private String name;
private String family;
private int age;
public Person(int personId, String name, String family, int age) {
this.personId = personId;
this.name = name;
this.family = family;
this.age = age;
}
public int getPersonId() {
return personId;
}
public void setPersonId(int personId) {
this.personId = personId;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getFamily() {
return family;
}
public void setFamily(String family) {
this.family = family;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "Person{" +
"personId=" + personId +
", name='" + name + '\'' +
", family='" + family + '\'' +
", age=" + age +
'}';
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Person person = (Person) o;
return personId == person.personId && age == person.age && Objects.equals(name, person.name) && Objects.equals(family, person.family);
}
@Override
public int hashCode() {
return Objects.hash(personId, name, family, age);
}
@Override
public int compareTo(Object o) {
Person person2=(Person) o;
return this.getFamily().compareTo(person2.getFamily());
}
}
کدهای کلاس Main
TreeMap<Integer,Person> map1=new TreeMap<>();
map1.put(800,new Person(1,"mehdi","Rezaie",34));
map1.put(320,new Person(2,"Ali","Ahmadi",29));
map1.put(180,new Person(3,"Reza","Tavakoli",54));
System.out.println(map1);
System.out.println(map1.entrySet());
خروجی
{180=Person{personId=3, name='Reza', family='Tavakoli', age=54}, 320=Person{personId=2, name=Ali, family='Ahmadi', age=29}, 800=Person{personId=1, name='mehdi', family='Rezaie', age=34}}
[180=Person{personId=3, name='Reza', family='Tavakoli', age=54}, 320=Person{personId=2, name=Ali, family='Ahmadi', age=29}, 800=Person{personId=1, name='mehdi', family='Rezaie', age=34}]
همچنین می توان به کمک حلقه foreach و متد entrySet روی عناصر Map حرکت کرد.
for(Map.Entry<Integer,Person> entry :map1.entrySet()){
System.out.println(entry.getValue());
}
خروجی
180=Person{personId=3, name='Reza', family='Tavakoli', age=54}
320=Person{personId=2, name=Ali, family='Ahmadi', age=29}
800=Person{personId=1, name='mehdi', family='Rezaie', age=34}
در ادامه میخواهیم کلاس مدل person را به عنوان کلید Map قرار دهیم.
TreeMap<Person,String> map2=new TreeMap<>();
map2.put(new Person(1,"mehdi","Rezaie",34),"Blue");
map2.put(new Person(2,"Ali","Ahmadi",29),"Yellow");
map2.put(new Person(3,"Reza","Tavakoli",54),"Red");
System.out.println(map2);
System.out.println(map2.entrySet());
خروجی
{Person{personId=2, name=Ali, family='Ahmadi', age=29}=Yellow, Person{personId=1, name='mehdi', family='Rezaie', age=34}=Blue, Person{personId=3, name='Reza', family='Tavakoli', age=54}=Red}
[Person{personId=2, name=Ali, family='Ahmadi', age=29}=Yellow, Person{personId=1, name='mehdi', family='Rezaie', age=34}=Blue, Person{personId=3, name='Reza', family='Tavakoli', age=54}=Red]
همانطور که در بالا مشاهده میکنید TreeMap براساس کلید، Map را مرتب میکند و ما تابع compareTo را درون کلاس Override کردیم و به درستی این عملیات انجام شده است.
یادگیری این دوره تنها با یک جلسه به پایان نمیرسد و شما میتوانید با تهیه این درس و سایر دروس ارائه شده در این دوره، به طور کامل به مباحث جاوا پیشرفته تسلط پیدا کنید.
بسیار خرسندیم که با یک جلسه دیگر از این آموزش جاوا پیشرفته در خدمت شما بودیم و توانستیم به پیشرفت شما دوستان عزیز کمک کنیم. شما عزیزان میتوانید برای دسترسی بیشتر به جلسات این دوره از آموزش، آن را دانلود کنید.
نظر شما در تصمیم دیگران اثرگذار است.
لطفا برای همراهان درسمن و بهتر شدن دوره نظر خود را بنویسید.