10 komentáře “Google collections – ušetřete si práci s kolekcemi

  1. ok, pak se omlouvám, mám zjevně solidní mezery ve vzdělání. Má někdo nějakou doporučenou literaturu ohledně typové inference?

  2. > nenapadá mne jak to udělat jinak než přes reflexi

    Typová inference.

    Map<Integer, StringBuffer> bufferIndex = Maps.newHashMap();

    je úplně totéž, jako

    Map<Integer, StringBuffer> bufferIndex = Maps.<Integer, StringBuffer>newHashMap();

    akorát že typové parametry doplní překladač sám. U konstruktorů to bohužel takhle nefunguje (v Javě 7 na to nejspíš bude nějaká obezlička, kterou navrhuje Neal Gafter).

  3. TO: alfonz

    Na odkazovaném linku jsem ani nenašel jak knihovnu pořádně stáhnout. Možná se to spíše konvertovalo na projekt: http://larvalabs.com/collections/

    Každopádně, co se týká výkonnosti, dovolil bych si nesouhlasit … schválně, tady je kód pro vytvoření generické mapy:

    public static <K, V> HashMap<K, V> newHashMap() {
    return new HashMap<K, V>();
    }

    Zde žádnou reflection nevidím. Ani v multimapách a dalších věcech, když jsem procházel kódem, jsem na žádnou reflexi nenarazil. Na jedinou alchymii jsem narazil v ObjectArrays a to:

    public static <T> T[] newArray(Class<T> type, int length) {
    return (T[]) Array.newInstance(type, length);
    }

    kde pod Array.newInstance se skrývá:

    private static native Object newArray(Class componentType, int length)
    throws NegativeArraySizeException;

    Což je už ale standardní Java používající nativní implementaci. Takže s druhou částí tvého tvrzení se mi nechce souhlasit.

  4. „Problém s Apache Commons je ten, že nejsou updatované pro generiky.“ … http://collections15.sourceforge.net/

    jinak některé věci jsou zajímavé, to rozhodně ano, ale zdá se mi že za některými je skryt příliš pomalý kód. Usnadnění vytváření kolekcí je super, ale nenapadá mne jak to udělat jinak než přes reflexi a to je prostě o dost pomalejší.

  5. No Google Collections se mi zdá, že na Apache Commons hodně ideově navazuje. Problém s Apache Commons je ten, že nejsou updatované pro generiky. Výše uvedený zápis kódu, který jsi poslal mi hlásí. „Unchecked assignment“ – což je kompilační warning, který s Google collections nemám. Navíc právě to druhé co jsi napsal se dá elegantně řešit multimapou.

  6. A co Appache commons?

    To jsem netusil, ze prekladac se kouka na navratovy typ pri volani
    To je sice elegantni, zajimave, da se to vyuzit i natlouct si nos.

    public static HashMap newHashMap() {
    return new HashMap();
    }

    Dokonce zbastil i

    Map<String, java.util.List> mSL = newHashMap();
    java.util.List list1 = new java.util.ArrayList();
    list1.add( „ahoj“);
    list1.add( „nazdar“);
    mSL.put( „prvni“, list1 ) ;