自己参照するリスト
初めてのPython 3章の演習問題より。
>>> L = [1, 2] >>> L [1, 2] >>> L.append(L) >>> L [1, 2, [...]] >>> L.append(L) >>> L [1, 2, [...], [...]] >>> L[3] [1, 2, [...], [...]] >>> if L[3] == L: ... print 'OK' ... OK >>> L[0] 1 >>> L[3][0] 1 >>> L[3][3][0] 1 >>>
Javaで同じことやったらどうなるんだろう? 実際にやってみた。
import java.util.ArrayList; public class ListTest { public static void main(String[] args) { ArrayList list = new ArrayList(); list.add("aaa"); list.add("bbb"); list.add(list); System.out.printf("list size : %d\n", list.size()); for (Object obj : list) { System.out.printf("list : %s\n", obj); if (obj instanceof ArrayList) { ArrayList nestedList = (ArrayList) obj; System.out.printf("nestedList size : %d\n", nestedList.size()); for (Object nestedObj : nestedList) { System.out.printf("nestedList : %s\n", nestedObj); } } } } } [実行結果] list size : 3 list : aaa list : bbb list : [aaa, bbb, (this Collection)] nestedList size : 3 nestedList : aaa nestedList : bbb nestedList : [aaa, bbb, (this Collection)]
pythonと同じように、自己参照しているみたい。自分を指すポインタをlistの要素に持っているというだけの話か。
追記:JavaScript(firebug console)でもやってみた。
>>> list = [1,2,3] [1, 2, 3] >>> list [1, 2, 3] >>> list[3] = list [1, 2, 3, [1, 2, 3, 1 more...]] >>> list[3] [1, 2, 3, [1, 2, 3, 1 more...]] >>> list[3][2] 3 >>> list[3][3][1] 2