Czy biblioteka standardowa Java ma jakiekolwiek struktury danych funkcjonalnych, takie jak niezmienne zestawy, listy itp., Z aktualizacją funkcjonalną?Struktury danych funkcjonalnych w języku Java
Odpowiedz
Functional java ma Sets, Lists i bardziej interesujące abstrakcje.
+1 za jedyną poprawną odpowiedź tutaj. –
czysty, to wygląda obiecująco. dzięki! – Claudiu
Wygląda na to, że szukasz Scala. Kompiluje się do .class, więc to wystarczy, prawda?
hmm być może. Chodzi o to, że otrzymaliśmy kod pomocniczy w kursie, który działa funkcjonalnie (tj. Dodanie czegoś do struktury zwraca nową wersję z aktualizacją), ale jest napisany przez zwykłe kopiowanie starej struktury i dodawanie do niej czegoś nowego. to sprawia, że jestem smutny. Zastanawiałem się, czy był łatwy, lepszy sposób, ale myślę, że Java po prostu utrudnia. – Claudiu
Nie potrzebujesz scala. Wystarczy przekazać swoją kolekcję na:
java.util.Collections.unmodifiableCollection(/* Collection<? extends T> c */);
java.util.Collections.unmodifiableSet(Set s);
java.util.Collections.unmodifiableMap(Map m);
java.util.Collections.unmodifiableList(List l);
Właśnie widziałem to z innego SO pytanie:
Google ImmutableSet
od docs:
przeciwieństwie Kolekcje .unmodifiableSet (java.util.Set), , który jest widokiem oddzielnej kolekcji , która wciąż może się zmienić, instancja tej klasy zawiera własne prywatne dane i nigdy nie zmieni się . Ta klasa jest wygodna dla publicznych, publicznych zestawów końcowych ("stałych zestawów "), a także pozwala łatwo wykonać "obronną kopię" zestawu dostarczonego do użytkownika przez osobę dzwoniącą.
edytowane tak, aby zawierało komentarz.
+1: Byłeś bardziej nieprzyjemny =) Są przy okazji także 'unmodifiableList()', 'unmodifiableMap()', oraz więcej metod dostępnych w 'java.util.Collections' API: http://java.sun.com /javase/6/docs/api/java/util/Collections.html – BalusC
Chcę dodać coś do zestawu, zachowując stary zestaw taki sam i zwracając nowy zestaw. Nie sądzę, że nie da się tego zmodyfikowad. – Claudiu
@ Claudiu tak, niemodyfikowalne. Z pewnością tego nie zrobię. –
Cóż, istnieją dwa możliwe podejścia do „zmiana” jest niezmienny kolekcję:
Zrób kopię, która obejmuje „zmiana”
Utwórz nowy, inny obiekt, który składa odniesienia do oryginalnego obiektu i odniesienie do opisu zmiany.
Clojure zajmuje drugie podejście, dzięki czemu staje się dość szybko stworzyć wiele rodzeństwa oryginalnej kolekcji z niewielkimi korektami do siebie, z rozsądnych wymagań pamięciowych. Ale większość kodu Java ma tendencję do wybierania pierwszej opcji.
Za to, co jest warte, Google stworzył garść kolekcji obsługujących programowanie w stylu funkcjonalnym: http://code.google.com/p/google-collections/, ale nie przyjrzałem się im dokładniej.
Spójrz na Google collections.
Łańcuchy i liczby są niezmienne w funkcjonalny sposób, ale większość kolekcji nie jest (niezmienne kolekcje wyrzucają wyjątki przy dodawaniu, usuwaniu itp.). CopyOnWriteArrayList
i CopyOnWriteArraySet
są najbliższe w tym sensie.
Zawsze dobrze jest widzieć kolekcje Google podłączone, ale nie, nie mamy tego. Nie znam żadnej biblioteki Java, która to robi. W Google zaimplementowaliśmy kilka funkcjonalnych struktur listowych i zgadnij co? Nikt ich nie używa.Dlatego w najbliższym czasie nie będą one prawdopodobnie otwarte.
Jeśli jesteś zainteresowany w kolekcjach manipulacja w stylu funkcjonalnym dać wygląd lambdaj
Zapraszamy do obejrzenia projektu pcollections:
PCollections służy jako trwałe i niezmienne analogu zbiorach Java Struktura. Obejmuje to wydajne, bezpieczne dla wątków, ogólne, niezmienne i trwałe stosy, mapy, wektory, zestawy i torby, zgodne z odpowiednikami w kolekcjach Java.
Utrwalone i niezmienne typy danych są coraz częściej wybierane jako prosta, przyjazna dla projektu, przyjazna dla współbieżności i czasem bardziej czaso- i przestrzenna alternatywa dla zmiennych typów danych.
Wiem, że to stare pytanie, ale odrobina poszukiwań mówi mi, że teraz mamy alternatywę dla funkcjonalnej Java.
wygląda interesującą bibliotekę dla programowania deklaratywnego i struktur danych funkcjonalnych w Javie.
Nie porównałem go z funkcjonalną Javą pod względem łatwości użytkowania i wydajności, ale chciałbym uzyskać jakiekolwiek wskazówki na ten temat.
- 1. Struktury danych funkcjonalnych w C++
- 2. Struktury danych Trie - Java
- 3. java: biblioteki dla niezmiennych struktur danych funkcjonalnych stylu
- 4. Struktury danych C#
- 5. Efektywna struktura danych funkcjonalnych dla skończonych biografii
- 6. Serializacja struktury danych Clojure
- 7. Podstawowa struktura danych [] Drzewo danych w języku Java
- 8. Struktury typ danych w php?
- 9. Niestandardowe struktury danych w Pythonie
- 10. Jakie struktury używane w aplikacjach java Desktop
- 11. Struktury danych Delphi
- 12. Konstrukcja struktury danych FSM
- 13. Złożone struktury danych Redis
- 14. Jak analizować negatywnie w języku Java w języku Java
- 15. Konwencje nazewnictwa funkcjonalnych serwerów
- 16. Zrozumienie struktury danych kontekstowych w Antlr4
- 17. Klasa DataSet w języku Java?
- 18. Zmiana struktury Mavena (src/java na src/źródło danych)
- 19. Klon() w języku Java
- 20. Aplikacja tekstowa w języku Java
- 21. Kategoryzacja rekordów w języku Java
- 22. Statystyczna wydajność czysto funkcjonalnych map i zestawów
- 23. Zbieranie danych aplikacji w języku Java (opcjonalnie .Net)
- 24. Prosta klasa kolekcji podobna do bazy danych w języku Java
- 25. Motywacja posiadania zależności funkcjonalnych
- 26. Struktura bazy danych dla struktury danych drzewa
- 27. Transmisja UDP w języku Java
- 28. Porównywanie i uwierzytelnianiu struktury danych
- 29. Różne struktury danych i Złożoność
- 30. Struktury danych drzewa i wykresu w rubi
Chcesz głęboką kopię wszystkich obiektów na liście lub po prostu funkcję, która daje nową listę wskaźników wszystkich tych samych obiektów, co źródło? –
Chcę, aby trwała struktura danych dla zestawu nie zostały zaimplementowane głupio. Na przykład lista niezmienna może zaimplementować dodawanie poprzez skopiowanie wszystkich elementów do nowej listy i dodanie elementu - O (n). Lub może to być połączona lista, dodać element do głowy i zwrócić głowę - O (1) – Claudiu
nie ma ogólnego sposobu na "deep-copy" niczego w Javie. –