ArrayListとHashmap
ArrayListのストレージは配列です。
HashMapのストレージは、配列とリンクリストです。
以下のMyArrayListとMyHashmapは、実際の作業では使用されていません。使用する可能性が最も高いのは、インタビューと仕事を見つけて、他の人をだますことです。職場では役に立たないが、役に立たないという意味ではありません。それは私たちが彼らの実装の原則を理解するのに役立ちます。実装が完了したら、JDKのソースコードを慎重に確認し、他の人が実装で学習できる場所を確認します。
myArrayList
パブリッククラスmyArrayList <e> {private int caperation = 10;プライベートINTサイズ= 0; private e [] values = null; @suppresswarnings( "unchecked")public myarraylist(){values =(e [])new object [capuation]; } @suppresswarnings( "unchecked")public myArrayList(int caperation){this.capacity = capitious;値=(e [])new Object [this.capacity]; } public void put(e e){if(e == null){throw new runtimeexception( "値はnullであるべきではありません。"); } if(size> =容量){embergecapacity(); } values [size] = e;サイズ++; } public e get(int index){if(index> = size){throw new runtimeException( "the index:" + index + "はband of band。"); } return値[index]; } public void remove(int index){if(index> = size){throw new runtimeException( "the index:" + index + "はband。"); } for(int i = index; i <size -1; i ++){values [i] = values [i+1]; }値[サイズ-1] = null;サイズ - ; } @suppresswarnings( "unchecked")private void enlargecapacity(){caperation = capuation * 2; e [] tmpvalues =(e [])new object [capuation]; System.ArrayCopy(values、0、tmpvalues、0、size);値= tmpvalues; } public string toString(){stringbuilder sb = new StringBuilder(); sb.append( "["); for(int i = 0; i <size; i ++){sb.append(values [i])。append( "、"); } if(size> 0){sb.deletecharat(sb.length()-1); } sb.append( "]"); return sb.tostring(); } / ** * @param args * / public static void main(string [] args){myarraylist <string> mylist = new MyArrayList <String>(); mylist.put( "1"); mylist.put( "2"); mylist.put( "3"); mylist.put( "4"); mylist.put( "5"); mylist.put( "6"); mylist.put( "7"); mylist.put( "8"); mylist.put( "9"); mylist.remove(7); System.out.println(mylist.toString()); }} myhashmap
パブリッククラスmyhashmap <k、v> {//初期化容量プライベートint容量= 10; //トータルエンティティプライベートint size = 0;プライベートエンティティ<k、v> []エンティティ= null; @suppresswarnings( "unchecked")public myhashmap(){entities = new Entity [capulation]; } public void put(k key、v value){if(key == null){throw new runtimexception( "key is null"); } rehash();エンティティ<k、v> newEntity = new Entity <k、v>(key、value); put(newEntity、this.entities、this.capacity); } private void put(entity <k、v> newEntity、entity <k、v> [] ent capational){int index = newEntity.getKey()。hashcode()%容量;エンティティ<k、v> entity = entities [index];エンティティ<k、v> firstentity = entities [index]; if(entity == null){entities [index] = newEntity;サイズ++; } else {if(newEntity.getKey()。equals(entity.getKey())){//最初のエンティティの同じキーを見つけます。 newEntity.setpre(entity.getPre()); if(entity.getNext()!= null){entity.getNext()。setPre(newEntity); } entities [index] = newEntity; } else if(entity.getNext()!= null){while(entity.getNext()!= null){//次のすべてのエンティティの同じキーを見つけます。 if(newEntity.getKey()。equals(entity.getKey())){newEntity.setpre(entity.getPre()); newEntity.setNext(entity.getNext()); if(entity.getNext()!= null){entity.getNext()。setPre(newEntity); } entities [index] = newEntity;戻る; }} //同じキーを見つけることができないので、Header newEntity.setNext(FirstEntity)に新しいエンティティを挿入します。 newEntity.setpre(FirstEntity.getPre()); FirstEntity.setpre(newEntity);エンティティ[index] = newEntity;サイズ++; } else {//同じキーを見つけることができない、次に新しいエンティティをnewEntity.setNext(FirstEntity)に置く; FirstEntity.setpre(newEntity);エンティティ[index] = newEntity;サイズ++; }}} public v get(k key){if(key == null){throw new runtimeException( "key is null"); } int index = key.hashcode()%容量;エンティティ<k、v> entity = entities [index]; if(entity!= null){if(entity.getKey()。equals(key)){return entity.getValue(); } else {entity = entity.getNext(); while(entity!= null){if(entity.getKey()。equals(key)){return entity.getValue(); } entity = entity.getNext(); }}} nullを返します。 } public void remove(k key){if(key == null){throw new runtimeexception( "key is null"); } int index = key.hashcode()%容量;エンティティ<k、v> entity = entities [index]; if(entity!= null){if(entity.getKey()。equals(key)){if(entity.getNext()!= null){// first entity entity.getNext()。setPre(entity.getPre()); entities [index] = entity.getNext();エンティティ= null; } else {//このインデックスエンティティを空にします[index] = null; } サイズ - ; } else {entity = entity.getNext(); while(entity!= null){if(entity.getKey()。equals(key)){if(entity.getnext()!= null){entity.getPre()。setNext(entity.getNext()); entity.getNext()。setPre(entity.getPre());エンティティ= null; } else {//見つかったEntity Entity.getPre()。setNext(null)をリリースします。エンティティ= null; } サイズ - ;戻る; } entity = entity.getNext(); }}}} public string toString(){stringbuilder sb = new StringBuilder(); for(int i = 0; i <容量; i ++){sb.append( "index =")。append(i).append( "["); boolean hasentity = false;エンティティ<k、v> entity = entities [i]; if(entity!= null){hasentity = true; } while(entity!= null){sb.append( "[")。append(entity.getKey())。append( "=")。append(entity.getValue())。 entity = entity.getNext(); } if(hasentity){sb.deletecharat(sb.length()-1); } sb.append( "]/n"); } return sb.toString(); } / ** *シンプルな再ハッシュ戦略、サイズが容量よりも大きい場合、アクションを再ハッシュする * / private void rehash(){if(size> = caperation){int newcapacity = capuation * 2; @suppresswarnings( "Unchecked")エンティティ<K、v> [] newEntities = new Entity [NewCapacity]; for(int i = 0; i <容量; i ++){entity <k、v> entity = entities [i]; while(entity!= null){put(entity、newentities、newcapacity); entity = entity.getNext(); }} this.capacity = newCapacity; this.entities = newEntities; }} public static void main(string [] args){myhashmap <string、string> map = new myhashmap <string、string>(); map.put( "one"、 "1"); map.put( "2"、 "2"); map.put( "3"、 "3"); map.put( "4"、 "4"); map.put( "5"、 "5"); map.put( "6"、 "6"); map.put( "7"、 "7"); map.put( "8"、 "8"); map.put( "nine"、 "9"); map.put( "10"、 "10"); system.out.println(map.get( "one")); System.out.println(map.get( "2")); system.out.println(map.get( "3")); System.out.println(map.get( "4")); system.out.println(map.get( "5")); System.out.println(map.get( "6")); System.out.println(map.get( "7")); system.out.println(map.get( "8")); system.out.println(map.get( "nine")); system.out.println(map.get( "10")); System.out.println(map.toString()); map.remove( "nine"); map.remove( "3"); system.out.println(map.get( "one")); System.out.println(map.get( "2")); system.out.println(map.get( "3")); System.out.println(map.get( "4")); system.out.println(map.get( "5")); System.out.println(map.get( "6")); System.out.println(map.get( "7")); system.out.println(map.get( "8")); system.out.println(map.get( "nine")); system.out.println(map.get( "10")); System.out.println(map.toString()); }} class Entity <k、v> {private k key;プライベートV値。民間エンティティ<K、V> pre;プライベートエンティティ<k、v> next;パブリックエンティティ(kキー、v値){this.key = key; this.value = value; } public k getKey(){return key; } public void setKey(k key){this.key = key; } public v getValue(){return値; } public void setValue(v value){this.value = value; } public Entity <k、v> getPre(){pre; } public void setpre(entity <k、v> pre){this.pre = pre; } public Entity <k、v> getNext(){return next; } public void setNext(entity <k、v> next){this.next = next; }}読んでくれてありがとう、私はそれがあなたを助けることができることを願っています。このサイトへのご支援ありがとうございます!