- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 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
@Entity
public class MyObject {
@Column
private int type;
@Id
private long id;
@Column
private String name;
// и ещё другие поля, а также геттеры-сеттеры для них, в общем, обычная сущность
}
// managed bean в jsp 1.2 (legacy проект)
public class MyList {
private List<MyObject> oList;
private SimpleDateFormat filterDateFormat;
public MyList() {
filterDateFormat = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss");
}
public List<MyObject> getMyList() {
if (oList == null) {
oList = DAO.getDAO().findAllMyObjects();
String name = ...; // берётся из формы
if (name != null && name != "") {
oList = getObjectsByName(name, oList);
}
Integer type = ...; // тоже берётся из формы
if (type != null) {
oList = getObjectsByType(type, oList);
}
// и здесь ещё четыре куска такого же говнокода для других свойств MyObject
}
return oList;
}
private List<MyObject> getObjectsByType(Integer type, List<MyObject> oList) {
List<MyObject> queriesByType = new ArrayList<MyObject>();
for (MyObject o : oList) {
if (o.getType() == type) {
queriesByType.add(o);
}
}
return queriesByType;
}
private List<MyObject> getObjectsByName(String name, List<MyObject> oList) {
List<MyObject> queriesByName = new ArrayList<MyObject>();
for (MyObject o : oList) {
if (o.getName() == name) {
queriesByName.add(o);
}
}
return queriesByName;
}
// и ещё четыре таких же говнометода для других свойств MyObject
}
guest 28.01.2014 12:08 # 0
VseGovnoOdinYaKrut 28.01.2014 12:18 # +3
evg_ever 28.01.2014 12:26 # 0
roman-kashitsyn 28.01.2014 12:28 # 0
evg_ever 28.01.2014 12:46 # 0
И таким образом получим нормальное удаление элементов из списка, выполняющееся за O(1), тем более, что этот код куда логичнее и понятнее.
А ещё лучше просто один нормальный JPQL/Criteria запрос было сделать, тогда вообще не нужно было бы плодить все эти методы...
evg_ever 28.01.2014 12:52 # 0
roman-kashitsyn 28.01.2014 12:58 # 0
evg_ever 28.01.2014 13:16 # 0
Блин, там ещё и == для строк вместо equals используется ведь. %) Хотя в данном случае, может, и по фиг, вряд ли Hibernate будет "" новые создавать.
roman-kashitsyn 28.01.2014 15:53 # 0
потому что связные списки тормозные из-за нелокальности ссылок и жрут в несколько раз больше памяти
evg_ever 28.01.2014 16:41 # 0
вывод:
ArrayList: 426
LinkedList: 22
тормозные, значит?
roman-kashitsyn 28.01.2014 16:55 # +1
evg_ever 28.01.2014 17:08 # 0
roman-kashitsyn 28.01.2014 17:12 # 0
guest 28.01.2014 13:18 # +2
System.out.println("что-то не так с жабой");
VseGovnoOdinYaKrut 28.01.2014 13:27 # 0
System.out.println("да не, всё в порядке");
evg_ever 28.01.2014 13:31 # 0
- if (o.getType() == type)
+ if (o.getType().equals(type))
roman-kashitsyn 28.01.2014 13:36 # 0
VseGovnoOdinYaKrut 28.01.2014 13:50 # 0
3.14159265 28.01.2014 13:52 # +1
VseGovnoOdinYaKrut 28.01.2014 16:05 # +3
roman-kashitsyn 28.01.2014 16:23 # 0
kegdan 30.01.2014 17:18 # 0
3.14159265 28.01.2014 18:59 # 0
Да. Тупанул.
guest 28.01.2014 17:39 # 0
VseGovnoOdinYaKrut 28.01.2014 12:23 # 0
evg_ever 28.01.2014 12:28 # 0
someone 28.01.2014 21:00 # 0
evg_ever 28.01.2014 21:40 # 0
3.14159265 29.01.2014 17:45 # 0
laMer007 30.01.2014 12:31 # 0
Lure Of Chaos 29.01.2014 16:07 # 0