Javaチュートリアル12入門(コレクションとジェネリック)

Java配列の長さは不変です。しかし、多くの場合、実用的なアプリケーションでは、データの量を決定することはできません。これらのデータは、保存するための配列、コレクションを使用する必要があり、この時間を使用するのに適していません。

Javaのコレクションは、Javaクラスを格納されたオブジェクトのコンテナのようなものです。容器の内部に格納された容器内のいくつかのものは、その負荷に加えて、水中でのボトルのように、動作していないと注が、あなたは他の操作を実行することはできませんが、ロードすることは容易であると注が;および容器の内部に格納された容器内のいくつかのものだけでなく、クローゼットに保存された服は、あなたはまた、使用中に素早く見つけるために、規則的に服を置くことができ、洋服クローゼットを置く、例えば、操作することができますが、削除することは容易ではありません。Javaのコレクションが入れやすく、取り出しているそのうちのいくつかは、これらのコンテナのアナロジー以上を備え、いくつかを見つけるのは簡単です。コレクションでは、多くの場合、一般的なコレクションをより安全にするために使用されています。

セット

コレクションは、大きなインターフェイスの数、ならびにそれらの動作およびこれらのインタフェースのためのアルゴリズムの実装クラスのコレクションを含む、示されるオブジェクトのセットの統合アーキテクチャおよび動作を提供java.utilパッケージが、配置されています。オブジェクトのセットであるが、それはオブジェクトのグループを表し、実際に格納されたJava設定値は、基本データ型の値を格納することができない、オブジェクトへの参照です。

コレクションインタフェース

ライブラリは、インターフェイスのセットを含む、一連のフレームのコレクションです。インタフェースは、別個の操作であってもよい組で示されるコンテンツを提供する、抽象データ型のセットです。
収集インターフェイス:インターフェイスはインターフェイスの最も基本的なセットである、コレクションの要素を表します。
リストインターフェース:インターフェースは、Collectionインタフェースを実装しています。リストは、同じ要素をできるように、順序集合です。リストが正確に挿入された各要素を使用して制御することができ、ユーザは、配列と同様に、リスト内の要素にアクセスする(配列のインデックスと同様の位置にリスト要素)インデックスを使用することができます。
インターフェイスを設定します。インターフェースもCollectionインタフェースを実装しています。それはにSortedSetセット昇順でセットされ、重複した要素を含めることはできません。
地図インタフェース:キーと値のペアを含む、マップが重複キーを含めることはできません。地図は、コレクションのSortedMap昇順です。

インタフェースの実装クラス

Javaプラットフォームは、データ収集インタフェースの実装クラスの数を提供します。例えば、達成の設定は、オブジェクトのすべてのタイプに対応することができ、共通のインターフェイスとHashSetのTreeSetのを持っていますが、シーケンス順序永続的な変更を保証することはできません

Listインタフェースは、ArrayListのとのLinkedListの共通クラスを達成するために、彼らはまた、すべての種類のオブジェクトがnull含める収容することができ、および保管場所の要素が保証されています。

HashMapをマッピングするマップ実装クラスは、にマッピングされたキー値を実現することができます。
HashSetの:クエリの速度とデザインの設定を最適化するために。それが基づいて、HashSetのHashMapのは、すべての要素を保持するための基盤となるHashMapを使用して実装され、比較的簡単です。
TreeSetのは:あなたが内部のセットから順序付けられたシーケンスを抽出することができますので、このクラスは、Setインタフェースを実現するだけでなく、java.util.SortedSetインターフェイスを実現するだけでなく、実装クラスは、順序集合です。
ArrayListを:達成するための配列を持つリストは、高速ランダムアクセス、高効率であることと、可変サイズの配列を達成することができます。
LinkedListの:アクセス順序を最適化しますが、ランダムアクセス速度が比較的遅いです。加えて、それもaddFirst()、addLast()、 getFirstと()、GetLastの()、removeFirstと() とremoveLast()メソッドなど、スタック(スタック)、または使用するキュー(待ち行列)とすることができます。

コレクションインタフェース

Collectionインタフェースは、それが正常に直接使用されていない、親インターフェイスインターフェイスリストおよびSetインタフェースです。収集インターフェースは、一般的な方法は、これらの方法で基本的な操作のセット上に実装されてもよい定義します。インタフェースListので、あなたはまた、これらのメソッドを呼び出すことができますので、Collectionインタフェースから継承されたインターフェイスを設定します

boolean add(E e)    向集合中添加一个元素,E 是元素的数据类型
boolean addAll(Collection c)    向集合中添加集合 c 中的所有元素
void clear()    删除集合中的所有元素
boolean contains(Object o)  判断集合中是否存在指定元素
boolean containsAll(Collection c)   判断集合中是否包含集合 c 中的所有元素
boolean isEmpty()   判断集合是否为空
Iterator<E>iterator()   返回一个 Iterator 对象,用于遍历集合中的元素
boolean remove(Object o)    从集合中删除一个指定元素
boolean removeAll(Collection c) 从集合中删除所有在集合 c 中出现的元素
boolean retainAll(Collection c) 仅仅保留集合中所有在集合 c 中出现的元素
int size()  返回集合中元素的个数
Object[] toArray()  返回包含此集合中所有元素的数组
public static void main(Strmg[] args)
{
    ArrayList list1=new ArrayList();    //创建集合 iist1
    ArrayList list2=new ArrayList();    //创建集合 Iist2
    list1.add("one");    //向 list1 添加一个元素
    list1.add("two");    //向 list1 添加一个元素
    list2.addAll(list1);    //将 list1 的所有元素添加到 list2
    list2.remove(0);   //删除第一个元素 
}

リストコレクション

ArrayListのとLinkedListのクラスのカテゴリ:リストインタフェースCollectionインタフェースは、それは、主に2つの実装クラスを持っています。一覧コレクション内の重複を許可します。セットは、セット内の異なる要素のセットは、順序付きリストされている、リスト要素がインデックス設定された位置に基づいて検索することができ、最初のインデックス要素は、0に設定リストに1秒を追加しました等々

ArrayListのクラス

ArrayListのクラスは、高速インデックスベースのアクセス方式のメンバーを提供し、サポートを追加および削除の尾のメンバーが良いです。使用ArrayListのコレクションは、要素のコレクションの高速ランダムアクセスを可能にするために作成されました

ArrayList():构造一个初始容量为 10 的空列表。
ArrayList(Collection<?extends E>c):构造一个包含指定 Collection 的元素的列表,这些元素是按照该 Collection 的迭代器返回它们的顺序排列的。

ArrayListのクラスは、さらにインタフェースListを備え、Collectionインタフェース以外のすべてのメソッドが含まれています

E get(int index)    获取此集合中指定索引位置的元素,E 为集合中元素的数据类型
int index(Object o) 返回此集合中第一次出现指定元素的索引,如果此集合不包含该元
素,则返回 -1
int lastIndexOf(Obj ect o)  返回此集合中最后一次出现指定元素的索引,如果此集合不包含该
元素,则返回 -1
E set(int index, E element) 将此集合中指定索引位置的元素修改为 element 参数指定的对象。
此方法返回此集合中指定索引位置的原元素
List<E> subList(int fromlndex, int tolndex)返回一个新的集合,新集合中包含 fromlndex 和 tolndex 索引之间的所有元素。包含 fromlndex 处的元素,不包含 tolndex 索引处的元素
List list = new ArrayList();
list.add("1");
list.add("2");
list.add("3");
list.add("4");

list.get(0);//得到1

List sublist=new ArrayList();
sublist=list.subList(0,2); //subList 为1,2

LINKLISTクラス

LinkedListのクラスオブジェクトがリンクリスト構造を格納し、この構造の利点は、コレクションに要素を挿入したり削除することは容易です。頻繁に要素を挿入、削除、回収に高いのLinkedList ArrayListクラスのアナロジーを用いた場合の効果
だけでのLinkedListクラスとインタフェースは、接続インタフェースのリストが含まれています

void addFirst(E e)  将指定元素添加到此集合的开头
void addLast(E e)   将指定元素添加到此集合的末尾
E getFirst()    返回此集合的第一个元素
E getLast() 返回此集合的最后一个元素
E removeFirst() 删除此集合中的第一个元素
E removeLast()  删除此集合中的最后一个元素
LinkedList<String> products=new LinkedList<String>();    //创建集合对象
String product1=new String("product1");
String product2=new String("product2");

products.getFirst();//得到product1

セットコレクション

HashSetのとTreeSetのクラスのカテゴリ:コレクションセットは、2つの主要な実装クラスを持つCollectionインタフェースを実装します。コレクションセットオブジェクトは、単純にコレクションへのオブジェクトは、コレクションが重複するオブジェクトを含めることはできません、特定の方法でソートされ、せいぜいヌル要素が含まれていません

HashSetの

セットのコレクションに要素を追加するときにハッシュアルゴリズムを使用して、コレクション内の要素を格納するためのハッシュアルゴリズムに従ってHashSetのクラスは、要素の蓄積速度の収集を向上させることができ、HashSetのは、それらのHAを得るために、素子のhashCode()メソッドを呼び出しますギリシャ語のシンボルは、その後、このハッシュコードに応じて設定記憶素子の位置を算出します

HashSet():构造一个新的空的 Set 集合。
HashSet(Collection<? extends E>c):构造一个包含指定 Collection 集合元素的新 Set 集合。其中,“< >”中的 extends 表示 HashSet 的父类,即指明该 Set 集合中存放的集合元素类型。c 表示其中的元素将被存放在此 Set 集合中。

HashSet hs=new HashSet();                     //调用无参的构造函数创建HashSet对象
HashSet<String> hss=new HashSet<String>();    //创建泛型的 HashSet 集合对象
String name=new String("HelloWorld");
String name1=new String("HelloWorld1");
hss(name); 
hss(name1); 

あなたが正面をカバーする添加元素を添加した後、コレクションを設定するには、2つの同一の要素を追加した場合、すなわち、同じ要素がセット内に設定されることはありません

TreeSetの

TreeSetのクラスは、SetインタフェースとにSortedSetインタフェースを実装しています。SortedSetインターフェイスはサブインターフェイスの設定インターフェイスは、昇順でコレクションを達成することができます。同等のインタフェースのcompareTo(オブジェクトO)2つのオブジェクトを比較する方法があるためTreeSetのクラスオブジェクトは、ソート同等のインタフェースを実現することができます

包装类(BigDecimal、Biglnteger、 Byte、Double、
Float、Integer、Long 及 Short) 按数字大小比较
Character   按字符的 Unicode 值的数字大小比较
String  按字符串中字符的 Unicode 值的数字大小比较

TreeSetのクラスは、Collectionインタフェースを除くすべてのメソッドを実装し、以下の方法があります

E first()   返回此集合中的第一个元素。其中,E 表示集合中元素的数据 类型
E last()    返回此集合中的最后一个元素
E poolFirst()   获取并移除此集合中的第一个元素
E poolLast()    获取并移除此集合中的最后一个元素
SortedSet<E> subSet(E fromElement,E toElement)  返回一个新的集合,新集合包含原集合中 fromElement 对象与 toElement
对象之间的所有对象。包含 fromElemen t对象,不包含 toElement 对象
SortedSet<E> headSet<E toElement〉   返回一个新的集合,新集合包含原集合中 toElement 对象之前的所有对象。
不包含 toElement 对象
SortedSet<E> tailSet(E fromElement) 返回一个新的集合,新集合包含原集合中 fromElement 对象之后的所有对
象。包含 fromElement 对象
TreeSet<Double> treeSet=new TreeSet<Double>(); 
treeSet.add(0.02);
treeSet.add(0.01);
treeSet.add(0.03);
for(int i=0;i<treeSet.toArray().length;i++)
{
     System.out.print(treeSet.toArray.toArray()[i]); //依次输出 0.01,0.02,0.03
}
SortedSet<Double> headTreeSet =scores.headSet(0.02); //headTreeSet内只有0.01

あなただけのそれ以外の場合はClassCastExceptionがスローされます、TreeSetの自然な順序にデータ収集の同じ型のオブジェクトを追加することができます。

地図コレクション

マップのキーである - 値ペア(キー値)セット、マップは、各要素がキーオブジェクトと目標値を含むセット。HashMapのツリーマップクラスとクラス:ここで、2つの主なカテゴリを達成するために、Mapインタフェース、重複するキーオブジェクトを許可しないと、オブジェクトの値を繰り返してもよいし、オブジェクトの値はまた、Map型のものであってもよいです。ここで、オブジェクトのハッシュアルゴリズムにアクセスするためのHashMapクラスキー、およびTreeMapのクラスオブジェクトに応じてキーをソートすることができます

提供Mapインタフェースの一般的な方法

V get(Object key)   返回 Map 集合中指定键对象所对应的值。V 表示值的数据类型
V put(K key, V value)   向 Map 集合中添加键-值对,返回 key 以前对应的 value,如果没有, 则返回 null
V remove(Object key)    从 Map 集合中删除 key 对应的键-值对,返回 key 对应的 value,如 果没有,则返回null
Set entrySet()  返回 Map 集合中所有键-值对的 Set 集合,此 Set 集合中元素的数据 类型为 Map.Entry
Set keySet()    返回 Map 集合中所有键对象的 Set 集合
Map map=new HashMap();
map.put("1","HelloWorld");
map.put("2","HelloWorld");

コレクションクラス

操作のセットを静的メソッドの数を提供するコレクションは、クラス、静的メソッドは、要素の順序集合によって実現されてもよいし、複製が操作を充填します

フォワードソート

ソート()メソッドは、主に以下の2つのオーバーロードされた形です。

void sort(List list):根据元素的自然顺序对集合中的元素进行升序排序。
void sort(List list,Comparator comparator):按 comparator 参数指定的排序方式对集合中的元素进行排序。

List test=new ArrayList();
test.add(2);
test.add(1);
test.add(3);
Collections.sort(test); //此时数组为1,2,3

逆の順番で

呼び出しは、静的メソッドは、指定されたコレクションの要素の逆の順序で行うことができる)(逆

void reverse(List list)    //对集合中的元素进行反转排序

List test=new ArrayList();
test.add(2);
test.add(1);
test.add(3);
Collections.reverse(test); //此时数组为3,2,1

コピー

コピーコレクションクラス()別のコレクションに、コレクション内の指定した要素のすべてをコピーするために使用される静的メソッド

void copy(List <? super T> dest,List<? extends T> src)

List srcList=new ArrayList();
destList.add("1");
destList.add("2");
List destList=new ArrayList();
Collections.copy(destList,srcList);//此时destList为1,2

充填

コレクションクラスを埋める()要素の全ての充填操作の指定されたセットの静的メソッドを

void fill(List<? super T> list,T obj)    //使用指定元素替换指定列表中的所有元素

List test=new ArrayList();
test.add("1");
test.add("2");
Collections.fill(srcList,"0"); //此时List里全是0

ジェネリック

ジェネリック医薬品は、コンパイル時の型の安全性で確認することができ、すべてのキャストは、コードの再利用性を向上、自動および暗黙的です。

ジェネリックコレクション

それは、つまり、自然の中で一般的なパラメータ化された型の「型パラメータ」の種類を提供することです。変換のタイプの絶対的な安全性を保証するために、我々は、インターフェイス又は方法は、クラス・タイプ・パラメータは、このパラメータの動作限界のデータ型として指定されています。

public class Person{
     private String name;
     public Person(String _name)
    {
        this.name=_name;
    }
}
Map<Integer, Person> persons=new HashMap<Integer, Person>();    //定义泛型 Map 集合
persons.add(new Person("HelloWorld"));

地図<整数、人>人物=新しいHashMapの<Integer型は、Person>();「整数型でなければなりませんMapに格納されたキーセットの既存の、キータイプの整数値のPerson型の一般的なコレクションを作成します値は、Person型、またはコンパイルエラーでなければなりません。

Person preson = persons.get(0);//在获取 Map 集合中的元素时,不需要将"persons.get(id);"获取的值强制转换为 Person 类型,程序会隐式转换

ジェネリッククラス

また、一般的なコレクションを定義するだけでなく、直接、ジェネリッククラスの型パラメータを定義します。

public class class_name<data_type1,data_type2,…>{}
//泛型类一般用于类中的属性类型不确定的情况下。
private data_type1 property_name1;

場合は、一般的なクラスインスタンス、ジェネリックパラメータは、クラスの型を指定する必要があり、ジェネリッククラスのtype属性に対応する値を割り当て

public class Person<T>{
    private T param;
    public T getParam(){
        return param;
   }
   public void setParam(T _param){
        this. param = _param;
   }
}
public class Employee{
    //类型体
}
public static void main(String[] args){
    //约束为整形
    Person<Integer> intergerPerson = new Person<Integer>();
    intergerPerson. setParam(1);
    //约束为字符串类型
    Person<String> intergerPerson1 = new Person<String>();
    intergerPerson1. setParam("String");
    //除基础类型外,也可以约束为自定义类型
    Person<Employee> intergerPerson2 = new Person<Employee>();
    intergerPerson1. setParam(new Employee());
}

ジェネリッククラス型パラメータは、複数を有していてもよいです

public class Person<T,N,S>{
    //使用同上
}

一般的な方法

ジェネリッククラスは、ジェネリッククラスではないかもしれないところの方法があってもよい一方、それはまた、パラメトリック法の一般的なクラスに含まれていてもよいです。
この方法は、独立して、クラス変更の発生することができるように、一般的な方法。置換されていてもよい一般的なタイプの一般的な方法ならば、それだけで、一般的な方法を使用すべきです。また、静的メソッドのジェネリッククラスの型パラメータにアクセスすることはできません。静的メソッドは、一般的な機能の使用を必要とする場合したがって、我々はそれを一般的な方法にする必要があります。

[访问权限修饰符][static][final]<类型参数列表>返回值类型方法名([形式参数列表])
public static<T> void Test(T t){
}
String helloWorld = "HelloWorld";
Test("HelloWorld");

おすすめ

転載: www.cnblogs.com/lilinfeng/p/10995750.html