{"id":336997,"date":"2022-08-13T21:00:07","date_gmt":"2022-08-13T21:00:07","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=336997"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=336997","title":{"rendered":"<span>\u0410\u0442\u0430\u043a\u0430 \u043d\u0430 String.hashCode: \u043f\u0440\u043e\u043e\u0431\u0440\u0430\u0437\u044b \u0438 \u043a\u043e\u043b\u043b\u0438\u0437\u0438\u0438<\/span>"},"content":{"rendered":"<div><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-1\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/k0\/ye\/aw\/k0yeawxrewarwhhgxyhoy4fxwfe.png\" data-src=\"https:\/\/habrastorage.org\/webt\/k0\/ye\/aw\/k0yeawxrewarwhhgxyhoy4fxwfe.png\"\/><\/p>\n<p>  \u041a\u0430\u043a-\u0442\u043e \u0440\u0430\u0437 \u043c\u043d\u0435 \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u043b\u043e\u0441\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043d\u0430\u0431\u043e\u0440\u043e\u0432 \u0441\u0442\u0440\u043e\u043a \u0441 \u043a\u043e\u043b\u043b\u0438\u0437\u0438\u0435\u0439 \u043f\u043e \u0445\u0435\u0448-\u043a\u043e\u0434\u0443. \u0422\u043e \u0435\u0441\u0442\u044c \u0442\u0430\u043a\u0438\u0445, \u0447\u0442\u043e\u0431\u044b \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <code>String::hashCode()<\/code> \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u043b\u043e \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u0441\u0442\u0440\u043e\u043a \u0432 \u043d\u0430\u0431\u043e\u0440\u0435.<\/p>\n<p>  \u0411\u043b\u0443\u0436\u0434\u0430\u043d\u0438\u0435 \u043f\u043e \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0443 \u043d\u0435 \u0434\u0430\u043b\u043e \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432, \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u0432 \u0431\u044b\u043b\u043e \u043c\u0430\u043b\u043e \u0438 \u0432\u0441\u0435 \u043e\u043d\u0438 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043e\u0434\u043d\u043e\u043e\u0431\u0440\u0430\u0437\u043d\u044b. \u041f\u043e\u0438\u0441\u043a \u043f\u043e \u0441\u043b\u043e\u0432\u0430\u0440\u044f\u043c \u043f\u043e\u0434\u0430\u0440\u0438\u043b \u0437\u0430\u0431\u0430\u0432\u043d\u0443\u044e \u043f\u0430\u0440\u0443 <code>\"javascript's\".hashCode() == \"monocle\".hashCode()<\/code>, \u043d\u043e \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043f\u043e\u043b\u044c\u0437\u044b \u043d\u0435 \u043f\u0440\u0438\u043d\u0451\u0441. \u041f\u043e\u043b\u043d\u044b\u0439 \u043f\u0435\u0440\u0435\u0431\u043e\u0440 \u043d\u0435 \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u043b\u0441\u044f \u0432 \u0432\u0438\u0434\u0443 \u0441\u043a\u043e\u0440\u043e\u0439 \u0442\u0435\u043f\u043b\u043e\u0432\u043e\u0439 \u0441\u043c\u0435\u0440\u0442\u0438 \u0432\u0441\u0435\u043b\u0435\u043d\u043d\u043e\u0439.<\/p>\n<p>  \u0422\u043e\u0442 \u0441\u0430\u043c\u044b\u0439 \u0441\u043b\u0443\u0447\u0430\u0439, \u043a\u043e\u0433\u0434\u0430 \u043f\u0440\u043e\u0449\u0435 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0432\u0441\u0451 \u0441\u0430\u043c\u043e\u043c\u0443. \u0421\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u0430\u044f \u0445\u0435\u0448-\u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0441\u0442\u0440\u043e\u043a\u0438 \u0432 Java \u0441\u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044f \u043a\u0440\u0438\u043f\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438 \u043d\u0435\u0441\u0442\u043e\u0439\u043a\u043e\u0439, \u0442\u0430\u043a \u0447\u0442\u043e \u0437\u043d\u0430\u043d\u0438\u0439 \u0438\u0437 \u0448\u043a\u043e\u043b\u044c\u043d\u043e\u0433\u043e \u043a\u0443\u0440\u0441\u0430 \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u043a\u0438 \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e.<\/p>\n<p>  <a name=\"habracut\"><\/a>  <\/p>\n<h1>\u041a\u043e\u043b\u043b\u0438\u0437\u0438\u0438<\/h1>\n<p>  \u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u0432\u0437\u0433\u043b\u044f\u043d\u0435\u043c \u043d\u0430 <code>String::hashCode()<\/code> \u0438\u0437 Java 8:<\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">String::hashCode()<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"java\">\/**  * Returns a hash code for this string. The hash code for a  * {@code String} object is computed as  * &lt;blockquote>&lt;pre>  * s[0]*31^(n-1) + s[1]*31^(n-2) + ... + s[n-1]  * &lt;\/pre>&lt;\/blockquote>  * using {@code int} arithmetic, where {@code s[i]} is the  * &lt;i>i&lt;\/i>th character of the string, {@code n} is the length of  * the string, and {@code ^} indicates exponentiation.  * (The hash value of the empty string is zero.)  *  * @return  a hash code value for this object.  *\/ public int hashCode() {     int h = hash;     if (h == 0 &amp;&amp; value.length > 0) {         char val[] = value;          for (int i = 0; i &lt; value.length; i++) {             h = 31 * h + val[i];         }         hash = h;     }     return h; } <\/code><\/pre>\n<p>  <\/div>\n<\/p><\/div>\n<p>  \u0425\u0435\u0448-\u043a\u043e\u0434 \u043d\u0435\u043f\u0443\u0441\u0442\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438 \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u043e \u0444\u043e\u0440\u043c\u0443\u043b\u0435:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/bi\/qx\/i0\/biqxi0ihwhg8_b8dnn7x1vmjlm0.png\" data-src=\"https:\/\/habrastorage.org\/webt\/bi\/qx\/i0\/biqxi0ihwhg8_b8dnn7x1vmjlm0.png\"\/><\/p>\n<p>  \u0412\u0437\u044f\u0442\u0438\u0435 \u043e\u0441\u0442\u0430\u0442\u043a\u0430 \u043e\u0442 \u0434\u0435\u043b\u0435\u043d\u0438\u044f \u0441\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u0438 \u043f\u0435\u0440\u0435\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0438 \u0440\u0430\u0437\u0440\u044f\u0434\u043d\u043e\u0439 \u0441\u0435\u0442\u043a\u0438 \u0442\u0438\u043f\u0430 <code>int<\/code>, \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u0444\u043e\u0440\u043c\u0443\u043b\u044b \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u0430 \u0438\u0437 \u043a\u043e\u0434\u0430 \u0438 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f.<\/p>\n<p>  \u0422\u0430\u043a \u043a\u0430\u043a \u043a\u0430\u0436\u0434\u043e\u0435 \u0441\u043b\u0430\u0433\u0430\u0435\u043c\u043e\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0442 \u043a\u043e\u0434\u0430 \u0441\u0438\u043c\u0432\u043e\u043b\u0430 \u0438 \u0435\u0433\u043e \u0443\u0434\u0430\u043b\u0451\u043d\u043d\u043e\u0441\u0442\u0438 \u043e\u0442 \u043a\u043e\u043d\u0446\u0430 \u0441\u0442\u0440\u043e\u043a\u0438, \u0442\u043e \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0437\u0430\u043c\u0435\u043d\u0438\u0442\u044c \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u0443\u044e \u043f\u043e\u0434\u0441\u0442\u0440\u043e\u043a\u0443 \u043d\u0430 \u0434\u0440\u0443\u0433\u0443\u044e \u0441 \u0442\u0430\u043a\u0438\u043c \u0436\u0435 \u0445\u0435\u0448-\u043a\u043e\u0434\u043e\u043c \u0438 <i>\u0434\u043b\u0438\u043d\u043e\u0439<\/i>, \u0445\u0435\u0448-\u043a\u043e\u0434 \u043c\u043e\u0434\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438 \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u0442\u044c \u0441 \u0445\u0435\u0448-\u043a\u043e\u0434\u043e\u043c \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u0439.<\/p>\n<p>  \u041f\u0440\u0438 \u0437\u0430\u043c\u0435\u043d\u0435 \u043d\u0430\u0447\u0430\u043b\u0430 \u0441\u0442\u0440\u043e\u043a\u0438 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u0435 \u043d\u0430 \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u0435 \u0434\u043b\u0438\u043d \u0438\u0441\u0447\u0435\u0437\u0430\u0435\u0442, \u0442\u0430\u043a \u043a\u0430\u043a \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0435\u0442 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0442\u0430\u043a\u043e\u0435 \u043d\u0435\u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u0435 \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u0432\u043b\u0438\u044f\u0442\u044c.<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/vh\/6g\/vx\/vh6gvxtcfmxdagab26oowa7kn50.png\" data-src=\"https:\/\/habrastorage.org\/webt\/vh\/6g\/vx\/vh6gvxtcfmxdagab26oowa7kn50.png\"\/><\/p>\n<p>  \u041f\u0440\u043e\u0441\u0442\u0435\u0439\u0448\u0438\u0439 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u043a\u043e\u043b\u043b\u0438\u0437\u0438\u0439 \u043e\u0447\u0435\u0432\u0438\u0434\u0435\u043d:  <\/p>\n<ol>\n<li>\u0411\u0435\u0440\u0451\u043c \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u044b\u0435 \u0434\u0432\u0430 \u043f\u043e\u0434\u0440\u044f\u0434 \u0438\u0434\u0443\u0449\u0438\u0445 \u0441\u0438\u043c\u0432\u043e\u043b\u0430 \u0432 \u0441\u0442\u0440\u043e\u043a\u0435, <i>C<sub>i<\/sub><\/i> \u0438 <i>C<sub>i + 1<\/sub><\/i><\/li>\n<li>\u041a\u043e\u0434 \u0441\u0438\u043c\u0432\u043e\u043b\u0430 <i>C<sub>i<\/sub><\/i> \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0435\u043c \u043d\u0430 \u0446\u0435\u043b\u043e\u0435 \u043f\u043e\u043b\u043e\u0436\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u0447\u0438\u0441\u043b\u043e <i>N<\/i><\/li>\n<li>\u041a\u043e\u043c\u043f\u0435\u043d\u0441\u0438\u0440\u0443\u0435\u043c \u0443\u0432\u0435\u043b\u0438\u0447\u0435\u043d\u0438\u0435 \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u0441\u0438\u043c\u0432\u043e\u043b\u0430 \u0443\u043c\u0435\u043d\u044c\u0448\u0435\u043d\u0438\u0435\u043c \u043a\u043e\u0434\u0430 \u0441\u0438\u043c\u0432\u043e\u043b\u0430 <i>C<sub>i + 1<\/sub><\/i> \u043d\u0430 <i>31 * N<\/i>.<\/li>\n<li>\u041f\u043e\u0432\u0442\u043e\u0440\u044f\u0435\u043c \u044d\u0442\u043e \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u0441 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u044b\u043c\u0438 \u043f\u0430\u0440\u0430\u043c\u0438 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432 \u0432 \u0441\u0442\u0440\u043e\u043a\u0435 \u0434\u043e \u0442\u0435\u0445 \u043f\u043e\u0440, \u043f\u043e\u043a\u0430 \u043d\u0430\u043c \u043d\u0435 \u043d\u0430\u0434\u043e\u0435\u0441\u0442.<\/li>\n<\/ol>\n<p>  \u0413\u043b\u0430\u0432\u043d\u043e\u0435 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435: \u043a\u043e\u0434\u044b \u0438\u0437\u043c\u0435\u043d\u0451\u043d\u043d\u044b\u0445 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432 \u0434\u043e\u043b\u0436\u043d\u044b \u043e\u0441\u0442\u0430\u0432\u0430\u0442\u044c\u0441\u044f \u0432 \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0442\u0438\u043f\u0430 <code>char<\/code>, \u043e\u0442 0 (<code>\\u0000<\/code>) \u0434\u043e 65_535 (<code>\\uFFFF<\/code>) \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e.<\/p>\n<p>  \u0418\u043c\u0435\u043d\u043d\u043e \u044d\u0442\u043e\u0442 \u043f\u0440\u0438\u0451\u043c \u0447\u0430\u0449\u0435 \u0432\u0441\u0435\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0432 \u043f\u0440\u0438\u043c\u0435\u0440\u0430\u0445 \u0438\u0437 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0430.<\/p>\n<p>  <a href=\"https:\/\/stackoverflow.com\/a\/1465719\" rel=\"nofollow noopener noreferrer\">https:\/\/stackoverflow.com\/a\/1465719<\/a>:  <\/p>\n<pre><code class=\"java\">\"0-42L\" \"0-43-\" <\/code><\/pre>\n<p>  <a href=\"https:\/\/stackoverflow.com\/a\/1465719\" rel=\"nofollow noopener noreferrer\">https:\/\/stackoverflow.com\/a\/12926279<\/a>:  <\/p>\n<pre><code class=\"java\">\"AaAa\" \"BBBB\" \"AaBB\" \"BBAa\" <\/code><\/pre>\n<p>  \u0415\u0441\u043b\u0438 \u0436\u0435 \u043f\u0430\u0440\u0430 \u0441\u0442\u0440\u043e\u043a \u0441 \u0438\u0434\u0435\u043d\u0442\u0438\u0447\u043d\u044b\u043c\u0438 \u0445\u0435\u0448-\u043a\u043e\u0434\u0430\u043c\u0438 \u043d\u0443\u0436\u043d\u0430 \u043d\u0430\u043c \u0437\u0434\u0435\u0441\u044c \u0438 \u0441\u0435\u0439\u0447\u0430\u0441, \u0430 \u043a\u0430\u043b\u044c\u043a\u0443\u043b\u044f\u0442\u043e\u0440\u0430 \u043f\u043e\u0434 \u0440\u0443\u043a\u043e\u0439 \u043d\u0435\u0442, \u0442\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0432 \u0432 \u043d\u0430\u0447\u0430\u043b\u043e \u043b\u044e\u0431\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438 \u043f\u0440\u0435\u0444\u0438\u043a\u0441 <code>\"\u0425\u0430\u0431\u0440\u0430\u0445\u0430\u0431\u0440 -- \u0442\u043e\u0440\u0442! \u0427\u042b\u041c\u0414\u0428\u0420\u0421 \"<\/code> (\u0431\u0435\u0437 \u043a\u0430\u0432\u044b\u0447\u0435\u043a) \u043c\u044b \u0441 \u043b\u0451\u0433\u043a\u043e\u0441\u0442\u044c\u044e \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u0442\u0430\u043a\u0443\u044e \u043f\u0430\u0440\u0443 \u0432 \u0441\u0432\u043e\u0451 \u0440\u0430\u0441\u043f\u043e\u0440\u044f\u0436\u0435\u043d\u0438\u0435.<\/p>\n<h1>\u041f\u0440\u043e\u043e\u0431\u0440\u0430\u0437\u044b<\/h1>\n<p>  \u042d\u0442\u043e \u0431\u044b\u043b\u043e \u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u043d\u043e \u043d\u0435 \u0442\u0440\u0443\u0434\u043d\u043e. \u041f\u043e\u0439\u0434\u0451\u043c \u0434\u0430\u043b\u044c\u0448\u0435 \u0438 \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u043d\u0430\u0439\u0442\u0438 <i>\u043f\u0435\u0440\u0432\u044b\u0439 \u043f\u0440\u043e\u043e\u0431\u0440\u0430\u0437<\/i>, \u0442\u043e \u0435\u0441\u0442\u044c \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u0442\u0440\u043e\u043a\u0443, \u0438\u043c\u0435\u044e\u0449\u0443\u044e \u043d\u0443\u0436\u043d\u044b\u0439 \u043d\u0430\u043c \u0445\u0435\u0448-\u043a\u043e\u0434.<\/p>\n<p>  \u0410\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0440\u0430\u0441\u0447\u0451\u0442\u0430 \u0445\u0435\u0448-\u043a\u043e\u0434\u0430 \u0441\u0442\u0440\u043e\u043a\u0438 \u043e\u0447\u0435\u043d\u044c \u043f\u043e\u0445\u043e\u0436 \u043d\u0430 \u043f\u0435\u0440\u0435\u0432\u043e\u0434 31-\u0440\u0438\u0447\u043d\u043e\u0433\u043e \u0447\u0438\u0441\u043b\u0430 \u0438\u0437 \u0441\u0442\u0440\u043e\u043a\u043e\u0432\u043e\u0433\u043e \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0432 \u0447\u0438\u0441\u043b\u043e\u0432\u043e\u0435, \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0441\u044f \u044d\u0442\u0438\u043c. \u041d\u0430\u0448\u0438\u043c\u0438 \u00ab\u0446\u0438\u0444\u0440\u0430\u043c\u0438\u00bb \u0431\u0443\u0434\u0443\u0442 31 \u043f\u0435\u0440\u0432\u044b\u0445 \u0441\u0438\u043c\u0432\u043e\u043b\u0430 Unicode, \u043e\u0442 <code>\\u0000<\/code> \u0434\u043e <code>\\u001E<\/code>, \u0430 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u2014 \u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u043d\u043e \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u043c. <\/p>\n<p>  \u0412 \u0440\u0430\u043c\u043a\u0430\u0445 \u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438 \u0431\u0443\u0434\u0435\u043c \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0442\u044c \u0445\u0435\u0448-\u043a\u043e\u0434 \u043a\u0430\u043a 32-\u0431\u0438\u0442\u043d\u043e\u0435 \u0431\u0435\u0437\u0437\u043d\u0430\u043a\u043e\u0432\u043e\u0435 \u0446\u0435\u043b\u043e\u0435, \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0432 <a href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%94%D0%BE%D0%BF%D0%BE%D0%BB%D0%BD%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9_%D0%BA%D0%BE%D0%B4\" rel=\"nofollow noopener noreferrer\">\u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u043c \u043a\u043e\u0434\u0435<\/a> \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043d\u0430\u043c \u0442\u0430\u043a\u0443\u044e \u0432\u043e\u043b\u044c\u043d\u043e\u0441\u0442\u044c.<\/p>\n<pre><code class=\"java\">private static String findFirstPreimage(int hash) {     StringBuilder builder = new StringBuilder();      for(long current = Integer.toUnsignedLong(hash); current != 0; current \/= 31L) {         builder.insert(0, (char) (current % 31L));     }      String result = builder.toString();     assert hash == result.hashCode();     return result; } <\/code><\/pre>\n<p>  \u041a\u0430\u043a \u043d\u0435\u0442\u0440\u0443\u0434\u043d\u043e \u0443\u0431\u0435\u0434\u0438\u0442\u044c\u0441\u044f, \u044d\u0442\u043e\u0442 \u043f\u043e\u0434\u0445\u043e\u0434 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0438 \u0432\u044b\u0434\u0430\u0451\u0442 \u0441\u0442\u0440\u043e\u043a\u0438 \u0441 \u043d\u0443\u0436\u043d\u044b\u043c\u0438 \u043d\u0430\u043c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c\u0438. \u041d\u043e \u0435\u0441\u0442\u044c \u0443 \u043d\u0435\u0433\u043e \u0438 \u0441\u0435\u0440\u044c\u0451\u0437\u043d\u044b\u0439 \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043e\u043a: \u0432\u0441\u0435 \u0441\u0438\u043c\u0432\u043e\u043b\u044b \u0432 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0441\u0442\u0440\u043e\u043a\u0430\u0445 \u2014 \u043d\u0435\u043f\u0435\u0447\u0430\u0442\u043d\u044b\u0435. IntelliJ IDEA, \u043a \u043f\u0440\u0438\u043c\u0435\u0440\u0443, \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u0442\u0430\u043a\u0438\u0435 \u0441\u0442\u0440\u043e\u043a\u0438 \u0438 \u0432 \u043e\u0442\u043b\u0430\u0434\u0447\u0438\u043a\u0435, \u0438 \u0432\u043e \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u043e\u0439 \u043a\u043e\u043d\u0441\u043e\u043b\u0438 \u043d\u0435\u043e\u0442\u043b\u0438\u0447\u0438\u043c\u044b\u043c\u0438 \u043e\u0442 \u0441\u043e\u0441\u0442\u043e\u044f\u0449\u0438\u0445 \u0438\u0437 \u043e\u0434\u043d\u0438\u0445 \u043f\u0440\u043e\u0431\u0435\u043b\u043e\u0432.<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/8g\/du\/qx\/8gduqxu0pavaybss2e0ijlyjmsa.png\" data-src=\"https:\/\/habrastorage.org\/webt\/8g\/du\/qx\/8gduqxu0pavaybss2e0ijlyjmsa.png\"\/><\/p>\n<p>  \u041e\u0442\u043b\u0430\u0436\u0438\u0432\u0430\u0442\u044c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443 \u0441 \u0442\u0430\u043a\u0438\u043c\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c\u0438 \u043d\u0435\u0443\u0434\u043e\u0431\u043d\u043e, \u0430 \u043a\u043e\u0435-\u0433\u0434\u0435 \u0442\u0430\u043a\u0438\u0435 \u0441\u0442\u0440\u043e\u043a\u0438 \u0438 \u0432\u043e\u0432\u0441\u0435 \u043c\u043e\u0433\u0443\u0442 \u043f\u043e\u0441\u0447\u0438\u0442\u0430\u0442\u044c \u043d\u0435\u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u044b\u043c\u0438 \u0432\u0445\u043e\u0434\u043d\u044b\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u043c\u0438.<\/p>\n<p>  \u0412\u043f\u0440\u043e\u0447\u0435\u043c, \u043d\u0438\u0447\u0442\u043e \u043d\u0435 \u043c\u0435\u0448\u0430\u0435\u0442 \u043d\u0430\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043b\u044e\u0431\u044b\u0435 \u0434\u0440\u0443\u0433\u0438\u0435 \u0438\u0434\u0443\u0449\u0438\u0435 \u043f\u043e\u0434\u0440\u044f\u0434 \u0441\u0438\u043c\u0432\u043e\u043b\u044b. \u0414\u0438\u0430\u043f\u0430\u0437\u043e\u043d <code>\u0411<\/code>\u2026 <code>\u042f<\/code> \u043e\u0442\u043b\u0438\u0447\u043d\u043e \u043f\u043e\u0434\u043e\u0439\u0434\u0451\u0442 \u043d\u0430 \u044d\u0442\u0443 \u0440\u043e\u043b\u044c. \u0425\u0435\u0448-\u043a\u043e\u0434\u044b \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u043c\u044b\u0445 \u0441\u0442\u0440\u043e\u043a \u043f\u0440\u0438 \u0442\u0430\u043a\u043e\u0439 \u043f\u043e\u0434\u043c\u0435\u043d\u0435 \u043f\u043e-\u043f\u0440\u0435\u0436\u043d\u0435\u043c\u0443 \u0431\u0443\u0434\u0443\u0442 \u043c\u043e\u043d\u043e\u0442\u043e\u043d\u043d\u043e \u0432\u043e\u0437\u0440\u0430\u0441\u0442\u0430\u0442\u044c \u0441 \u0448\u0430\u0433\u043e\u043c \u0432 \u0435\u0434\u0438\u043d\u0438\u0446\u0443, \u043d\u043e \u043f\u043e\u044f\u0432\u0438\u0442\u0441\u044f \u0438 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0435\u0439.<\/p>\n<p>  \u0425\u0435\u0448-\u043a\u043e\u0434 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438 \u0431\u0443\u0434\u0435\u0442 \u0438\u043c\u0435\u0442\u044c \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435, \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u0437\u0430\u0432\u0438\u0441\u044f\u0449\u0435\u0435 \u043e\u0442 \u0435\u0451 \u0434\u043b\u0438\u043d\u044b \u0438 \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u0441\u0438\u043c\u0432\u043e\u043b\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u043e\u0433\u043e \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u0430, \u043e\u043d \u0432\u044b\u0441\u0442\u0443\u043f\u0430\u0435\u0442 \u0432 \u0440\u043e\u043b\u0438 \u043d\u0443\u043b\u044f. \u041a \u043f\u0440\u0438\u043c\u0435\u0440\u0443, \u0434\u043b\u044f \u0441\u0442\u0440\u043e\u043a\u0438 \u0434\u043b\u0438\u043d\u043e\u0439 \u0432 \u0442\u0440\u0438 \u0441\u0438\u043c\u0432\u043e\u043b\u0430 \u0438 \u0431\u0443\u043a\u0432\u044b <code>\u0411<\/code> \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u0441\u0438\u043c\u0432\u043e\u043b\u0430 \u0430\u043b\u0444\u0430\u0432\u0438\u0442\u0430 \u043e\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0432\u043d\u043e <code>Integer.toUnsignedLong(\"\u0411\u0411\u0411\".hashCode())<\/code>.<\/p>\n<p>  \u042d\u0442\u043e \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c \u0438 \u0434\u0435\u043b\u0430\u0442\u044c \u043d\u0430 \u043d\u0435\u0433\u043e \u043f\u043e\u043f\u0440\u0430\u0432\u043a\u0443. \u041f\u0440\u0438\u0447\u0451\u043c, \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0439 \u043f\u0430\u0440\u044b ( &lt;\u043f\u0435\u0440\u0432\u044b\u0439 \u0441\u0438\u043c\u0432\u043e\u043b \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u0430>, &lt;\u0434\u043b\u0438\u043d\u0430> ) \u044d\u0442\u0430 \u043f\u043e\u043f\u0440\u0430\u0432\u043a\u0430 \u0431\u0443\u0434\u0435\u0442 \u0441\u0432\u043e\u0435\u0439.<\/p>\n<p>  \u0412\u0441\u0435 \u043d\u0430\u0448\u0438 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0445\u043e\u0434\u044f\u0442 \u0432 \u043a\u043e\u043b\u044c\u0446\u0435 \u0432\u044b\u0447\u0435\u0442\u043e\u0432 \u043f\u043e \u043c\u043e\u0434\u0443\u043b\u044e 2<sup>32<\/sup>, \u0430 \u043f\u043e\u0442\u043e\u043c\u0443 \u0443\u0437\u043d\u0430\u0442\u044c \u0432\u0435\u043b\u0438\u0447\u0438\u043d\u0443 \u043f\u043e\u043f\u0440\u0430\u0432\u043a\u0438 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u0440\u043d\u043e. \u0414\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0432\u0437\u044f\u0442\u044c \u0441\u0442\u0440\u043e\u043a\u0443 \u0438\u0437 <code>N<\/code> \u00ab\u043d\u0443\u043b\u0435\u0439\u00bb \u0438 \u0432\u044b\u0447\u0435\u0441\u0442\u044c \u0445\u0435\u0448-\u043a\u043e\u0434 \u044d\u0442\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438 \u0438\u0437 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f 2<sup>32<\/sup>. \u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u043c \u0431\u0443\u0434\u0435\u0442 \u0447\u0438\u0441\u043b\u043e, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043d\u0443\u0436\u043d\u043e \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0445\u0435\u0448-\u043a\u043e\u0434\u0430 \u0434\u043b\u044f \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u0439 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432.<\/p>\n<p>  \u0422\u0430\u043a \u043c\u044b \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u043c \u043a \u0443\u043b\u0443\u0447\u0448\u0435\u043d\u043d\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 \u043d\u0430\u0448\u0435\u0433\u043e \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430. \u0414\u043b\u044f \u0443\u0434\u043e\u0431\u0441\u0442\u0432\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u043c \u0435\u0433\u043e \u0432 \u0432\u0438\u0434\u0435 \u0438\u0442\u0435\u0440\u0430\u0442\u043e\u0440\u0430.<\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">class PreimageGenerator { &#8230; }<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"java\">import java.util.Arrays; import java.util.Iterator; import java.util.NoSuchElementException;  \/**  *  * String hash preimage generator.  *  * @author Maccimo  *  *\/ public class PreimageGenerator implements Iterator&lt;String> {      private static final long MODULO = (1L &lt;&lt; 32);     private static final double LOG_31 = Math.log(31);     private static final char MAX_ALLOWED_CHAR = Character.MAX_VALUE - 30;      private final char alphabetStart;     private final long[] hashCorrectionTable;      private long nextHash;      \/**      * Construct string hash preimage generator.      * This constructor accept ordinary string hash code, as if returned from {@link String#hashCode()}.      *      * @param hash          string hash code      * @param alphabetStart first of 31 consequent symbols, used to generate strings      *      * @throws IllegalArgumentException thrown if {@code alphabetStart} value is too large      *\/     public PreimageGenerator(int hash, char alphabetStart) {         this(Integer.toUnsignedLong(hash), alphabetStart);     }      \/**      * Construct string hash preimage generator.      * This constructor accept unsigned long hash code, can be calculated from ordinary hash code by invoking      * {@link Integer#toUnsignedLong(int)}.      *      * @param hash          string hash code      * @param alphabetStart first of 31 consequent symbols, used to generate strings      *      * @throws IllegalArgumentException thrown if {@code alphabetStart} value is too large or {@code hash} value is negative      *\/     public PreimageGenerator(long hash, char alphabetStart) {         if (alphabetStart > MAX_ALLOWED_CHAR) {             throw new IllegalArgumentException(                 String.format(                     \"Wrong alphabetStart value U+%04X. We need at least 31 symbol to work properly, only %d available.\",                     (int) alphabetStart, Character.MAX_VALUE - alphabetStart + 1                 )             );         }         if (hash &lt; 0) {             throw new IllegalArgumentException(                 String.format(                     \"Wrong has value %,d. Must be non-negative.\",                     hash                 )             );         }         this.nextHash = hash;         this.alphabetStart = alphabetStart;         this.hashCorrectionTable = precomputeHashCorrection(alphabetStart);     }      \/**      * Returns {@code true} if preimage generator has more elements.      * (In other words, returns {@code true} if {@link #next} would      * return an element rather than throwing an exception.)      *      * @return {@code true} if preimage generator has more elements      *\/     @Override     public boolean hasNext() {         return nextHash >= 0;     }      \/**      * Returns the next colliding string for given hash code.      *      * @return the next colliding string      * @throws NoSuchElementException if the iteration has no more elements      *\/     @Override     public String next() {         if (nextHash &lt; 0) {             throw new NoSuchElementException();         }          int length;         int correctedLength = 0;         long hashCorrection;         do {             length = correctedLength;             hashCorrection = hashCorrectionTable[length];             correctedLength = calculateLength(nextHash + hashCorrection);         } while (correctedLength > length);          String result = generate(nextHash + hashCorrection, length);          nextHash = nextHash + MODULO;          return result;     }      private String generate(long hash, int length) {         assert hash >= 0 : hash;         char[] buffer = new char[length];         Arrays.fill(buffer, alphabetStart);          int i = length - 1;         for(long current = hash; current != 0; current \/= 31L) {             buffer[i--] =  (char) (alphabetStart + current % 31L);         }          return String.valueOf(buffer);     }      private static long[] precomputeHashCorrection(char alphabetStart) {         int maxLength = calculateLength(Long.MAX_VALUE);         long[] result = new long[maxLength + 1];         int correction = 0;         for (int i = 0; i &lt; result.length; i++) {             result[i] = (MODULO - Integer.toUnsignedLong(correction)) % MODULO;             correction = correction * 31 + alphabetStart;         }         return result;     }      private static int calculateLength(long number) {         return number == 0 ? 0 : 1 + (int) log31(number);     }      private static double log31(long number) {         return (Math.log(number) \/ LOG_31);     } } <\/code><\/pre>\n<p>  <\/div>\n<\/p><\/div>\n<p>  \u041f\u0440\u043e\u0441\u0442\u0435\u0439\u0448\u0438\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0431\u0443\u0434\u0435\u0442 \u043a\u043e\u0434, \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u044e\u0449\u0438\u0439 16 \u0441\u0442\u0440\u043e\u043a \u0441 \u0442\u0430\u043a\u0438\u043c \u0436\u0435 \u0445\u0435\u0448-\u043a\u043e\u0434\u043e\u043c, \u0447\u0442\u043e \u0438 \u0443 \u0441\u0442\u0440\u043e\u043a\u0438 <code>\"Java\"<\/code>.<\/p>\n<pre><code class=\"java\">public class PreimageGeneratorDemo {      private static final int COUNT = 16;     private static final char ALPHABET_START = '\u0411';     private static final String ORIGINAL_STRING = \"Java\";      public static void main(String... args) {         PreimageGenerator generator = new PreimageGenerator(             ORIGINAL_STRING.hashCode(), ALPHABET_START         );          boolean allHashesValid = true;         for (int i = 0; i &lt; COUNT; i++) {             String preimage = generator.next();             allHashesValid &amp;= (ORIGINAL_STRING.hashCode() == preimage.hashCode());             System.out.printf(\"\\t\\\"%s\\\"%n\", preimage);         }          System.out.println();         if (allHashesValid) {             System.out.println(\"All generated strings are valid.\");         } else {             System.out.println(\"Some of generated strings are invalid!\");         }          System.out.println();         System.out.println(\"Done.\");     } } <\/code><\/pre>\n<p>  \u0425\u0435\u0448-\u043a\u043e\u0434, \u0434\u043b\u044f \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u043f\u0435\u0440\u0432\u044b\u0439 \u043f\u0440\u043e\u043e\u0431\u0440\u0430\u0437 \u0438 \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u044b\u0439 \u0441\u0438\u043c\u0432\u043e\u043b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u043e\u0433\u043e \u0430\u043b\u0444\u0430\u0432\u0438\u0442\u0430 \u043f\u0435\u0440\u0435\u0434\u0430\u044e\u0442\u0441\u044f \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c\u0438 \u0432 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440 \u043a\u043b\u0430\u0441\u0441\u0430 <code>PreimageGenerator<\/code>. \u041a\u0430\u0436\u0434\u044b\u0439 \u0432\u044b\u0437\u043e\u0432 \u043c\u0435\u0442\u043e\u0434\u0430 <code>next()<\/code> \u0431\u0443\u0434\u0435\u0442 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0442\u044c \u0432\u0441\u0451 \u043d\u043e\u0432\u044b\u0435 \u0438 \u043d\u043e\u0432\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u043f\u0440\u043e\u043e\u0431\u0440\u0430\u0437\u0430 \u0434\u043b\u044f \u0437\u0430\u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0445\u0435\u0448-\u043a\u043e\u0434\u0430.<\/p>\n<p>  \u0422\u0430\u043a \u0431\u0443\u0434\u0435\u0442 \u0434\u043b\u0438\u0442\u044c\u0441\u044f \u0434\u043e \u0442\u0435\u0445 \u043f\u043e\u0440, \u043f\u043e\u043a\u0430 \u043c\u0435\u0442\u043e\u0434 <code>hasNext()<\/code> \u043d\u0435 \u0432\u0435\u0440\u043d\u0451\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <code>false<\/code>. \u0412\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440\u0430 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043e \u0442\u0438\u043f\u043e\u043c <code>long<\/code>, \u0447\u0442\u043e \u0434\u0430\u0451\u0442 \u043d\u0430\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0434\u0432\u0430 \u043c\u0438\u043b\u043b\u0438\u0430\u0440\u0434\u0430 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439.<\/p>\n<p>  Two billion strings ought to be enough for anybody.<\/p>\n<h1>\u0414\u0435\u0441\u0435\u0440\u0442<\/h1>\n<p>  \u041d\u0430 \u0434\u0435\u0441\u0435\u0440\u0442 \u043d\u0430\u043c \u0434\u043e\u0441\u0442\u0430\u043b\u0430\u0441\u044c \u0444\u0440\u0430\u0437\u0430 <code>\"\u0425\u0430\u0431\u0440\u0430\u0445\u0430\u0431\u0440 -- \u0442\u043e\u0440\u0442! \"<\/code> (\u0431\u0435\u0437 \u043a\u0430\u0432\u044b\u0447\u0435\u043a). \u041c\u044b \u0445\u043e\u0442\u0438\u043c \u043d\u0430\u0443\u0447\u0438\u0442\u044c\u0441\u044f \u0432\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c \u0435\u0451 \u0432 \u043d\u0430\u0447\u0430\u043b\u043e \u043b\u044e\u0431\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438 \u0438 \u0432 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u044c \u0441\u0442\u0440\u043e\u043a\u0443 \u0441 \u0442\u0435\u043c \u0436\u0435 \u0445\u0435\u0448-\u043a\u043e\u0434\u043e\u043c, \u0447\u0442\u043e \u0431\u044b\u043b \u0443 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u0430. \u041a\u0430\u043a \u043c\u044b \u0443\u0436\u0435 \u0432\u044b\u044f\u0441\u043d\u0438\u043b\u0438 \u0432 \u043f\u0435\u0440\u0432\u043e\u0439 \u0433\u043b\u0430\u0432\u0435, \u0434\u043b\u044f \u0442\u0430\u043a\u043e\u0433\u043e \u0444\u043e\u043a\u0443\u0441\u0430 \u0445\u0435\u0448-\u043a\u043e\u0434 \u0432\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438 \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0440\u0430\u0432\u0435\u043d \u043d\u0443\u043b\u044e.<\/p>\n<p>  \u0423 \u043d\u0430\u0448\u0435\u0439 \u0444\u0440\u0430\u0437\u044b \u043e\u043d \u043e\u0442\u043b\u0438\u0447\u0435\u043d \u043e\u0442 \u043d\u0443\u043b\u044f \u0438 \u0437\u043d\u0430\u0447\u0438\u0442 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u044c \u0441\u0442\u0440\u043e\u043a\u0443, \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0438\u0437\u043c\u0435\u043d\u0438\u0442 \u0435\u0433\u043e \u0432 \u043d\u0443\u0436\u043d\u0443\u044e \u0441\u0442\u043e\u0440\u043e\u043d\u0443.<\/p>\n<p>  \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0440\u0435\u0448\u0438\u043c \u0443\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/q-\/_c\/1u\/q-_c1udvg41etoass9xn7u0qn_0.png\" data-src=\"https:\/\/habrastorage.org\/webt\/q-\/_c\/1u\/q-_c1udvg41etoass9xn7u0qn_0.png\"\/><\/p>\n<p>  \u0412\u0441\u043f\u043e\u043c\u043d\u0438\u043c \u0444\u043e\u0440\u043c\u0443\u043b\u0443 \u0438\u0437 \u043f\u0435\u0440\u0432\u043e\u0439 \u0433\u043b\u0430\u0432\u044b \u0438 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u0443\u0435\u043c \u0443\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u0432 \u044d\u043a\u0432\u0438\u0432\u0430\u043b\u0435\u043d\u0442\u043d\u043e\u0435<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/nv\/gc\/gh\/nvgcghfxrymu3v-oyfzp4ku0nj8.png\" data-src=\"https:\/\/habrastorage.org\/webt\/nv\/gc\/gh\/nvgcghfxrymu3v-oyfzp4ku0nj8.png\"\/><\/p>\n<p>  \u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <code>P.hashCode<\/code> \u043d\u0430\u043c \u0443\u0436\u0435 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e, \u044d\u0442\u043e \u0445\u0435\u0448-\u043a\u043e\u0434 \u043d\u0430\u0448\u0435\u0439 \u0444\u0440\u0430\u0437\u044b, \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043a\u0430\u043a 32-\u0431\u0438\u0442\u043d\u043e\u0435 \u0431\u0435\u0437\u0437\u043d\u0430\u043a\u043e\u0432\u043e\u0435 \u0446\u0435\u043b\u043e\u0435. \u041f\u043e\u0434\u0441\u0442\u0430\u0432\u0438\u0432 \u0435\u0433\u043e \u0432 \u0444\u043e\u0440\u043c\u0443\u043b\u0443 \u043c\u044b \u0441\u043c\u043e\u0436\u0435\u043c \u043d\u0430\u0439\u0442\u0438 \u043d\u0443\u0436\u043d\u044b\u0439 \u043d\u0430\u043c \u0445\u0435\u0448-\u043a\u043e\u0434 \u0441\u0443\u0444\u0444\u0438\u043a\u0441\u0430. \u0413\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0443\u044e \u0441\u0442\u0440\u043e\u043a\u0443 \u043f\u043e \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e\u043c\u0443 \u0445\u0435\u0448-\u043a\u043e\u0434\u0443 \u043c\u044b \u043d\u0430\u0443\u0447\u0438\u043b\u0438\u0441\u044c \u0432\u043e \u0432\u0442\u043e\u0440\u043e\u0439 \u0433\u043b\u0430\u0432\u0435.<\/p>\n<p>  \u0414\u043b\u044f \u0444\u0440\u0430\u0437\u044b <code>\"\u0425\u0430\u0431\u0440\u0430\u0445\u0430\u0431\u0440 -- \u0442\u043e\u0440\u0442! \"<\/code> \u043e\u043d \u0440\u0430\u0432\u0435\u043d <code>-1_287_461_747<\/code> \u0438\u043b\u0438 <code>3_007_505_549L<\/code>, \u0435\u0441\u043b\u0438 \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u043a\u0430\u043a \u0431\u0435\u0437\u0437\u043d\u0430\u043a\u043e\u0432\u043e\u0435 \u0446\u0435\u043b\u043e\u0435. \u0414\u043b\u044f \u0443\u043f\u0440\u043e\u0449\u0435\u043d\u0438\u044f \u0440\u0430\u0441\u0447\u0451\u0442\u043e\u0432 \u0437\u0430\u0444\u0438\u043a\u0441\u0438\u0440\u0443\u0435\u043c \u0434\u043b\u0438\u043d\u0443 \u0441\u0443\u0444\u0444\u0438\u043a\u0441\u0430 7 \u0441\u0438\u043c\u0432\u043e\u043b\u0430\u043c\u0438.<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/y0\/m9\/ac\/y0m9acqthqy2ohv8grw8x9jbgg8.png\" data-src=\"https:\/\/habrastorage.org\/webt\/y0\/m9\/ac\/y0m9acqthqy2ohv8grw8x9jbgg8.png\"\/><\/p>\n<p>  \u041f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u0443\u044e \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u0443 <code>3_196_431_661L<\/code> \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0434\u043b\u044f \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 <code>PreimageGenerator<\/code> \u0438 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u043d\u0430\u0431\u043e\u0440 \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0445 \u0441\u0443\u0444\u0444\u0438\u043a\u0441\u043e\u0432.<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/fh\/pe\/6t\/fhpe6twg_so7g3ow_873th5hx8w.png\" data-src=\"https:\/\/habrastorage.org\/webt\/fh\/pe\/6t\/fhpe6twg_so7g3ow_873th5hx8w.png\"\/><\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u041e\u043d\u0438 \u0436\u0435, \u0432 \u0432\u0438\u0434\u0435 \u0442\u0435\u043a\u0441\u0442\u0430<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"java\">    \"\u0425\u0430\u0431\u0440\u0430\u0445\u0430\u0431\u0440 -- \u0442\u043e\u0440\u0442! \u0418\u0413\u0423\u0411\u0427\u041f\u042e\"     \"\u0425\u0430\u0431\u0440\u0430\u0445\u0430\u0431\u0440 -- \u0442\u043e\u0440\u0442! \u041c\u042d\u0423\u0425\u0426\u0419\u0413\"     \"\u0425\u0430\u0431\u0440\u0430\u0445\u0430\u0431\u0440 -- \u0442\u043e\u0440\u0442! \u0421\u0428\u0424\u041a\u0425\u0412\u0417\"     \"\u0425\u0430\u0431\u0440\u0430\u0445\u0430\u0431\u0440 -- \u0442\u043e\u0440\u0442! \u0426\u0423\u0424\u042e\u0423\u042a\u041b\"     \"\u0425\u0430\u0431\u0440\u0430\u0445\u0430\u0431\u0440 -- \u0442\u043e\u0440\u0442! \u042b\u041e\u0425\u0423\u0422\u0423\u041f\" <\/code><\/pre>\n<p>  <\/div>\n<\/p><\/div>\n<p>  \u041e\u0441\u0442\u0430\u043b\u0441\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u0448\u0442\u0440\u0438\u0445: \u043d\u0430\u0448\u0430 \u0441\u0442\u0440\u043e\u043a\u0430-\u043f\u0440\u0435\u0444\u0438\u043a\u0441 \u043d\u0435\u044d\u0441\u0442\u0435\u0442\u0438\u0447\u043d\u043e \u0441\u043b\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0441 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u043c \u0442\u0435\u043a\u0441\u0442\u043e\u043c, \u043e\u0431\u043e\u0441\u043e\u0431\u0438\u043c \u0435\u0451 \u043f\u0440\u043e\u0431\u0435\u043b\u043e\u043c \u0432 \u043a\u043e\u043d\u0446\u0435.<\/p>\n<p>  \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0432 \u043f\u0440\u0430\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u0443\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044f \u0432\u043c\u0435\u0441\u0442\u043e \u043d\u0443\u043b\u044f \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0445\u0435\u0448-\u043a\u043e\u0434\u0430 \u0441\u0442\u0440\u043e\u043a\u0438 \u0434\u043e \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u0444\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u0439 \u043f\u0440\u043e\u0431\u0435\u043b \u043e\u0431\u043d\u0443\u043b\u0438\u0442 \u0435\u0433\u043e. \u0427\u0442\u043e\u0431\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043d\u0443\u0436\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0432\u044b\u0447\u0442\u0435\u043c \u0438\u0437 \u043d\u0443\u043b\u044f \u043a\u043e\u0434 \u0441\u0438\u043c\u0432\u043e\u043b\u0430 \u043f\u0440\u043e\u0431\u0435\u043b\u0430, \u043e\u043d \u0440\u0430\u0432\u0435\u043d 32, \u0438 \u0440\u0430\u0437\u0434\u0435\u043b\u0438\u043c \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043d\u0430 31.<\/p>\n<p>  \u0422\u0430\u043a \u043a\u0430\u043a \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0446\u0435\u043b\u043e\u0435 \u043d\u0435\u043e\u0442\u0440\u0438\u0446\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435, \u0442\u043e \u0432\u044b\u0447\u0438\u0442\u0430\u043d\u0438\u0435 32 \u0438\u0437 \u043d\u0443\u043b\u044f \u043c\u044b \u0437\u0430\u043c\u0435\u043d\u0438\u043c \u043d\u0430 \u0441\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0441 \u0435\u0433\u043e <a href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%9F%D1%80%D0%BE%D1%82%D0%B8%D0%B2%D0%BE%D0%BF%D0%BE%D0%BB%D0%BE%D0%B6%D0%BD%D0%BE%D0%B5_%D1%87%D0%B8%D1%81%D0%BB%D0%BE\" rel=\"nofollow noopener noreferrer\">\u043f\u0440\u043e\u0442\u0438\u0432\u043e\u043f\u043e\u043b\u043e\u0436\u043d\u044b\u043c \u0447\u0438\u0441\u043b\u043e\u043c<\/a>, \u0440\u0430\u0432\u043d\u044b\u043c 2<sup>32<\/sup> \u2014 32, \u0430 \u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u043e\u0439 \u0440\u0430\u0437\u043d\u0438\u0446\u044b \u043d\u0430 <code>31<\/code> \u2014 \u0443\u043c\u043d\u043e\u0436\u0435\u043d\u0438\u0435\u043c \u043d\u0430 <a href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%9E%D0%B1%D1%80%D0%B0%D1%82%D0%BD%D0%BE%D0%B5_%D1%87%D0%B8%D1%81%D0%BB%D0%BE\" rel=\"nofollow noopener noreferrer\">\u043e\u0431\u0440\u0430\u0442\u043d\u043e\u0435 \u0435\u043c\u0443 \u0447\u0438\u0441\u043b\u043e<\/a> \u2014 <code>3_186_588_639L<\/code>.<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/xw\/db\/64\/xwdb64zy4qqukq-b4zahnbwspps.png\" data-src=\"https:\/\/habrastorage.org\/webt\/xw\/db\/64\/xwdb64zy4qqukq-b4zahnbwspps.png\"\/><\/p>\n<p>  \u041a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u0443 <code>9_843_021L<\/code> \u0432\u0441\u0451 \u0442\u0430\u043a \u0436\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0434\u043b\u044f \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 <code>PreimageGenerator<\/code> \u0438 \u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0447\u0442\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f.<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/ab\/dq\/e2\/abdqe2kmebwxo13bvxpitkh27fa.png\" data-src=\"https:\/\/habrastorage.org\/webt\/ab\/dq\/e2\/abdqe2kmebwxo13bvxpitkh27fa.png\"\/><\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u041e\u043d\u0438 \u0436\u0435, \u0432 \u0432\u0438\u0434\u0435 \u0442\u0435\u043a\u0441\u0442\u0430<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"java\">    \"\u0425\u0430\u0431\u0440\u0430\u0445\u0430\u0431\u0440 -- \u0442\u043e\u0440\u0442! \u0414\u0420\u0419\u0421\u042d\u041d\u0411 \"     \"\u0425\u0430\u0431\u0440\u0430\u0445\u0430\u0431\u0440 -- \u0442\u043e\u0440\u0442! \u0419\u041b\u041a\u0416\u042c\u0416\u0415 \"     \"\u0425\u0430\u0431\u0440\u0430\u0445\u0430\u0431\u0440 -- \u0442\u043e\u0440\u0442! \u041e\u0416\u041a\u042a\u042a\u042e\u0419 \"     \"\u0425\u0430\u0431\u0440\u0430\u0445\u0430\u0431\u0440 -- \u0442\u043e\u0440\u0442! \u0423\u0411\u041b\u041f\u0429\u0427\u041d \"     \"\u0425\u0430\u0431\u0440\u0430\u0445\u0430\u0431\u0440 -- \u0442\u043e\u0440\u0442! \u0427\u042b\u041c\u0414\u0428\u0420\u0421 \"     \"\u0425\u0430\u0431\u0440\u0430\u0445\u0430\u0431\u0440 -- \u0442\u043e\u0440\u0442! \u042c\u0426\u041c\u0428\u0427\u0419\u0425 \" <\/code><\/pre>\n<p>  <\/div>\n<\/p><\/div>\n<h1>\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/h1>\n<p>  \u0417\u0430\u0434\u0430\u0447\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430 \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0438 \u0442\u0435\u043f\u0435\u0440\u044c \u0432 \u043d\u0430\u0448\u0435\u043c \u0440\u0430\u0441\u043f\u043e\u0440\u044f\u0436\u0435\u043d\u0438\u0438 \u0431\u0435\u0441\u043a\u043e\u043d\u0435\u0447\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0441\u0442\u0440\u043e\u043a \u0441 \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u044e\u0449\u0438\u043c\u0438 \u0445\u0435\u0448-\u043a\u043e\u0434\u0430\u043c\u0438.<\/div>\n<\/div>\n<\/div>\n<div class=\"v-portal\" style=\"display:none;\"><\/div>\n<\/div>\n<p> <!----> <!----><br \/> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/post\/674816\/\"> https:\/\/habr.com\/ru\/post\/674816\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-1\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/k0\/ye\/aw\/k0yeawxrewarwhhgxyhoy4fxwfe.png\" data-src=\"https:\/\/habrastorage.org\/webt\/k0\/ye\/aw\/k0yeawxrewarwhhgxyhoy4fxwfe.png\"\/><\/p>\n<p>  \u041a\u0430\u043a-\u0442\u043e \u0440\u0430\u0437 \u043c\u043d\u0435 \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u043b\u043e\u0441\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043d\u0430\u0431\u043e\u0440\u043e\u0432 \u0441\u0442\u0440\u043e\u043a \u0441 \u043a\u043e\u043b\u043b\u0438\u0437\u0438\u0435\u0439 \u043f\u043e \u0445\u0435\u0448-\u043a\u043e\u0434\u0443. \u0422\u043e \u0435\u0441\u0442\u044c \u0442\u0430\u043a\u0438\u0445, \u0447\u0442\u043e\u0431\u044b \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <code>String::hashCode()<\/code> \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u043b\u043e \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u0441\u0442\u0440\u043e\u043a \u0432 \u043d\u0430\u0431\u043e\u0440\u0435.<\/p>\n<p>  \u0411\u043b\u0443\u0436\u0434\u0430\u043d\u0438\u0435 \u043f\u043e \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0443 \u043d\u0435 \u0434\u0430\u043b\u043e \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432, \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u0432 \u0431\u044b\u043b\u043e \u043c\u0430\u043b\u043e \u0438 \u0432\u0441\u0435 \u043e\u043d\u0438 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043e\u0434\u043d\u043e\u043e\u0431\u0440\u0430\u0437\u043d\u044b. \u041f\u043e\u0438\u0441\u043a \u043f\u043e \u0441\u043b\u043e\u0432\u0430\u0440\u044f\u043c \u043f\u043e\u0434\u0430\u0440\u0438\u043b \u0437\u0430\u0431\u0430\u0432\u043d\u0443\u044e \u043f\u0430\u0440\u0443 <code>\"javascript's\".hashCode() == \"monocle\".hashCode()<\/code>, \u043d\u043e \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043f\u043e\u043b\u044c\u0437\u044b \u043d\u0435 \u043f\u0440\u0438\u043d\u0451\u0441. \u041f\u043e\u043b\u043d\u044b\u0439 \u043f\u0435\u0440\u0435\u0431\u043e\u0440 \u043d\u0435 \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u043b\u0441\u044f \u0432 \u0432\u0438\u0434\u0443 \u0441\u043a\u043e\u0440\u043e\u0439 \u0442\u0435\u043f\u043b\u043e\u0432\u043e\u0439 \u0441\u043c\u0435\u0440\u0442\u0438 \u0432\u0441\u0435\u043b\u0435\u043d\u043d\u043e\u0439.<\/p>\n<p>  \u0422\u043e\u0442 \u0441\u0430\u043c\u044b\u0439 \u0441\u043b\u0443\u0447\u0430\u0439, \u043a\u043e\u0433\u0434\u0430 \u043f\u0440\u043e\u0449\u0435 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0432\u0441\u0451 \u0441\u0430\u043c\u043e\u043c\u0443. \u0421\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u0430\u044f \u0445\u0435\u0448-\u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0441\u0442\u0440\u043e\u043a\u0438 \u0432 Java \u0441\u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044f \u043a\u0440\u0438\u043f\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438 \u043d\u0435\u0441\u0442\u043e\u0439\u043a\u043e\u0439, \u0442\u0430\u043a \u0447\u0442\u043e \u0437\u043d\u0430\u043d\u0438\u0439 \u0438\u0437 \u0448\u043a\u043e\u043b\u044c\u043d\u043e\u0433\u043e \u043a\u0443\u0440\u0441\u0430 \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u043a\u0438 \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-336997","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/336997","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=336997"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/336997\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=336997"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=336997"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=336997"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}