スモールワールド -- it seems like a small world!
戻る
スモールワールド -- it seems like a small world!
適当にいくつかの少数のリンクを与えることにより、隔たり次数が相当減少するのである。
$java MyModel
///////////////////////////////////////////////
// 隣接するノードを一覧表示します
///////////////////////////////////////////////
0
[19] [1]
1
[0] [2]
2
[1] [3]
3
[2] [4]
4
[3] [5]
5
[4] [6]
6
[5] [7]
7
[6] [8]
8
[7] [9]
9
[8] [10]
10
[9] [11]
11
[10] [12]
12
[11] [13]
13
[12] [14]
14
[13] [15]
15
[14] [16]
16
[15] [17]
17
[16] [18]
18
[17] [19]
19
[0] [18]
■クラスタ化指数= 2.000
■隔たり次数 = 5.263
///////////////////////////////////////////////
// 隣接するノードを一覧表示します
///////////////////////////////////////////////
0
[19] [1] [6] [13]
1
[0] [2]
2
[1] [3]
3
[2] [4]
4
[3] [5]
5
[4] [6]
6
[5] [7] [0]
7
[6] [8]
8
[7] [9]
9
[8] [10]
10
[9] [11] [19]
11
[10] [12]
12
[11] [13]
13
[12] [14] [0]
14
[13] [15]
15
[14] [16]
16
[15] [17]
17
[16] [18]
18
[17] [19]
19
[0] [18] [10]
■クラスタ化指数= 2.300
■隔たり次数 = 3.363
///////////////////////////////////////////////////////////////////////////////////////
0 から自身に戻るまでのPATH一覧
///////////////////////////////////////////////////////////////////////////////////////
[0]
[0] [19]
[0] [19] [18]
[0] [19] [18] [17]
[0] [19] [18] [17] [16]
[0] [19] [18] [17] [16] [15]
[0] [19] [18] [17] [16] [15] [14]
[0] [19] [18] [17] [16] [15] [14] [13]
[0] [19] [18] [17] [16] [15] [14] [13] [12]
[0] [19] [18] [17] [16] [15] [14] [13] [12] [11]
[0] [19] [18] [17] [16] [15] [14] [13] [12] [11] [10]
[0] [19] [18] [17] [16] [15] [14] [13] [12] [11] [10] [9]
[0] [19] [18] [17] [16] [15] [14] [13] [12] [11] [10] [9] [8]
[0] [19] [18] [17] [16] [15] [14] [13] [12] [11] [10] [9] [8] [7]
[0] [19] [18] [17] [16] [15] [14] [13] [12] [11] [10] [9] [8] [7] [6]
[0] [19] [18] [17] [16] [15] [14] [13] [12] [11] [10] [9] [8] [7] [6] [5]
[0] [19] [18] [17] [16] [15] [14] [13] [12] [11] [10] [9] [8] [7] [6] [5] [4]
[0] [19] [18] [17] [16] [15] [14] [13] [12] [11] [10] [9] [8] [7] [6] [5] [4] [3]
[0] [19] [18] [17] [16] [15] [14] [13] [12] [11] [10] [9] [8] [7] [6] [5] [4] [3] [2]
[0] [19] [18] [17] [16] [15] [14] [13] [12] [11] [10] [9] [8] [7] [6] [5] [4] [3] [2] [1]
[0] [19] [10]
[0] [19] [10] [9]
[0] [19] [10] [9] [8]
[0] [19] [10] [9] [8] [7]
[0] [19] [10] [9] [8] [7] [6]
[0] [19] [10] [9] [8] [7] [6] [5]
[0] [19] [10] [9] [8] [7] [6] [5] [4]
[0] [19] [10] [9] [8] [7] [6] [5] [4] [3]
[0] [19] [10] [9] [8] [7] [6] [5] [4] [3] [2]
[0] [19] [10] [9] [8] [7] [6] [5] [4] [3] [2] [1]
[0] [19] [10] [11]
[0] [19] [10] [11] [12]
[0] [19] [10] [11] [12] [13]
[0] [19] [10] [11] [12] [13] [14]
[0] [19] [10] [11] [12] [13] [14] [15]
[0] [19] [10] [11] [12] [13] [14] [15] [16]
[0] [19] [10] [11] [12] [13] [14] [15] [16] [17]
[0] [19] [10] [11] [12] [13] [14] [15] [16] [17] [18]
[0] [1]
[0] [1] [2]
[0] [1] [2] [3]
[0] [1] [2] [3] [4]
[0] [1] [2] [3] [4] [5]
[0] [1] [2] [3] [4] [5] [6]
[0] [1] [2] [3] [4] [5] [6] [7]
[0] [1] [2] [3] [4] [5] [6] [7] [8]
[0] [1] [2] [3] [4] [5] [6] [7] [8] [9]
[0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10]
[0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11]
[0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12]
[0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13]
[0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14]
[0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15]
[0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] [16]
[0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] [16] [17]
[0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] [16] [17] [18]
[0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] [16] [17] [18] [19]
[0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [19]
[0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [19] [18]
[0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [19] [18] [17]
[0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [19] [18] [17] [16]
[0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [19] [18] [17] [16] [15]
[0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [19] [18] [17] [16] [15] [14]
[0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [19] [18] [17] [16] [15] [14] [13]
[0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [19] [18] [17] [16] [15] [14] [13] [12]
[0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [19] [18] [17] [16] [15] [14] [13] [12] [11]
[0] [6]
[0] [6] [5]
[0] [6] [5] [4]
[0] [6] [5] [4] [3]
[0] [6] [5] [4] [3] [2]
[0] [6] [5] [4] [3] [2] [1]
[0] [6] [7]
[0] [6] [7] [8]
[0] [6] [7] [8] [9]
[0] [6] [7] [8] [9] [10]
[0] [6] [7] [8] [9] [10] [11]
[0] [6] [7] [8] [9] [10] [11] [12]
[0] [6] [7] [8] [9] [10] [11] [12] [13]
[0] [6] [7] [8] [9] [10] [11] [12] [13] [14]
[0] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15]
[0] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] [16]
[0] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] [16] [17]
[0] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] [16] [17] [18]
[0] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] [16] [17] [18] [19]
[0] [6] [7] [8] [9] [10] [19]
[0] [6] [7] [8] [9] [10] [19] [18]
[0] [6] [7] [8] [9] [10] [19] [18] [17]
[0] [6] [7] [8] [9] [10] [19] [18] [17] [16]
[0] [6] [7] [8] [9] [10] [19] [18] [17] [16] [15]
[0] [6] [7] [8] [9] [10] [19] [18] [17] [16] [15] [14]
[0] [6] [7] [8] [9] [10] [19] [18] [17] [16] [15] [14] [13]
[0] [6] [7] [8] [9] [10] [19] [18] [17] [16] [15] [14] [13] [12]
[0] [6] [7] [8] [9] [10] [19] [18] [17] [16] [15] [14] [13] [12] [11]
[0] [13]
[0] [13] [12]
[0] [13] [12] [11]
[0] [13] [12] [11] [10]
[0] [13] [12] [11] [10] [9]
[0] [13] [12] [11] [10] [9] [8]
[0] [13] [12] [11] [10] [9] [8] [7]
[0] [13] [12] [11] [10] [9] [8] [7] [6]
[0] [13] [12] [11] [10] [9] [8] [7] [6] [5]
[0] [13] [12] [11] [10] [9] [8] [7] [6] [5] [4]
[0] [13] [12] [11] [10] [9] [8] [7] [6] [5] [4] [3]
[0] [13] [12] [11] [10] [9] [8] [7] [6] [5] [4] [3] [2]
[0] [13] [12] [11] [10] [9] [8] [7] [6] [5] [4] [3] [2] [1]
[0] [13] [12] [11] [10] [19]
[0] [13] [12] [11] [10] [19] [18]
[0] [13] [12] [11] [10] [19] [18] [17]
[0] [13] [12] [11] [10] [19] [18] [17] [16]
[0] [13] [12] [11] [10] [19] [18] [17] [16] [15]
[0] [13] [12] [11] [10] [19] [18] [17] [16] [15] [14]
[0] [13] [14]
[0] [13] [14] [15]
[0] [13] [14] [15] [16]
[0] [13] [14] [15] [16] [17]
[0] [13] [14] [15] [16] [17] [18]
[0] [13] [14] [15] [16] [17] [18] [19]
[0] [13] [14] [15] [16] [17] [18] [19] [10]
[0] [13] [14] [15] [16] [17] [18] [19] [10] [9]
[0] [13] [14] [15] [16] [17] [18] [19] [10] [9] [8]
[0] [13] [14] [15] [16] [17] [18] [19] [10] [9] [8] [7]
[0] [13] [14] [15] [16] [17] [18] [19] [10] [9] [8] [7] [6]
[0] [13] [14] [15] [16] [17] [18] [19] [10] [9] [8] [7] [6] [5]
[0] [13] [14] [15] [16] [17] [18] [19] [10] [9] [8] [7] [6] [5] [4]
[0] [13] [14] [15] [16] [17] [18] [19] [10] [9] [8] [7] [6] [5] [4] [3]
[0] [13] [14] [15] [16] [17] [18] [19] [10] [9] [8] [7] [6] [5] [4] [3] [2]
[0] [13] [14] [15] [16] [17] [18] [19] [10] [9] [8] [7] [6] [5] [4] [3] [2] [1]
[0] [13] [14] [15] [16] [17] [18] [19] [10] [11]
[0] [13] [14] [15] [16] [17] [18] [19] [10] [11] [12]
----------------------------------------------------------
[0] [19] [18] [17] [16] [15] [14] [13] [12] [11] [10] [9] [8] [7] [6] [5] [4] [3] [2] [1]
[0] [19] [10] [9] [8] [7] [6] [5] [4] [3] [2] [1]
[0] [1]
[0] [6] [5] [4] [3] [2] [1]
[0] [13] [12] [11] [10] [9] [8] [7] [6] [5] [4] [3] [2] [1]
[0] [13] [14] [15] [16] [17] [18] [19] [10] [9] [8] [7] [6] [5] [4] [3] [2] [1]
最短経路のホップ数: 1
----------------------------------------------------------
[4] [3] [2] [1] [0] [19] [18] [17] [16] [15] [14] [13] [12] [11] [10] [9] [8]
[4] [3] [2] [1] [0] [19] [10] [9] [8]
[4] [3] [2] [1] [0] [6] [7] [8]
[4] [3] [2] [1] [0] [13] [12] [11] [10] [9] [8]
[4] [3] [2] [1] [0] [13] [14] [15] [16] [17] [18] [19] [10] [9] [8]
[4] [5] [6] [7] [8]
[4] [5] [6] [0] [19] [18] [17] [16] [15] [14] [13] [12] [11] [10] [9] [8]
[4] [5] [6] [0] [19] [10] [9] [8]
[4] [5] [6] [0] [13] [12] [11] [10] [9] [8]
[4] [5] [6] [0] [13] [14] [15] [16] [17] [18] [19] [10] [9] [8]
最短経路のホップ数: 4
///////////////////////////////////////////////
// 隣接するノードを一覧表示します
///////////////////////////////////////////////
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
///////////////////////////////////////////////
// 隣接するノードを一覧表示します
///////////////////////////////////////////////
0
[1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] [16] [17] [18] [19]
1
[0]
2
[0]
3
[0]
4
[0]
5
[0]
6
[0]
7
[0]
8
[0]
9
[0]
10
[0]
11
[0]
12
[0]
13
[0]
14
[0]
15
[0]
16
[0]
17
[0]
18
[0]
19
[0]
■クラスタ化指数= 1.900
■隔たり次数 = 1.900
::::::::::::::
Element.java
::::::::::::::
import java.util.*;
/**
$Id: graphtest.html,v 1.1 2009/06/22 16:12:11 kishi Exp kishi $
@author KISHI Yasuhiro
*/
public class Element {
private List links;
private String name;
public Element( String name ) {
this.name = name;
}
/** リンクを追加する */
public void addLink( Element element ) {
if ( links == null ) {
links = new LinkedList();
}
links.add( element );
}
/** 相手とリンクしているか否か */
public boolean hasRelationWith( Element counterElement ) {
return ( links != null ) && links.contains( counterElement );
}
public List getLinks() {
return links;
}
public String getName() {
return name;
}
/** 自身がもつリンクをクリアする */
public void deleteLinks() {
links.clear();
}
}
::::::::::::::
MyModel.java
::::::::::::::
import java.util.*;
/**
* $Id: graphtest.html,v 1.1 2009/06/22 16:12:11 kishi Exp kishi $
* @author KISHI Yasuhiro
* 2005.05.06 このモデルを使うクライアントからはElementを意識になくてもいいように変更
* 少ないリンク(クラスタ化指数に比例)で隔たり次数を小さくする方法を考えてみる
*/
public class MyModel {
/** Elementのインスタンスをリスト化したもの */
private List list;
/**
@param 要素数
*/
public MyModel( int count ) {
list = new LinkedList();
for ( int i = 0;i < count;i++ ) {
list.add( new Element( String.valueOf( i ) ) );
}
}
/** 指定した要素が持つリンクを全てクリアする */
public void deleteLinks( int index ) {
Element element = ( Element ) list.get( index );
element.deleteLinks();
}
/** クラスター化指数を求める */
public double getClusteredDegree() {
double degree = 0.0;
// 全要素を走査
int linkCount = 0;
Iterator iterator = list.iterator();
while ( iterator.hasNext() ) {
Element element = ( Element ) iterator.next();
List links = element.getLinks();
linkCount += links.size();
}
degree = ( double ) linkCount / list.size();
return degree;
}
/** 要素同士をつなぐ
* @param index1 要素の位置
* @param index2 要素の位置
*/
public void linkElements( int index1, int index2 ) {
Element e1 = ( Element ) list.get( index1 );
Element e2 = ( Element ) list.get( index2 );
if ( !e1.hasRelationWith( e2 ) ) {
e1.addLink( e2 );
}
if ( !e2.hasRelationWith( e1 ) ) {
e2.addLink( e1 );
}
}
/** ダンプする */
public void dumpList() {
System.out.println( "///////////////////////////////////////////////" );
System.out.println( "// 隣接するノードを一覧表示します" );
System.out.println( "///////////////////////////////////////////////" );
Iterator iterator = list.iterator();
while ( iterator.hasNext() ) {
Element element = ( Element ) iterator.next();
System.out.println( element.getName() );
// リンクしている要素を出力
System.out.print( "\t" );
List links = element.getLinks();
if ( links != null ) {
Iterator itrt = links.iterator();
while ( itrt.hasNext() ) {
Element linkedElement = ( Element ) itrt.next();
System.out.print( "[" + linkedElement.getName() + "] " );
}
System.out.println();
} else {
System.out.println( "*** has no link ***" );
}
}
System.out.println();
}
public List getList() {
return list;
}
/**
* 隔たり次数を求める
* -- 全要素に対して最短経路のホップ数を求めて、平均値を出せば、「隔たり次数」を求めることが可能
* @return 隔たり次数
*/
public double getDistantDegree() {
PathTraverser traverser = new PathTraverser( list );
int combinationCount = 0;
int distance = 0;
for ( int i = 0;i < list.size();i++ ) {
for ( int j = i + 1;j < list.size();j++ ) {
List combination = traverser.getAllPathsBetween( i, j );
int minimumHopCount = PathCombinationDumper.getMinimunHopCount( combination );
// System.out.println( i + "," + j);
// System.out.println("minimumHopCount="+minimumHopCount);
distance += minimumHopCount;
combinationCount++;
}
}
return ( double ) distance / combinationCount;
}
/** テスト用のメソッド */
static public void main( String[] args ) {
//-----------------------------------------------------------------
// 【初期状態】では単なる環状リンクになるように設定する
//-----------------------------------------------------------------
MyModel model = new MyModel( 20 );
List list = model.getList();
// 先頭末尾をリンクさせる
model.linkElements( 0, list.size() - 1 );
// 並び合う要素にリンクを設定する(先頭末尾以外)
for ( int i = 0;i < list.size() - 1;i++ ) {
model.linkElements( i, i + 1 );
}
model.dumpList();
// クラスター化指数を求める
System.out.printf( "■クラスタ化指数=%6.3f\n", model.getClusteredDegree() );
// 隔たり次数を求める
System.out.printf( "■隔たり次数 =%6.3f\n", model.getDistantDegree() );
System.out.println();
//--------------------------------------
// 適当にリンクを設定する
int index1 = ( int ) ( list.size() / 3 );
int index2 = ( int ) ( list.size() * 2 / 3 );
int index3 = ( int ) ( list.size() / 2 );
model.linkElements( 0, index1 );
model.linkElements( 0, index2 );
model.linkElements( list.size() - 1, index3 );
model.dumpList();
// クラスター化指数を求める
System.out.printf( "■クラスタ化指数=%6.3f\n", model.getClusteredDegree() );
// 隔たり次数を求める
System.out.printf( "■隔たり次数 =%6.3f\n", model.getDistantDegree() );
System.out.println();
//-------------------------------------------------------------
// 隔たり次数を求めるコンポーネントの動作確認用のコード
//-------------------------------------------------------------
PathTraverser traverser = new PathTraverser( list );
traverser.getAllPathsFrom( 0 );
List combination;
System.out.println( "----------------------------------------------------------" );
/* 0番目の要素から1番目の要素までへのパスを求める */
combination = traverser.getAllPathsBetween( 0, 1 );
PathCombinationDumper.dump( combination );
System.out.println( "最短経路のホップ数: " + PathCombinationDumper.getMinimunHopCount( combination ) );
System.out.println( "----------------------------------------------------------" );
/* 4番目の要素から8番目の要素までへのパスを求める */
combination = traverser.getAllPathsBetween( 4, 8 );
PathCombinationDumper.dump( combination );
System.out.println( "最短経路のホップ数: " + PathCombinationDumper.getMinimunHopCount( combination ) );
//----------------------------------------------------------------
// 理想的なリンク構造を試す
// 全要素を直接あるいは間接に繋ぐには最低N-1個のコネクションが必要
//----------------------------------------------------------------
// 一旦全てのリンクをクリア
for ( int i = 0;i < list.size();i++ ) {
model.deleteLinks( i );
}
model.dumpList();
// 要素0に対して残りの要素を全てリンクされる(→0がハブとなる)
for ( int i = 1;i < list.size();i++ ) {
model.linkElements( 0, i );
}
model.dumpList();
// クラスター化指数を求める
System.out.printf( "■クラスタ化指数=%6.3f\n", model.getClusteredDegree() );
// 隔たり次数を求める
System.out.printf( "■隔たり次数 =%6.3f\n", model.getDistantDegree() );
System.out.println();
}
}
::::::::::::::
PathCombinationDumper.java
::::::::::::::
import java.util.*;
/**
$Id: graphtest.html,v 1.1 2009/06/22 16:12:11 kishi Exp kishi $
@author KISHI Yasuhiro
*/
public class PathCombinationDumper {
static public void dump( List pathCombination ) {
Iterator iterator = pathCombination.iterator();
while ( iterator.hasNext() ) {
Stack path = ( Stack ) iterator.next();
Enumeration enumeration = path.elements();
while ( enumeration.hasMoreElements() ) {
Element e = ( Element ) enumeration.nextElement();
System.out.print( "[" + e.getName() + "] " );
}
System.out.println();
}
}
/** 最短経路を求める(あとで実装) */
static public void getShortestPath ( List pathCombination ) {
Iterator iterator = pathCombination.iterator();
while ( iterator.hasNext() ) {
Stack path = ( Stack ) iterator.next();
}
}
/** 最小ホップ数を求める */
static public int getMinimunHopCount ( List pathCombination ) {
int min = Integer.MAX_VALUE;
Iterator iterator = pathCombination.iterator();
while ( iterator.hasNext() ) {
Stack stack = ( Stack ) iterator.next();
// System.out.println("size=" + stack.size());
if ( stack.size() < min ) {
min = stack.size();
}
}
// 自身は含まないのでマイナス1する
return min -1;
}
}
::::::::::::::
PathTraverser.java
::::::::::::::
import java.util.*;
/**
$Id: graphtest.html,v 1.1 2009/06/22 16:12:11 kishi Exp kishi $
@author KISHI Yasuhiro
*/
public class PathTraverser {
private List list;
public PathTraverser( List list ) {
this.list = list;
}
public void getAllPathsFrom( int from ) {
Element fromElement = ( Element ) list.get( from );
//=================================================
// ある特定の要素から存在する経路を全走査
//=================================================
System.out.println();
System.out.println();
System.out.println( "///////////////////////////////////////////////////////////////////////////////////////" );
System.out.println( fromElement.getName() + " から自身に戻るまでのPATH一覧 " );
System.out.println( "///////////////////////////////////////////////////////////////////////////////////////" );
System.out.println();
Stack stack = new Stack();
traverseAll( fromElement, stack, 0 );
}
/** 再帰メソッド */
private void traverseAll( Element element, Stack stack, int depth ) {
/* --- DEBUG用
if ( depth > 5 ) {
return ;
}
*/
// スタック内に既に同一要素が存在する場合は先には進まない
if ( !stack.contains( element ) ) {
stack.push( element );
printAll( stack );
} else {
return ;
}
List links = element.getLinks();
Iterator iterator = links.iterator();
while ( iterator.hasNext() ) {
Element linkedElement = ( Element ) iterator.next();
// indent( depth );
// System.out.println( linkedElement.getName() );
traverseAll( linkedElement, stack, depth + 1 );
}
stack.pop();
}
public List getAllPathsBetween( int from, int to ) {
Element fromElement = ( Element ) list.get( from );
Element toElement = ( Element ) list.get( to );
//=================================================
// from,toによりPATHを求める
//=================================================
List pathCombination = new LinkedList();
// stack.setSize( 0 ); // スタックを空にする
Stack stack = new Stack();
retrievePaths( fromElement, toElement, stack, pathCombination );
return pathCombination;
}
private void retrievePaths( Element element, Element toElement, Stack stack , List pathCombination ) {
// スタック内に既に同一要素が存在する場合は先には進まない
if ( !stack.contains( element ) ) {
stack.push( element );
} else {
return ;
}
if ( element.equals( toElement ) ) {
// 目的の要素に達した場合に実体コピーをリンクに追加
pathCombination.add( ( Stack ) stack.clone() );
}
List links = element.getLinks();
Iterator iterator = links.iterator();
while ( iterator.hasNext() ) {
Element linkedElement = ( Element ) iterator.next();
// indent( depth );
// System.out.println( linkedElement.getName() );
retrievePaths( linkedElement, toElement, stack, pathCombination );
}
stack.pop();
}
private void indent( int depth ) {
for ( int i = 0;i < depth;i++ ) {
System.out.print( " " );
}
}
private void printAll( Stack stack ) {
Enumeration enumeration = stack.elements();
while ( enumeration.hasMoreElements() ) {
Element e = ( Element ) enumeration.nextElement();
System.out.print( "[" + e.getName() + "] " );
}
System.out.println();
}
}
::::::::::::::
StackTest.java
::::::::::::::
import java.util.*;
/**
$Id: graphtest.html,v 1.1 2009/06/22 16:12:11 kishi Exp kishi $
@author KISHI Yasuhiro
*/
public class StackTest {
static public void main( String[] args ) {
Stack stack = new Stack();
Element e1 = new Element( "John" );
Element e2 = new Element( "Paul" );
Element e3 = new Element( "George" );
Element e4 = new Element( "Ringo" );
push( stack, e1 );
push( stack, e2 );
push( stack, e3 );
push( stack, e4 );
// PEEKしてみる -- pop()のように要素を取り出さずに、参照のみ行う
Element top = ( Element ) stack.peek();
System.out.println( "一番最後に追加された要素は、" + top.getName() + " です。" );
// 要素が既にある場合に同じものを追加した場合の動作確認
push( stack, e3 );
for ( int i = 0;i < 5;i++ ) {
pop( stack );
}
}
static public void push( Stack stack, Element e ) {
if ( !stack.contains( e ) ) {
stack.push( e );
printAll( stack );
} else {
System.out.println( "既に、" + e.getName() + " はセットされています!" );
}
}
static public void pop( Stack stack ) {
if ( stack.size() > 0 ) {
stack.pop();
printAll( stack );
} else {
System.out.println( "取り出せる要素はもう残っていません!" );
}
}
static public void printAll( Stack stack ) {
Enumeration enumeration = stack.elements();
while ( enumeration.hasMoreElements() ) {
Element e = ( Element ) enumeration.nextElement();
System.out.print( "[" + e.getName() + "] " );
}
System.out.println();
}
}
/*
$ javap java.util.Stack
Compiled from "Stack.java"
public class java.util.Stack extends java.util.Vector{
public java.util.Stack();
public java.lang.Object push(java.lang.Object);
public synchronized java.lang.Object pop();
public synchronized java.lang.Object peek();
public boolean empty();
public synchronized int search(java.lang.Object);
}
$ javap java.util.Enumeration
Compiled from "Enumeration.java"
public interface java.util.Enumeration{
public abstract boolean hasMoreElements();
public abstract java.lang.Object nextElement();
}
$ javap java.util.Vector
Compiled from "Vector.java"
public class java.util.Vector extends java.util.AbstractList implements java.util.List,java.util.RandomAccess,java.lang.Cloneable,java.io.Serial
izable{
protected java.lang.Object[] elementData;
protected int elementCount;
protected int capacityIncrement;
public java.util.Vector(int, int);
public java.util.Vector(int);
public java.util.Vector();
public java.util.Vector(java.util.Collection);
public synchronized void copyInto(java.lang.Object[]);
public synchronized void trimToSize();
public synchronized void ensureCapacity(int);
public synchronized void setSize(int);
public synchronized int capacity();
public synchronized int size();
public synchronized boolean isEmpty();
public java.util.Enumeration elements();
public boolean contains(java.lang.Object);
public int indexOf(java.lang.Object);
public synchronized int indexOf(java.lang.Object, int);
public synchronized int lastIndexOf(java.lang.Object);
public synchronized int lastIndexOf(java.lang.Object, int);
public synchronized java.lang.Object elementAt(int);
public synchronized java.lang.Object firstElement();
public synchronized java.lang.Object lastElement();
public synchronized void setElementAt(java.lang.Object, int);
public synchronized void removeElementAt(int);
public synchronized void insertElementAt(java.lang.Object, int);
public synchronized void addElement(java.lang.Object);
public synchronized boolean removeElement(java.lang.Object);
public synchronized void removeAllElements();
public synchronized java.lang.Object clone();
public synchronized java.lang.Object[] toArray();
public synchronized java.lang.Object[] toArray(java.lang.Object[]);
public synchronized java.lang.Object get(int);
public synchronized java.lang.Object set(int, java.lang.Object);
public synchronized boolean add(java.lang.Object);
public boolean remove(java.lang.Object);
public void add(int, java.lang.Object);
public synchronized java.lang.Object remove(int);
public void clear();
public synchronized boolean containsAll(java.util.Collection);
public synchronized boolean addAll(java.util.Collection);
public synchronized boolean removeAll(java.util.Collection);
public synchronized boolean retainAll(java.util.Collection);
public synchronized boolean addAll(int, java.util.Collection);
public synchronized boolean equals(java.lang.Object);
public synchronized int hashCode();
public synchronized java.lang.String toString();
public synchronized java.util.List subList(int, int);
protected synchronized void removeRange(int, int);
}
*/
戻る