я добрался, много хороших ответов на этот вопрос - благодарит людей - таким образом, я решил запустить некоторые тесты и фигуру, какой метод является на самом деле самым быстрым. Эти пять методов, которые я протестировал, являются ими:
Здесь, - то, что я сделал...
я представлю результаты сначала и код ниже для тех, кому интересно.
метод ContainsKey был, как ожидалось, самым медленным, таким образом, я дам скорость каждого метода по сравнению со скоростью того метода.
, казалось бы, что только метод MutableInt и метод Находки значительно быстрее в том единственном, которое они дают повышению производительности больше чем 10%. Однако, если поточная обработка является проблемой, AtomicLong мог бы быть более привлекательным, чем другие (я не действительно уверен). Я также выполнил TestForNull с final
переменные, но различие было незначительно.
Примечание, что я не представил использование памяти в различных сценариях. Я был бы рад получить известие от кого-либо, у кого есть хорошее понимание того, как методы MutableInt и Находки, вероятно, влияли бы на использование памяти.
Лично, я нахожу метод MutableInt самым привлекательным, так как он не требует загрузки никаких сторонних классов. Таким образом, если я не обнаруживаю проблемы с ним, это - путь, которым я, скорее всего, пойду.
Вот решающий код из каждого метода.
import java.util.HashMap;
import java.util.Map;
...
Map freq = new HashMap();
...
int count = freq.containsKey(word) ? freq.get(word) : 0;
freq.put(word, count + 1);
import java.util.HashMap;
import java.util.Map;
...
Map freq = new HashMap();
...
Integer count = freq.get(word);
if (count == null) {
freq.put(word, 1);
}
else {
freq.put(word, count + 1);
}
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;
import java.util.concurrent.atomic.AtomicLong;
...
final ConcurrentMap map =
new ConcurrentHashMap();
...
map.putIfAbsent(word, new AtomicLong(0));
map.get(word).incrementAndGet();
import gnu.trove.TObjectIntHashMap;
...
TObjectIntHashMap freq = new TObjectIntHashMap();
...
freq.adjustOrPutValue(word, 1, 1);
import java.util.HashMap;
import java.util.Map;
...
class MutableInt {
int value = 1; // note that we start at 1 since we're counting
public void increment () { ++value; }
public int get () { return value; }
}
...
Map freq = new HashMap();
...
MutableInt count = freq.get(word);
if (count == null) {
freq.put(word, new MutableInt());
}
else {
count.increment();
}
Если вы замените innerHTML, ранее введенные значения будут очищены, чтобы избежать этого, вы можете добавить элементы ввода программно:
var input = document.createElement('input');
input.type = "text";
//...
container.appendChild(input);
Проверьте этот пример.
<script>
function add()
{
document.getElementById("place").innerHTML="<input type='text' value=''>"
}
</script>
<input type="button" value="clickMe" onClick="add();">
<div id="place"></div>
<script>
function add()
{
var inpt = document.getElementById('input_template');
inpt.parentNode.appendChild(inpt.cloneNode(false));
}
</script>
<input type="button" onclick="add();">
set id = input_template в одно из предопределенных текстовых полей
Лучше всего прикрепить событие к onclick
кнопки, что установит видимость div на inline
. Это лучший способ, который я могу себе представить, учитывая гибкость и надежность.
Посмотрите здесь , например, код.
попробуйте это
<html>
<head>
<title>Dynamic Form</title>
<script language="javascript" type="text/javascript" >
function changeIt()
{
createTextbox.innerHTML = createTextbox.innerHTML +"<br><input type='text' name='mytext' >"
}
</script>
</head>
<body>
<form name="form">
<input type="button" value="clickHere" onClick="changeIt()">
<div id="createTextbox"></div>
</form>
</body>
</html>