Junior — Middle
Կան դեպքեր, երբ hashCode-ը վերադարձնում էր բացասական արժեք: Ինչպե՞ս եք դրանով վարվել։
sobes.tech AI
Պատասխան AI-ից
Այո, Java- ի hashCode() մեթոդը կարող է վերադարձնել բացասական արժեքներ, քանի որ այն վերադարձնում է int, որը կարող է լինել ինչպես դրական, այնպես էլ բացասական:
Եթե անհրաժեշտ է օգտագործել hashCode-ը ինդեքսավորման համար զանգվածներում կամ այլ տվյալների կառուցվածքներում, որտեղ ինդեքսը պետք է լինի բացասական չլինի, սովորաբար կիրառվում է հետևյալ տեխնիկան՝
int hash = obj.hashCode();
int positiveHash = hash & 0x7fffffff; // զրոյացնում է նշանը, դարձնելով թիվը դրական
int index = positiveHash % array.length;
Կամ կարող եք օգտագործել Math.abs(), բայց զգուշությամբ, քանի որ Math.abs(Integer.MIN_VALUE) վերադարձնում է բացասական թիվ:
int hash = obj.hashCode();
int positiveHash = (hash == Integer.MIN_VALUE) ? 0 : Math.abs(hash);
int index = positiveHash % array.length;
Այսպիսով, բացասական ինդեքսներից խուսափելու համար, անհրաժեշտ է explicitly փոխարկել hashCode-ը դեպի ոչ-բացասական արժեք։