Использовать шаблонный модификатор sU получит желаемое соответствие в PHP.
preg_match('/(.*)/sU',$content,$match);
http://dreamluverz.com/developers-tools/regex-match-all-including-newline http://php.net/manual/en/reference.pcre .pattern.modifiers.php
Наборы Java обеспечивают LinkedHashMap из поля, которое является подходящим к созданию кэшей. У Вас, вероятно, нет этого в ME Java, но можно захватить исходный код здесь:
http://kickjava.com/src/java/util/LinkedHashMap.java.htm
, Если Вы не можете просто вставка копии, это, смотря на него должно получить Вас, начал реализовывать один для включения в Ваше мобильное приложение. Основная идея состоит в том, чтобы только включать связанный список через элементы карты. Если Вы держите это в курсе каждый раз, когда кто-то действительно помещает или добирается, можно эффективно отследить заказ доступа и использовать порядок.
документы содержат инструкции для создания Кэша MRU путем переопределения removeEldestEntry(Map.Entry)
метод. Все, что действительно необходимо сделать, делают класс, который расширяется LinkedHashMap
, и переопределите метод как так:
private static final int MAX_ENTRIES = 100;
protected boolean removeEldestEntry(Map.Entry eldest) {
return size() > MAX_ENTRIES;
}
существует также конструктор , который позволяет Вам определить, хотите ли Вы, чтобы класс сохранил вещи в порядке вставкой или использованием, таким образом, у Вас есть немного гибкости для Вашей политики замещения, также:
public LinkedHashMap(int initialCapacity,
float loadFactor,
boolean accessOrder)
Передача верный для порядка использования и ложь для порядка вставки.
ConcurrentLinkedHashMap трудно создать, из-за требований блокировки. LinkedHashMap с блокировкой прост, но не всегда производителен. Параллельная версия попыталась бы уменьшить объем блокировки, или разделением блокировки или идеально созданием операций CAS для создания блокировки очень дешевой. Если операции CAS когда-нибудь становятся дорогими, то так же разделение блока может быть полезным. Поскольку LRU требует записей для каждой операции доступа и использует двунаправленный связанный список, это очень хитро для реализации с чистыми операциями CAS. Я делал попытку его, но я должен продолжить становиться зрелым свой алгоритм. При поиске ConcurrentLinkedHashMap Вы будете видеть мою страницу проекта...
, Если бы ME Java не поддерживает операции CAS, которые я ожидал бы быть верным, тогда основная синхронизация - все, что можно сделать. Это, вероятно, достаточно хорошо с LHM, учитывая, что я только видел, что проблемы производительности в высоком потоке рассчитывают на серверную сторону. Так +1 к ответам выше.
Почему реализация что-то уже реализованное? Используйте Ehcache.
Однако , если сторонние библиотеки полностью вне рассмотрения, я предполагаю, что Вы надеетесь реализовывать структуру данных, которая выглядит примерно так:
HashMap<Object, Object>
, если Вы будете) O(1)
O(1)
Другой подход может быть должен смотреть на раздел 5.6 в Параллелизм Java на практике Brian Goetz: "Создавая эффективный, масштабируемый кэш результата". Смотрите на Memoizer, хотя Вам, вероятно, придется настроить его в Ваших целях.
Как в стороне, то, что я не могу выяснить, - то, почему Java не имеет ConcurrentLinkedHashMap из поля. Эта структура данных была бы очень полезна для создания кэша.