powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Сравнение параметров объектов
22 сообщений из 22, страница 1 из 1
Сравнение параметров объектов
    #38413734
Leyla89
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Фабрика из десяти юзеров в HashMap. Возраст - рандомные значения от 0 до 100. Когда будут перебираться в for: если два юзера с одинаковым возрастом, то клонировать одного из них. Не могу понять как это сделать с for. Думала с массивом из объектов, но тоже непонятно как там взять age. Поставьте на путь истинный.
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
public class User implements Cloneable{
 private int age = (int)(Math.random()*100);
 private int growth; 
private int weight; 
private String name;
public User(String name){
    this.name = name;
}
public int hashCode(){
    final int prime = 55;
    int result = 1;
    result = prime * result + growth;
    result = prime * result + weight;
    return result;
}
public User clone() throws CloneNotSupportedException{ 
    return (User) super.clone();
}
public boolean equals(Object obj){
    if(this == obj){
        return true;}
    if(obj == null){
        return false;
    }
    if(getClass() == obj.getClass()){
        return false;
    }
    User other = (User)obj;
    if(growth != other.growth){
        return false;
    }
    if(weight != other.weight){
        return false;
    }
    if(name != other.name){
        return false;
    }
    if(age != other.age){
        return false;
    }
    return true;
}
public int getAge(){
    return age;
}
public int getGrowth(){
    return growth;
}
public void setGrowthWeight(int growth, int weight){
    this.growth = growth;
    this.weight = weight;
}
public int getWeight(){
    return weight;
}
public String getName(){
    return name;
}
public static void main(String[] args) {        
    Map<User, Integer> map = new HashMap<User, Integer>();
    User u = new User("Emily");
    u.setGrowthWeight(165, 60);
    User u1 = new User("Emma");
    u1.setGrowthWeight(170, 65);
    User u2 = new User("Michael");
    u2.setGrowthWeight(180, 80);
    User u3 = new User("Andrew");
    u3.setGrowthWeight(180, 70);
    User u4 = new User("Isabella");
    u4.setGrowthWeight(158, 46);
    User u5 = new User("John");
    u.setGrowthWeight(164, 62);
    User u6 = new User("Samuel");
    u6.setGrowthWeight(184, 83);
    User u7 = new User("Anna");
    u7.setGrowthWeight(165, 53);
    User u8 = new User("Jasmine");
    u8.setGrowthWeight(168, 60);
    User u9 = new User("Robert");
    u9.setGrowthWeight(193, 78);
    map.put(u, 1);
    map.put(u1, 2);
    map.put(u2, 3);
    map.put(u3, 4);
    map.put(u4, 5);
    map.put(u5, 6);
    map.put(u6, 7);
    map.put(u7, 8);
    map.put(u8, 9);
    map.put(u9, 10);
    for(Entry<User, Integer> entry : map.entrySet()){
        System.out.println(entry.getKey() + " " + entry.getValue());
    }           
}
}
...
Рейтинг: 0 / 0
Сравнение параметров объектов
    #38413740
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leyla89,
Есть не такое сумбурное описаниезадачи? Кстати не используйте Cloneable ни при каких условиях, это устаревший подход. Лучше воспользоваться статическим методом генерации, который принимает User и на основе полей создает новый объект
...
Рейтинг: 0 / 0
Сравнение параметров объектов
    #38413764
Leyla89
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
забыл ник, спасибо
...
Рейтинг: 0 / 0
Сравнение параметров объектов
    #38414185
redwhite90
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
забыл ник,

авторне используйте Cloneable ни при каких условиях, это устаревший подход

Что в этом плохого? почему устарел?
...
Рейтинг: 0 / 0
Сравнение параметров объектов
    #38414273
DoSOfRedRiver
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вы действительно странно ставите задачу.

Если я всё правильно понимаю, вы можете использовать обычный перебор.

Поочерёдно берёте объекты из сета, запускаете новый цикл, опять же по сету, и сравниваете значение возраста юзеров.

Код: java
1.
2.
3.
4.
5.
6.
7.
for(User userOut : userSet) {
	for(User userIn : userSet) {
		if (userOut.getAge() == userIn.getAge()) {
			//logic
		}
	}
 }



Совершенно непонятно зачем вам там мап, и также зачем вам этих юзеров клонировать.
...
Рейтинг: 0 / 0
Сравнение параметров объектов
    #38414393
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Сравнение параметров объектов
    #38414439
ivanra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: java
1.
2.
3.
4.
5.
6.
7.
for(User userOut : userSet) {
	for(User userIn : userSet) {
		if (userOut.getAge() == userIn.getAge()) {
			//logic
		}
	}
 }


- сложность O(n 2 )
на самом деле задача решается за 1 проход (сложность O(n)), например, используя карту, либо массив
Код: java
1.
User[] distinctAges = new User[100];
...
Рейтинг: 0 / 0
Сравнение параметров объектов
    #38414463
cdtyjv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ivanra ,
Такую задачу ну никак нельзя решить за O(n), ибо алгоритмически это нечто вроде сортировки. n ln n более реально.

З.Ы.: "Карта" уж очень режет слух. Это все равно, что "английский язык" перевести как "english tongue"
...
Рейтинг: 0 / 0
Сравнение параметров объектов
    #38414464
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Даешь пример на Guava или Java 8!
...
Рейтинг: 0 / 0
Сравнение параметров объектов
    #38414477
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cdtyjvЭто все равно, что "английский язык" перевести как "english tongue"
Не самый удачный пример. Смотри mother tongue, native tongue.
...
Рейтинг: 0 / 0
Сравнение параметров объектов
    #38414520
cdtyjv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz ,
Да, пример не очень. Тогда классика: how much watch
...
Рейтинг: 0 / 0
Сравнение параметров объектов
    #38414524
ivanra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
cdtyjv,
использую, потому что удобно (остальные варианты длиннее).
А сортировка тут не нужна:
Код: java
1.
2.
3.
4.
Map<Integer,User> usersForClone = new HashMap<Integer,User>();
for(User user : map.keySet()){
	usersForClone.put(user.getAge(), user);
}


дальше клонируем. Максимальная сложность n*2. С массивом, наверно, можнно сэкономить какую-то константу при больших n
...
Рейтинг: 0 / 0
Сравнение параметров объектов
    #38414547
ivanra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Поторопился, код неправильный, не хватает проверок, но идея наверно понятна?
...
Рейтинг: 0 / 0
Сравнение параметров объектов
    #38414568
Alexander A. Sak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cdtyjvДа, пример не очень. Тогда классика: how much watch

Я встречал "took yes and go" (взял да и пошел).
...
Рейтинг: 0 / 0
Сравнение параметров объектов
    #38414575
cdtyjv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ivanraПоторопился, код неправильный, не хватает проверок, но идея наверно понятна?Так там в проверках вся соль и заключается. В зависимости от того, что и как вы будете проверять, сложность будет плавать от n^2 до приблизительно n ln n.
...
Рейтинг: 0 / 0
Сравнение параметров объектов
    #38414580
cdtyjv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ivanraиспользую, потому что удобно (остальные варианты длиннее).Тут вопрос не в удобстве, а в том, что перевод map = карта является неверным в данном контексте. Здесь map = таблица .
...
Рейтинг: 0 / 0
Сравнение параметров объектов
    #38414588
ivanra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
нет, просто надо в карте хранить кортежи <счетчик, пользователь>, либо использовать промежуточную карту / массив
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
Map<Integer,User> distinctAges = new HashMap<Integer,User>();
Map<Integer,User> usersForClone = new HashMap<Integer,User>();
for(User user : map.keySet()){
	Integer age = user.getAge();
	if (distinctAges.containsKey(age))
		usersForClone.put(age, user);
	else
		distinctAges.put(age, user);
}           


Тут вся идея - использовать ассоциацию (возраст<->пользователь), либо фиксированный массив, проиндексированный возрастом
...
Рейтинг: 0 / 0
Сравнение параметров объектов
    #38414658
ivanra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Leyla89,
кстати, вот за это могут снизить оценку:
Код: java
1.
2.
3.
    if(name != other.name){
        return false;
    }
...
Рейтинг: 0 / 0
Сравнение параметров объектов
    #38414828
Leyla89
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ivanra, почему могут снизить оценку?
DoSOfRedRiver, в вашем коде что такое userSet? Редактор не понимает переменную даже после присваивания типа User.
Переписала:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
public class User{
	static int age = (int)(Math.random()*100);
	final int growth;
	final int weight;
	final String name;
	
	public static User newInstance(User u) { 
	    return new User(u.getName(), u.getGrowth(), u.getWeight()); 
	} 

	public User(String name, int growth, int weight){
		this.name = name;
		this.growth = growth;
		this.weight = weight;
		this.age = age;
	}
	
	public int hashCode(){
		final int prime = 31;
		int result = 1;
		result = prime * result + growth;
		result = prime * result + weight;
		return result;
	}
	
	public boolean equals(Object obj){
		if(this == obj){
			return true;}
		if(obj == null){
			return false;
		}
		if(getClass() == obj.getClass()){
			return false;
		}
		User other = (User)obj;
		if(growth != other.growth){
			return false;
		}
		if(weight != other.weight){
			return false;
		}
		if(name != other.name){
			return false;
		}
		if(age != other.age){
			return false;
		}
		return true;
	}
			
	public int getAge(){
		return age;
	}
	
	public int getGrowth(){
		return growth;
	}
	
	public int getWeight(){
		return weight;
	}
	
	public String getName(){
		return name;
	}
	
	public static void main(String[] args) {        
	    Map<User, Integer> map = new HashMap<User, Integer>();
	    User u = new User("Emily", 165, 60);
	    User u1 = new User("Emma",70, 65);
	    User u2 = new User("Michael", 180, 80);
	    User u3 = new User("Andrew", 180, 70);
	    User u4 = new User("Isabella", 158, 46);
	    User u5 = new User("John", 164, 62);
	    User u6 = new User("Samuel", 184, 83);
	    User u7 = new User("Anna", 165, 53);
	    User u8 = new User("Jasmine", 168, 60);
	    User u9 = new User("Robert", 193, 78);
	    map.put(u, 1);
	    map.put(u1, 2);
	    map.put(u2, 3);
	    map.put(u3, 4);
	    map.put(u4, 5);
	    map.put(u5, 6);
	    map.put(u6, 7);
	    map.put(u7, 8);
	    map.put(u8, 9);
	    map.put(u9, 10);
	    for(Entry<User, Integer> entry : map.entrySet()){
	        System.out.println(entry.getKey() + " " + entry.getValue());
	    }    
	}
}
...
Рейтинг: 0 / 0
Сравнение параметров объектов
    #38414898
DoSOfRedRiver
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leyla89,

userSet это сет из объектов User.

Set<User> userSet = new HashSet<User>; //Приблизительно так объявляется.
...
Рейтинг: 0 / 0
Сравнение параметров объектов
    #38414903
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
this.age = age;

вот это лишнее в конструкторе, а так - прогресс налицо)
...
Рейтинг: 0 / 0
Сравнение параметров объектов
    #38415534
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В чём смысл этого?
Код: java
1.
static int age = (int)(Math.random()*100);
...
Рейтинг: 0 / 0
22 сообщений из 22, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Сравнение параметров объектов
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]