一般的に、教科書のデータ構造には、配列、単一のリンクリスト、スタック、ツリー、グラフが含まれます。ここで言及しているデータ構造は、オブジェクトを表現する方法の問題です。時には、int、string、double、またはonemensional arrayなどの単一の変数宣言が役に立たず、2次元配列は表現したいものを完全に表現できず、クラスクラスを定義するには面倒です。現時点では、Javaのコレクションクラスの使用を検討できます。 Collectionsクラスを使用して、インポートJava.util。*をファイルヘッダーに宣言する必要があります。
1。動的、順序付けられた、可変サイズの1次元アレイベクトルとアレイリスト
コレクションクラスには、動的、順序付けられた、可変サイズの1次元アレイベクトルとアレイリストが含まれます。
VectorとArrayListの唯一の違いは次のとおりです。Vectorにはスレッドが相互に排他的であり、複数のスレッドが例外をスローして読み書きを行いますが、ArrayListは複数のスレッドで読み書きを許可し、他の部分はまったく同じです。言い換えれば、単一のスレッドが読み書きがしている場合、VectorとArrayListの使用に違いはありませんが、現在はプログラミングが基本的にアレイリストであり、Vectorを使用することは少し非メインストリームです。
1.ベクトルの使用は次のとおりです。
public static void vectortest(){// vector <double>は、このベクトルがdoubleのみを保存できることを意味します。 Vector Vector = new // Vector()に相当します。ただし、これをEclipseで書くと警告し、ベクトルが標準化されていないことを示します。 Vector.Add(1.6); Vector.Add(2.06); vector.add(1); system.out.println( "simple addは、端から要素を追加することを意味します:" + vector); system.out.println( "size()は、ベクトルに含まれる要素の数を見つけることができます:" + vector.size()); vector.remove(1); system.out.println( "remover(1)は、カウントが0から始まる、つまり要素2.06:" + vector)から始まるため、最初の要素を削除することを意味します。 vector.remove(vector.lastelement()); system.out.println( "最後の要素を削除するベクトルは次のとおりです:" + vector); Vector.Add(0、1.8888); system.out.println( "0番目の位置にこの要素を1.8888追加:" + vector); vector.set(0、 "a"); System.out.println( "0番目の位置を変更:" + vector); }この方法がメイン関数で呼び出された場合:
System.out.println( "========ベクターデータ構造のテスト開始========="); vectortest(); System.out.println( "========ベクターデータ構造の終了============);
操作結果は次のとおりです。
=======ベクターデータ構造のテスト開始======
単純な追加は、最後から要素を追加することを意味します:[1.6、2.06、1]
size()は、ベクトルに含まれる要素の数を見つけることができます:3
(1)は、最初の要素を削除することを意味します。カウントは0から始まるため、つまり、要素2.06:[1.6、1]
最後の要素を削除するベクトルは次のとおりです。[1.6]
0番目の位置に要素1.8888を追加:[1.8888、1.6]
0番目の位置の要素をAに変更します:[a、1.6]
========ベクターデータ構造の終了======
2。ArrayList
public static void arraylisttest(){arraylist <double> arraylist = new arrayList <double>(); arraylist.add(1.0); arraylist.add(4.0); arraylist.add(5.0); arraylist.add(2.3); system.out.println( "simple addは、最後から要素を追加することを意味します:" + arrayList); system.out.println( "size()は、含まれる要素の数を見つけることができます:" + arraylist.size()); arraylist.remove(1); system.out.println( "remover(1)は、最初の要素を削除することを意味します。カウントは0から始まるため、つまり要素4:" + arrayList); arraylist.remove(arraylist.size() - 1); System.out.println( "最後の要素を削除するためのArrayListは次のとおりです。" + arrayList); arraylist.add(0、1.8888); System.out.println( "0番目の位置に1.8888要素を追加:" + arrayList); arraylist.set(0、9.0); system.out.println( "0番目の位置の要素をa:" + arrayListに変更); collections.sort(arraylist); System.out.println( "ArrayListが抽象型" + arrayListでない場合、並べ替えがサポートされています); }ここでは、ArrayListが最後の要素を削除する方法がVectorとは異なることがわかります。主な理由は、ArrayListに最後の要素を削除するLastElement()メソッドがないことです。 remove()は、最後の要素の位置を決定するためにのみ使用できます。この方法がこのようなメイン関数で呼び出された場合:
System.out.println( "========= ArrayListデータ構造のテスト開始========"); arrayListTest(); System.out.println( "======== ArrayListデータ構造の終了================);
次に、次の実行結果が得られます。
======= ArrayListデータ構造のテスト開始======
単純な追加は、端から要素を追加することを意味します:[1.0、4.0、5.0、2.3]
size()は、含まれる要素の数を見つけることができます:4
(1)は、最初の要素を削除することを意味します。カウントは0から始まるため、つまり要素4:[1.0、5.0、2.3]
最後の要素を削除するためのアレイリストは次のとおりです。[1.0、5.0]
0番目の位置に要素1.8888を追加:[1.8888、1.0、5.0]
0番目の位置の要素をAに変更します:[9.0、1.0、5.0]
ArrayListが抽象型でない場合、ソートはサポートされています[1.0、5.0、9.0]
======== ArrayListデータ構造======テスト端
上記の2つの例から、ベクトルとアレイリストは通常の配列以上のものであることがわかります。つまり、教科書int array [] = {8、7、100、88、6、4、5、5、33、7}で教えられている1次元配列です。それははるかに強力です。任意の位置に要素を挿入することも、配列を通過せずに指定された位置で要素を削除することもできます。もちろん、この配列がどのように通過しているかを知る必要があります。実際、アレイリストと通常の1次元配列を完全に変換することができ、アレイリストを使用して、アレイにバブルソートを書き込むことなくアレイを直接ソートすることもできます。 Arrayをcollections.sort()で直接並べ替えることができます。そして、collections.Reverse()を使用します。逆の並べ替えを達成するため。もちろん、それはまだ同じ文です。あなたのために、あなたはまだこの配列がどのようにソートされているかを知る必要があります。
たとえば、次の方法では、1次元配列int array [] = {8、7、100、88、6、4、5、5、5、33、7}の並べ替えと逆ソートを実装します。最初に配列を配列を配列に変換し、次にcollections.sort()で並べ替えます。 collections.reverse();、最後にアレイリストコンテンツを1次元配列に変換します。
public static void arraylistsort(){int array [] = {8、7、100、88、6、4、5、33、7}; arrayList <integer> arrayList = new ArrayList <Integer>(); for(int i = 0; i <array.length; i ++)system.out.print(array [i]+"、"); for(int i = 0; i <array.length; i ++)arraylist.add(array [i]); collections.sort(arraylist); for(int i = 0; i <array.length; i ++)arraylist.add(array [i]); collections.sort(arraylist); for(int i = 0; i <array.length; i <array.length; i ++)arraylist.add(array [i]); collections.sort(arraylist); for(int i = 0; i <array.length; i <array.length; i ++)arraylist.add(array [i]); collections.sort(arraylist); for(int i = 0; i <array.length; i ++)array [i] = arraylist.get(i); system.out.print( "sorted array:"); for(int i = 0; i <array.length; i ++)system.out.print(array [i]+"、"); collections.reverse(arrayList); for(int i = 0; i <array.length; i ++)array [i] = arraylist.get(i); System.out.print( "逆並べ替えられた配列:"); for(int i = 0; i <array.length; i ++)system.out.print(array [i]+"、"); //ソート後に配列リストを破壊します。 arrayList = null; //この文は、Javaがすぐにゴミをリサイクルすることを示唆しています。もちろん、この文が大丈夫かどうかにかかわらず、Javaは実行プロセス中に自動的にゴミを削除します。 }メイン関数では、この方法は次のように呼ばれます。
system.out.println( "========= javaアレイsort starts ========="); arrayListSort(); System.out.println( "============ javaアレイsort end ===========);
次の実行結果を取得できます。
======= javaアレイソートスタート======
8,7,100,88,6,4,5,33,7、ソートされた配列:4,5,6,7,7,8,33,88,100、逆ソートアレイ:100,88,33,8,7,7,6,5,4、
======== javaアレイソートエンド======
さらに、以前の「Javaでのリストの使用に関する簡単な紹介」(クリックしてリンクを開く)にも同じことが当てはまります。
2。コレクションハッシュセット
さらに、コレクションハッシュセットがあります。これは、数学的なコレクションの概念とまったく同じです。 1つ以上の要素で構成されるセットは、セットと呼ばれます。ハッシュセットは次のとおりです。
1。決定論。セット内の要素は決定論的でなければなりません。これはナンセンスです。それは決定論的でなければなりません。まだ不確実なものを入れることはできますか?
2。相互異性、セットの要素は異なります。たとえば、a = {1、a}を設定してから、aは1に等しくなりません。つまり、2つの1をハッシュセットに入れた場合、自動的に1になります。
3。障害、セットには要素の順序はありません。したがって、ハッシュセットは、次の方法など、ソート操作を実行してはなりません。
public static void hashsettest(){hashset <object> hashset = new Hashset <Object>(); Hashset.Add(1); Hashset.Add(1); Hashset.Add(5); Hashset.Add(2.3); system.out.println( "simple addは、端から要素を追加することを意味します:" + hashset); system.out.println( "size()は、含まれる要素の数を見つけることができます:" + hashset.size()); Hashset.Remove(1); system.out.println( "remoot(1)は、要素 '1'を削除することを意味します:" + hashset); hashset.remove( "asd"); system.out.println( "'asd'要素がない場合、削除は何もしません:" + hashset); Hashset.Add(1.8888); System.out.println( "1.8888要素を追加:" +ハッシュセット); }メイン関数では、この方法を呼び出します。
System.out.println( "=========ハッシュセットデータ構造のテスト開始========"); hashsettest(); System.out.println( "=========ハッシュセットデータ構造の終了==============
結果は次のとおりです。
=======テストは、ハッシュセットデータ構造======から始まります
単純な追加は、最後から要素を追加することを意味します:[1、5、2.3]
size()には、含まれる要素の数を見つけることができます
削除(1)要素 '1'を削除することを意味します:[5、2.3]
「ASD」要素がなければ、削除は何もしません:[5、2.3]
要素1.8888を追加:[5、1.8888、2.3]
========ハッシュセットデータ構造のテスト端======
ハッシュセットには、add()メソッドとremove()メソッドがあります。 add()に追加された要素が順調です。 system.out.println()で印刷された結果は、異なる順序である場合があります。上記のベクトルとアレイリストと同じではありません。保存された要素がオブジェクトではない限り、collections.sort(arrayList);それらをソートするために使用できます。
3。デュアルハッシュマップ
ここでの使用方法は、基本的に上記のデータと同じであり、非常に簡単です。オブジェクトをマップに入れて、マップ内のオブジェクトを奪うことができますが、バイナリハッシュマップをトリプルに使用しようとするのは間違っています。オブジェクトにあまりにも多くの要素が含まれている場合は、クラスの使用を検討する必要があります。通常の変数とクラスクラスを妨げるJavaのコレクションクラスに夢中になる代わりに。
たとえば、次の方法は、ハッシュマップをトリプルに変更しようとするエラー操作を示しています。
public static void maptest(){system.out.println( "==================================================================文字列> System.out.println(bigmap.get( "test1")。 system.out.println(bigmap.get( "test2")。get( "key2"));間違って============================================================================================= =============================================================================== =============================================================================== =============================================================================== =============================================================================== =============================================================================== ===============================================================================メイン関数でこのコードを呼び出すと、次の実行結果が得られます。
========テストは、マップデータ構造=====から始まります
========マップの使用の開始======
{test1 = {key2 = 4、key1 = 3}、test2 = {key2 = 4、key1 = 3}}}
3
4
3
4
=======マップの使用の終わり======
========= MAPの正しい使用の開始======
{key3 = 3、key2 = 2、key1 = 1}
========マップの正しい使用の終わり======
========マップデータ構造の終了======
このプログラムはもともと非常に明白であり、{test1、key1,1}、{test1、key2,2}、{test2、key3,3}、{test2、key4,4}を構築しようとしています。
ただし、すべてのBigMapにはまだそのマップがあります。マップをクリアすると、test1のマップもクリアされます。誰かが複数のMap1、Map2などを作成しようとしました...そして、あなたはより明確に見えるために簡単なクラスを使用することもできます、そして、あなたは将来クラスでメソッドを書いて継承することができます
4。ノート
新しいベクトル、アレイリスト、ハッシュセット、またはハッシュマップを作成する場合、次のように書くことができます。
collection <string> a = new ArrayList <String>();
List <String> a = new Vector <String>();
コレクションインターフェイスから継承するアレイリスト、ベクトル、LinkedList、ハッシュセット、およびTreesetがあるため、MAPインターフェイスから継承するハッシュマップとハッシュテーブルがあるため、これはJavaの継承、多型、カプセル化、その他のクラスの問題です。もちろん、あなたの仲間がよりはっきりと見るために、ここで派手な名前を再生しないでください、クリアアレイリスト<integer> arrayList = new ArrayList <Integer>()を書きます; Javaのクラスを理解していないと誰もあえて言うことはありません。
上記はこの記事のすべての内容です。みんなの学習に役立つことを願っています。誰もがwulin.comをもっとサポートすることを願っています。