ホームページ  >  記事  >  Java  >  Javaコレクションフレームワークの詳細な説明

Javaコレクションフレームワークの詳細な説明

高洛峰
高洛峰オリジナル
2017-01-23 10:29:171738ブラウズ

1.Java コレクション フレームワークの概要

Java SE には、一連のクラスとインターフェイスで構成される Java Collection Framework (略して JCF) が含まれており、その主な機能は、保存されたデータを特定の構造に編成することです。特定の方法でこのデータにアクセスする場合、目的は、オブジェクトのコレクションを操作するための共通のフレームワークを提供し、オブジェクトのさまざまなコレクションを操作するときにプログラマが実行する必要があるコーディングの量を減らすことです。

コレクション クラスのいくつかの違いには、繰り返しの要素操作をサポートするかどうかに加えて、要素が順序付けされているかどうか、および null 要素の追加が許可されているかどうかが含まれます。これら 3 つの違いに基づいて、Java コレクション フレームワークはオブジェクトの保存メソッドを次の 3 つのタイプに分類します。

Set (セット): オブジェクト コンテナ内のオブジェクトには順序がなく、繰り返すことはできません。

List (リスト): オブジェクト コンテナ内のオブジェクトはインデックス順に従って並べ替えられ、重複するオブジェクトが存在する可能性があります。

マップ (マッピング): オブジェクト コンテナー内の要素には、「キー オブジェクトと値のオブジェクト」マッピングのペアが含まれています。キー オブジェクトは繰り返すことができず、値オブジェクトは繰り返すことができます。

オブジェクトの並べ替えとトラバーサル アクセス操作をサポートするために、Java コレクション フレームワークはいくつかのインターフェイスを提供します。

インターフェイス SortedSet は、Set 型コンテナーの撮影機能を提供します。

インターフェース SortedMap は、Map タイプのコンテナーの主要なオブジェクトの並べ替えを提供します。

Comparable インターフェイスと comparator インターフェイスは、コレクション内のオブジェクトを並べ替えるために使用されます。

2. Collection インターフェースと Iterator インターフェース

Collection インターフェースは、Collection オブジェクトに共通のいくつかの基本メソッドを定義します

Javaコレクションフレームワークの詳細な説明

Iterator インターフェースは、コレクションを走査するために使用されるインターフェースです。

Javaコレクションフレームワークの詳細な説明

1. Listインターフェース

ListインターフェースはCollectionインターフェースを継承しています:

List内の要素は順番に並んでいます。

リストでは通常、重複した要素が許可されます。

List 実装クラスは通常、null 要素をサポートします。

List オブジェクト コンテナ内の要素には、インデックスによってアクセスできます。

List インターフェースの最も一般的に使用される実装クラスは、ArrayList クラスと LinkedList クラスです。

1).ArrayList

プログラムの例:

package lei;
  import java.util.ArrayList;
  import java.util.List;
  public class Test {
    public static void main(String[] args) {     
      List list = new ArrayList<>();
      list.add(1);
      list.add("zhangsan");
      list.add(false);
      list.add(&#39;a&#39;);
      list.add(0, "lisi");
      list.add(1);
      list.remove(1);
      list.remove(2);
      list.set(0, "wangwu");
      for (int i = 0; i < list.size(); i++) {
        System.out.println(list.get(i));
      }
    }
  }

Object クラスによって定義された equals() メソッドは、メソッドに渡されたオブジェクトがメソッドを呼び出しているオブジェクトと同じオブジェクトである場合にのみ true を返します。 equals() メソッドをオーバーライドすることで、同じ状態の 2 つのオブジェクトを同じオブジェクトとして扱うことができます。

2).LinkedList

Javaコレクションフレームワークの詳細な説明

プログラム例:

package lei;
  import java.util.LinkedList;
  import java.util.List;
  public class Test2 {
      public static void main(String[] args) {
       LinkedList l=new LinkedList<>();
      l.add("zhangsan");
      l.add("lisi");
      l.addFirst(1);
      l.addLast(4);
      System.out.println(l.getFirst());
      System.out.println(l.getLast());
      l.removeFirst();
      l.removeLast();
      for (int i = 0; i < l.size(); i++) {
        System.out.println(l.get(i));  
      }  
    }
  }

LinkedList と ArrayList の選択

リストに高速アクセスが必要だが、要素の挿入や削除を頻繁に行わない場合は、ArrayList を選択することをお勧めします。リストに対して頻繁に挿入および削除操作を実行する必要がある場合は、LinkedList を選択する必要があります。

2.setインターフェース

setインターフェースはCollectionインターフェースを継承し、Collectionインターフェースのすべてのメソッドも継承します。 set インターフェイスには次の特徴があります:

Set タイプのコンテナには重複した要素を含めることはできません。コンテナに要素を追加する場合、要素の内容が重複していないか比較する必要があるため、Set型オブジェクトコンテナに追加するオブジェクトはequals()メソッドをオーバーライドする必要があります。

要素は順序が正しい場合とそうでない場合があります。

要素の順序が正しくない可能性があるため、添字に基づいてセット内の要素にアクセスすることはできません。

Set インターフェースを実装するために最も一般的に使用されるクラスは、HashSet クラスと TreeSet クラスです。

1).Hashset

Hashset クラスは、ハッシュ アルゴリズムに基づいた Set インターフェイスの実装であり、主に次の特徴があります:

ハッシュセットを走査するとき、その中の要素は順序通りではありません。

ハッシュセットでは重複した要素は許可されません。ここでの重複要素は、同じハッシュ コードを持つ 2 つのオブジェクトを指し、equals() メソッドを使用して比較すると true を返します。

null 要素を許可します。

私たちが作成するクラスがequalsメソッドを再定義する場合、このクラスはhashCode()メソッドも再定義し、equalsメソッドを使用した2つのオブジェクトの比較結果がtrueである場合に、2つのオブジェクトのhashCode()メソッドが実行されるようにする必要があります。戻り値は等しいです。

プログラム例:

package lei;
  import java.util.HashSet;
  import java.util.Set;
  public class Test4 {
      public static void main(String[] args) {
      Set<String> set=new HashSet<String>();
      set.add("zhangsan");
      set.add("lisi");
      for(String s:set){
        System.out.println(s);
      }
    }
  }

2).TreeSet

TreeSet クラスは Set インターフェイスを実装するだけでなく、SortedSet インターフェイスも実装し、それによってセット内のオブジェクトが特定の順序で並べ替えられるようにします。オブジェクトが TreeSet コレクションに追加されると、そのオブジェクトは順序付けられたオブジェクトのシーケンスに挿入されます。ただし、この並べ替えは、オブジェクトが追加された順序に従って並べ替えられるのではなく、特定のアルゴリズムに従って並べ替えられます。

TreeSet は、自然な順序を使用して、または Set の作成時に提供された Comparator に基づいて要素を並べ替えます。 TreeSet は、自然な並べ替えとカスタム 並べ替えという 2 つの並べ替え方法をサポートしています。

3.マップインターフェース

Map(映射)接口是java集合框架中不同于Collection接口的另一个重要接口,它对应的是在一种从键(Key)到值(Value)的对应关系的集合。Map类型的对象容器里面保存着两组对象,一组对象用于保存Map里的Key,另外一组用于保存Value。Key和Value可以升级任何引用类型的数据。Key不能重复,但是Value可以重复。

1).HashMap  

HashMap是基于哈希算法的Map接口的实现。HashMap将它的键保存在哈希表中进行维护,键是唯一的。但是,HashMap并不保证键以特定顺序排列,特别是不保证顺序永久不变。 

HashMap类实现了Map接口,从而具有Map接口的所有方法。

package day1228;
  import java.util.*;
  public class HashMapDemo {
    public static void main(String[] args) {
      // 创建一个新的HashMap
      Map<String, String> map = new HashMap<String, String>();
      map.put("a1", "xiao");
      map.put("b2", "xiaol");
      map.put("a4", "xiaosd");
      map.put("b1", "12a");
      map.put("a3", "1");
      // 使用iterator遍历 键和值
      System.out.println("之前的Map值是:");
      Set<String> keys = map.keySet();
      for (Iterator<String> i = keys.iterator(); i.hasNext();) {
        String key = i.next();
        String value = map.get(key);
        System.out.println(key + "=" + value);
      }
      // 删除键为"a4"的值
      System.out.println("\n删除键值为a4的元素");
      map.remove("a4");
      // //使用iterator遍历 键和值
      System.out.println("\n之后的Map值:");
      keys = map.keySet();
      for (Iterator<String> i = keys.iterator(); i.hasNext();) {
        String key = i.next();
        String value = map.get(key);
        System.out.println(key + "=" + value);
      }
    }
  }

2).TreeMap

TreeMap类是基于红黑树算法的Map接口实现。TreeMap中键的存放方式与TreeSet相似,它将键存放在树中,键的顺序按照自然顺序或者自定义顺序两种方式排列。 

程序实例:

package day1228;
  import java.util.*;
  public class TreeMapDemo {
    public static void main(String[] args) {
      //创建一个新的TreeMap
      Map<Integer, String> map = new TreeMap<Integer, String>();
      map.put(1, "one");
      map.put(2, "two");
      map.put(3, "three");
      map.put(4, "four");
      map.put(5, "five");
      //使用iterator显示键和值
      System.out.println("之前的map值为:");
      Set<Integer> keys=map.keySet();
      for(Object key:keys){
        String value=map.get(key);
        System.out.println(key+"="+value);
      }
      //删除键为3的值
      System.out.println("\n删除键值为3的元素");
      map.remove(3);
      //使用iterator显示键和值
      System.out.println("\n之后的值Map为:");
      for(Object key:keys){
        String value=map.get(key);
        System.out.println(key+"="+value);
      }
    }
  }

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持PHP中文网!

更多Javaコレクションフレームワークの詳細な説明相关文章请关注PHP中文网!

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。