????5?????????????
????????????????? jOOQ?????????????????????????μ?????????? byte?? short?? int ?? long ?????????????????Java 10????Valhalla????б?????????????ó?????????????????????????????????????滻??
????//?洢?????
????Integer i = 817598;
????……???????д?????
????// ?洢?????
????int i = 817598;
??????????????????????????????
????//???????????????????
????Integer[] i = { 1337?? 424242 };
????……???????д?????
????// ????????????????????
????int[] i = { 1337?? 424242 };
????С??
????????????? N.O.P.E. ????????????ü?????????e??????????????????GC??????????????GC????????????????????????ò????????
?????????????Ч?????????????????????????????????飬???????з????????????????????????????λ?á?
???????LGPLЭ??? trove4j ?????Java?????????????????????????????? int[] ?????????????
????????
????????????????????????????? boolean ?? byte ???????????JDK????????淽???????????????д??
????Boolean a1 = true; // ... syntax sugar for:
????Boolean a2 = Boolean.valueOf(true);
????Byte b1 = (byte) 123; // ... syntax sugar for:
????Byte b2 = Byte.valueOf((byte) 123);
???????????????????????????????????? char??short??int??long??
???????????ù??????????Щ??????????????????????? TheType.valueOf() ??????
??????????????????ù????????????????????????????????????????????????????????????????????????Ц????
???????洢
????????????????????????????????????????????????????????????????????????????????Peter Lawrey?? Ben Cotton?д???????洢?????????????????? OpenJDK??HashMap——??????????????????洢????????ɡ?
????6????????
?????????????Scala??????????????????????????顣???????????ζ???????????????????β??饗tail-recursing???????????????????????????????ò?????????????????????????????????????β??????????顣
???????????????????????????????????????????ü?????????????????????????????????????stack frames????
????С??
???????????????????????? N.O.P.E ????????????????????顣
????7?????entrySet()
???????????????????ü???????????? Map ????????????????????????????????
????for (K key : map.keySet()) {
????V value : map.get(key);
????}
????????????????д????
????for (Entry<K?? V> entry : map.entrySet()) {
????K key = entry.getKey();
????V value = entry.getValue();
????}
????????????? N.O.P.E. ??????????map????????????臨???? O(1) ??????????????????е????????????????????????????????????????ò????map??????????? entrySet() ???????????????????????????????????Map.Entry???????
????С??
???????????????????????Map??????? entrySet() ??????
????8?????EnumSet??EnumMap
???????Щ????£??????????????map???????????????????????map?м????????????????С??????????????? EnumSet ?? EnumMap??????????????????? HashSet ?? HashMap?????????????????????????
????private transient Object[] vals;
????public V put(K key?? V value) {
????// ...
????int index = key.ordinal();
????vals[index] = maskNull(value);
????// ...
????}
??????δ??????????????????????????????????????????map?в???????????????????????????????????????????????????????к??????????????map???????????????????????????????????????£?EnumMap ????? HashMap ??????????????????? EnumMap ????????? HashMap ??? ?λ??bit???????? HashMap ????????????????? hashCode() ?????? equals() ??????
????С??
????Enum ?? EnumMap ???????С??顣?????????????????enum-like????????????????????Щ?????????????????????????? EnumMap ????
????9??????????hasCode()??????equals()????
????????????EnumMap??????£?????????? hashCode() ?? equals() ???????????? hashCode() ????????б???????????????????? equals() ???????????á?
?????????????н??У???????????????????????????jOOQ?? org.jooq.Table ??????????
????????????? hashCode() ?????????£?
????// AbstractTable??????Table?????????
????@Override
????public int hashCode() {
????// [#1938] ??????QueryParts????????????????Ч??hashCode()???
????return name.hashCode();
????}
????name??????????????????????????schema????????????????????????????????????????????? name ???????????????????????????????? hashCode() ???
??????δ?????????????????????? AbstractQueryPart ?? AbstractTable ???????????????????????????????????????????κ????????????????? hashCode() ???????????κλ????????? hashCode() ???????£?
????// AbstractQueryPart?????ó???????????????
????@Override
????public int hashCode() {
????// ?????????????????????
????// ?????????????????????????????????
????return create().renderInlined(this).hashCode();
????}
???????仰????????????SQL????????????rendering workflow??????????????????????????hash????
????equals() ??????????????
// AbstractTable????????????
@Override
public boolean equals(Object that) {
if (this == that) {
return true;
}
// [#2144] ???????????AbstractQueryPart.equals()???????
// ?????????????????????
if (that instanceof AbstractTable) {
if (StringUtils.equals(name??
(((AbstractTable<?>) that).name))) {
return super.equals(that);
}
return false;
}
return false;
}
??????????????????? equals() ????????????N.O.P.E.?У????????
????this == argument
????this“???????????
???????????????????? instanceof ???????????????????????????????????argument == null??????????????????????????????????????ο?10???????Java??????????
???????????????????????????????????ó?????????????jOOQ?? Table.equals() ??????????????????????????????????????????????Σ???????????????????????????????????????????????????
????com.example.generated.Tables.MY_TABLE
????DSL.tableByName(“MY_OTHER_TABLE”)
??????????????????ж?????????????????????this???????????????? false ??????·??????????????????? true????????????????????super?????????ж??????????????????????????£???????????????????????CPU????????
?????Щ???????????????????????
??????jOOQ?У????????????????jOOQ???????????????????Щ????? equals() ????????????????????????????????????????????? ??derived tables?????????????table-valued functions??????????array tables??????????joined tables?????????????pivot tables??????????????common table expressions????????? equals() ?????????????
????10?????????set????????????
???????????????????????????????????????????Java?й??????????????????о??? N.O.P.E. ??????????? O(N3) ?? O(n log n)??????????
??????????????????????ü??????????????????????????????????????????????????imperative????“??/??”?????????????????????????????????????????????????????????????????????“??????????bigger picture??”????????????Щ?????????????SQL??R?????д?????
?????????????
??????SQL?У??????????????????????????????????????Ч?????????????????????????????????constraints????????key??????????indexes??????????????????
????????????????????SQL????????relational calculus???????????????????????У?SQL?????????????????????????????????????Ч?????CBOs (Cost-Based Optimisers) ???????2010?棬??????????SQL????????????????????
????????????????????set????????SQL?????е??????????Sets??collections??bags??lists?????set???????????????????????????????????????д????
????SomeSet INTERSECT SomeOtherSet
??????????
????// Java 8?????д??
????Set result = new HashSet();
????for (Object candidate : someSet)
????if (someOtherSet.contains(candidate))
????result.add(candidate);
????// ???????Java 8???к?????
????someSet.stream()
????.filter(someOtherSet::contains)
????.collect(Collectors.toSet());
??????Щ???????????????Java 8?????????д??????????????????в???????????????????????????????????????????Java 7????????Java 8??Stream collection?????????????????????????????SQL????????????????
????SomeSet INTERSECT SomeOtherSet
?????????????????????????????1000?????????????????о??????????? INTERSECT ??????????????????????set????????? EnumSet ?????????????????????????? Stream.parallel() ?????????????в??? INTERSECT ??????
???????
??????????????У??????????????N.O.P.E.????????????????????????????????jOOQ??????????????????SQL??????????????
???????????????StringBuilder?????ɡ?
????????????????????????????????????????
??????????????????飬?????????????????е??????
??????JDBC?????????????
????????
????jOOQ????“?????????”?????????????JVM????DBMS??????????????????????????API??λ?????????????ζ???κ??????·??jOOQ?б?????????? N x O x P ????????????????????????
??????????????????????N.O.P.E.??????????????????????п??????????????SQL?????????????????????????????????????Java Mission Control ????????????и??飬????????????????????