2016-04-06 10 views
-3

Ich versuche, eine Person Klasse zu erstellen, die getName() Methode hat, addFriend(Person R) Methode, ArrayList<Person> getFriendList()verfassen und Arraylist

String Name; 
private ArrayList Person friend = new ArrayList Person(); 

public Person(String name) 
{ 

this.Name=name; 

    } 

public ArrayList<Person> getFriendList(){ 

    return friend; 

} 


public void addFriend(Person R){ 

friend.add(R); 

} 

FriendsOfFriends(){  
    //list of friends of friends of this person. 
} 

public static int (p,q){  
    //return the number of friends shared by both R and q. 
} 
+0

Hinweis: 1/Freunde von Freunden, erstellen Sie eine leere Liste, for-Schleife über direkte Freunde und für jeden fügen Sie alle seine Freunde in die leere Liste. 2/siehe Antwort unter –

+0

So funktioniert SO nicht, Sie sollten zumindest zeigen, was Sie versucht haben und warum es nicht wie erwartet funktioniert. – Nacho

Antwort

0
public static int numberOfMutualFriends(Person p, Person q){ 
    //return the number of friends shared by both R and q. 


    return intersection(p.friend,q.friend).size(); 

} 

public List<Person> intersection(List<Person> list1, List<Person> list2) { 
    List<Person> list = new ArrayList<Person>(); 

    for (Person t : list1) { 
     if(list2.contains(t)) { 
      list.add(t); 
     } 
    } 

    return list; 
} 

Sie finden die hashCode und die equals Methode, um neu definieren müssen, um Bring es zum Laufen.

+1

BTW, Schnittpunkt kann leicht implementiert werden mit ['. RetainAll()'] (https://docs.oracle.com/javase/8/docs/api/java/util/List.html#retainAll-java.util. Collection-) –

+0

Dank @Felip Sulser – user6167014

0

Scheint, Sie studieren Bulk-Operationen auf Sammlungen.

Freunde von Freunden zu erhalten, verwenden Set#addAll() in der foreach-Schleife:

List<Person> getFriendsOfFriends() { 
    Set<Person> res = new HashSet<>(); // empty set 
    for (Person p : this.friends)  
     res.addAll(p.friends);   // add all p's friends 
    return new ArrayList<>(res);  // copy to ArrayList and return 
} 

Um Anzahl von gemeinsamen Freunden zu erhalten, verwenden Set#retainAll():

public static int numberOfMutualFriends(Person p, Person q) { 
    // set containing friends of p (not to modify p.friends itself) 
    Set<Person> res = new HashSet<>(p.friends); 
    res.retainAll(q.friends);   // leave only mutual friends 
    return res.size();   
} 

Das funktioniert, wenn es keine sind Person Klone in Daten (dh jede Person wird als genau ein Objekt dargestellt). Andernfalls müssen Sie .equals() und .hashCode() in Person Klasse überschreiben, damit es ordnungsgemäß funktioniert.

+0

Vielen Dank @Sasha Salauyou – user6167014

Verwandte Themen