Производительность функции get()
зависит от двух факторов:
hashCode()
] equals()
Взгляните на документацию HashMap.get()
. Карта содержит пары ключевых значений. Чтобы найти правильное значение для ключа, используется метод equals()
ключа. В HashMap
количество ключей для сравнения уменьшается с помощью хэша. Таким образом, hashCode()
выполняется ровно один раз на ключевом объекте, который вы передаете в качестве параметра.
Реализация HashMap
затем имеет пару возможных ключевых объектов, которые он должен сравнивать (в идеале только один). Это означает, что он должен выполнить equals()
от 1 до n раз.
Если у вас есть тип Set
как тип, оба более сложны, поскольку они перебирают все объекты, содержащиеся в Set
сам. Взгляните на реализацию equals()
и hashCode()
в HashSet
и сравните его с параметрами String
.
Что касается вашего примера: поскольку hashCode()
выполняется ровно один раз имеет меньшее влияние, чем equals()
. В вашем первом блоке вы вычисляете его один раз для HashSet
, а затем get()
делает это еще раз для Integer
(что на самом деле не так сложно). Это не имеет большого значения в части hashCode()
. Первый блок выполняется намного быстрее, потому что equals()
выполняется для Integer
вместо HashSet
, что намного быстрее.
Если вы столкнулись с этим вопросом, пытаясь установить Ruby с помощью Ruby Version Manager (RVM) на Ubuntu 10.04, то на сайте rvm есть инструкции по установке zlib http://rvm.beginrescueend.com/packages/zlib/
Шаги таковы:
rvm pkg install zlib
(или
rvm package install zlib
если вы получите "ERROR: Unrecognized command line argument: 'pkg'" - старые версии rvm использовали глагол 'package' вместо этого)
затем
rvm remove 1.9.1
rvm install 1.9.1
При запуске Rails я бы не рекомендовал использовать Ruby 1.8.8dev. Придерживайтесь 1.8.6, предпочтительно Ruby Enterprise Edition. См. Этот пост в RailsLab , что используют другие люди.
Если вы настаиваете на высоких технологиях, установите Ruby 1.9.1.
Но в обоих случаях создайте его самостоятельно или воспользуйтесь предложением Marans.
Вы можете попробовать загрузить пакет deb для ruby enterprise на сайте phusion . И установить пассажира через пакет. Следуйте инструкциям здесь . Или вы можете попробовать скрипт bash, найденный здесь .
Вы пробовали apt-get установить libzlib-ruby?
Также установите rubygems из rubyforge. Мне не нравится пакет rubygems в Ubuntu.
да, и это тоже не сработало. Получил это из другого источника, это, наконец, сделало это для меня, где другие вещи потерпели неудачу.
wget http://www.blue.sky.or.jp/atelier/ruby/ruby-zlib-0.6.0.tar.gz
tar xvzf ruby-zlib-0.6.0.tar.gz
cd ruby-zlib-0.6.0
ruby extconf.rb && make
sudo make install
Переустановите рубиновые камни из источника
В любом случае, ребята, спасибо.
Проблема в том, что Ruby в Ubuntu не построен на zlib; вы хотите сделать сборку исходного кода для установки Ruby. Вы можете сделать это с помощью apt-get source -b ruby
У меня такая же проблема в CentOS, и я исправляю ее, выполнив следующую команду:
Во-первых, я проверяю наличие zlib и zlib-devel (как многие из предложенных выше).
yum install zlib zlib-devel
Во-вторых, я перекомпилировал и установил исходные коды zlib, поставляемого с ruby.
cd /home/myname/installers/ruby-1.8.7-p174/ext/zlib/
ruby extconf.rb --with-zlib-include=/usr/include --with-zlib-lib=/usr/lib
make
make install
Эти команды, кажется, решают проблему, затем я выполняю gem update --system
, и ошибка с zlib исчезла. Затем я устанавливаю рельсы с рельсами для установки драгоценных камней. Обратите внимание, что я уже устанавливал гем раньше, а после перекомпиляции и установки zlib я не перекомпилирую ни один гем install (на самом деле я не знал, как его удалить, потому что я не нашел для этого скрипта)
работает для меня ... надеюсь на вас.
С уважением.
Просто найдите Ruby Source Package, распакуйте его.
Goto /your-ruby-dir/ext/zlib
ruby extconf.rb
make
sudo make install
Если пакетов не хватает, он скажет вам, в основном это пакеты, связанные с libzlib
С уважением
Saurabh
попробуйте
aptitude install zlib1g-dev
Затем займитесь своими делами.