diff --git a/src/main/java/com/reandroid/arsc/group/EntryGroup.java b/src/main/java/com/reandroid/arsc/group/EntryGroup.java index 833a3f7..872fc95 100755 --- a/src/main/java/com/reandroid/arsc/group/EntryGroup.java +++ b/src/main/java/com/reandroid/arsc/group/EntryGroup.java @@ -29,7 +29,7 @@ import java.util.Iterator; public class EntryGroup extends ItemGroup { private final int resourceId; public EntryGroup(int resId) { - super(create(), String.format("0x%08x", resId)); + super(ARRAY_CREATOR, String.valueOf(resId)); this.resourceId=resId; } public int getResourceId(){ @@ -220,6 +220,10 @@ public class EntryGroup extends ItemGroup { return packageBlock.getSpecStringPool(); } @Override + public int hashCode(){ + return resourceId; + } + @Override public String toString(){ Entry entry =pickOne(); if(entry ==null){ @@ -227,18 +231,17 @@ public class EntryGroup extends ItemGroup { } return super.toString()+"{"+ entry.toString()+"}"; } - private static BlockArrayCreator create(){ - return new BlockArrayCreator(){ - @Override - public Entry newInstance() { - return new Entry(); - } - @Override - public Entry[] newInstance(int len) { - return new Entry[len]; - } - }; - } + private static final BlockArrayCreator ARRAY_CREATOR = new BlockArrayCreator(){ + @Override + public Entry newInstance() { + return new Entry(); + } + + @Override + public Entry[] newInstance(int len) { + return new Entry[len]; + } + }; } diff --git a/src/main/java/com/reandroid/arsc/group/ItemGroup.java b/src/main/java/com/reandroid/arsc/group/ItemGroup.java index eab4fa9..83b3ac9 100755 --- a/src/main/java/com/reandroid/arsc/group/ItemGroup.java +++ b/src/main/java/com/reandroid/arsc/group/ItemGroup.java @@ -27,12 +27,10 @@ import java.util.Objects; private final BlockArrayCreator mBlockArrayCreator; private final String name; private T[] items; - private final int hashCode; public ItemGroup(BlockArrayCreator blockArrayCreator, String name){ this.mBlockArrayCreator=blockArrayCreator; this.name=name; this.items=blockArrayCreator.newInstance(0); - this.hashCode = Objects.hash(getClass(), name); } public Iterator iterator(){ return iterator(false); @@ -139,12 +137,12 @@ import java.util.Objects; } @Override public int hashCode(){ - return hashCode; + return 31 * name.hashCode(); } @Override public boolean equals(Object obj){ if(obj instanceof StringGroup){ - return hashCode==obj.hashCode(); + return hashCode()==obj.hashCode(); } return false; } diff --git a/src/main/java/com/reandroid/arsc/item/StringItem.java b/src/main/java/com/reandroid/arsc/item/StringItem.java index 8d2e825..390917a 100755 --- a/src/main/java/com/reandroid/arsc/item/StringItem.java +++ b/src/main/java/com/reandroid/arsc/item/StringItem.java @@ -28,18 +28,16 @@ import java.nio.CharBuffer; import java.nio.charset.CharacterCodingException; import java.nio.charset.CharsetDecoder; import java.nio.charset.StandardCharsets; -import java.util.ArrayList; -import java.util.Collection; -import java.util.List; +import java.util.*; public class StringItem extends BlockItem implements JSONConvert { private String mCache; private boolean mUtf8; - private final List mReferencedList; + private final Set mReferencedList; public StringItem(boolean utf8) { super(0); this.mUtf8=utf8; - this.mReferencedList=new ArrayList<>(); + this.mReferencedList = new HashSet<>(); } public boolean removeReference(ReferenceItem ref){ return mReferencedList.remove(ref); @@ -53,7 +51,7 @@ public class StringItem extends BlockItem implements JSONConvert { public boolean hasReference(){ return mReferencedList.size()>0; } - public List getReferencedList(){ + public Collection getReferencedList(){ return mReferencedList; } public void addReference(ReferenceItem ref){ @@ -62,7 +60,7 @@ public class StringItem extends BlockItem implements JSONConvert { } } public void addReferenceIfAbsent(ReferenceItem ref){ - if(ref!=null && !mReferencedList.contains(ref)){ + if(ref!=null){ mReferencedList.add(ref); } }