2017-02-14 11 views
-2

私はArrayListからObjectを削除すると、そのサイズは減少しません。arraylistのremove()メソッドは、arraylistのサイズが縮小することにつながっています

これをテストするために以下のコードを試しましたが、サイズが小さくなっています。誰でも私にこれを訂正し説明することができますか?

package collections; 

import java.util.ArrayList; 
import java.util.List; 

public class ArrayListExample { 
public static void main(String[] args) { 
    //Creating list of Books 
    List<Book> list=new ArrayList<Book>(); 
    //Creating Books 
    Book b1=new Book(101,"Let us C","Yashwant Kanetkar","BPB",8); 
    Book b2=new Book(102,"Data Communications & Networking","Forouzan","Mc Graw Hill",4); 
    Book b3=new Book(103,"Operating System","Galvin","Wiley",6); 
    //Adding Books to list 
    list.clear(); 
    list.add(b1); 
    list.add(b2); 
    list.add(b3); 
    list.contains(b3); 
    int size= list.size(); 
    System.out.println(size); 
    list.remove(b3); 
    int size1= list.size(); 
    System.out.println(size1);  
} 
} 
+1

***私は、Arraylistからオブジェクトを削除すると、そのサイズは減少しません... ***あなたはそれをどこで読んだのですか? –

+1

どこを読んだのですか?おそらく、あなたはArrayListsではなくArrayListsについて何かを読んでいるでしょうか? – azurefrog

+1

基礎となるストレージはサイズを減らさない(実装の詳細)。しかし、 'size'メソッドは、javadocsで述べたように、リストに含まれる要素の実際の数を常に反映します。 – languitar

答えて

5

おそらく、ArrayListのが使用する補助配列のサイズが真である、減少しないことをお読みください。 100個の要素をArrayListに配置すると、少なくとも100のバッキング配列が作成されます。 remove()要素の後であっても、その配列のサイズは変わりません。そのメモリを解放するには、trimToSize()方法が提供されています:サイズと容量があり

public void trimToSize() 
Trims the capacity of this ArrayList instance to be the list's current size. An application can use this operation to minimize the storage of an ArrayList instance. 

0

https://docs.oracle.com/javase/7/docs/api/java/util/ArrayList.html#trimToSize()から。

1)サイズ - リスト内の要素の合計量。要素を削除した後に減少します。

list.add(b1); 
    list.add(b2); 
    list.add(b3); 
    System.out.println(list.size());//size is 3 
    list.remove(b3); 
    System.out.println(list.size());//size is 2 after remove 

2)容量 - リスト内の要素の「セル」の合計量。要素を削除した後も減少しません。

List<Book> list1 = new ArrayList<>(3); //there is 3 "cells" for books 
List<Book> list2 = new ArrayList<>(); //there is 10 "cells" for books(default value) 

あなたはまだこれを行うことができますがないときJVMが十分な容量を(リストの容量をautoincreaseますので

List<Book> list1 = new ArrayList<>(3); // 3 "cells" for books 
list.add(b1); //capacity = 3; size = 1; 
list.add(b2); //capacity = 3; size = 2; 
list.add(b3); //capacity = 3; size = 3; 
list.add(b4); //capacity = (3 * 3)/2 + 1 = 5; size = 4; 

あなたは3「セル」で、リスト内の4つの要素を追加することができます式=(oldCapacity * 3)/ 2 + 1)となる。

List<String> list = new ArrayList<>(); 
list.add("0"); 
list.add("1"); 

あなたは容量there詳細を読むことができます:

Thereは、次のコードの写真です。

関連する問題