28.47/8.62 YES 28.47/8.64 proof of /export/starexec/sandbox/benchmark/theBenchmark.jar 28.47/8.64 # AProVE Commit ID: 48fb2092695e11cc9f56e44b17a92a5f88ffb256 marcel 20180622 unpublished dirty 28.47/8.64 28.47/8.64 28.47/8.64 termination of the given Bare JBC problem could be proven: 28.47/8.64 28.47/8.64 (0) Bare JBC problem 28.47/8.64 (1) BareJBCToJBCProof [EQUIVALENT, 94 ms] 28.47/8.64 (2) JBC problem 28.47/8.64 (3) JBCToGraph [EQUIVALENT, 3510 ms] 28.47/8.64 (4) JBCTerminationGraph 28.47/8.64 (5) TerminationGraphToSCCProof [SOUND, 18 ms] 28.47/8.64 (6) AND 28.47/8.64 (7) JBCTerminationSCC 28.47/8.64 (8) SCCToIRSProof [SOUND, 273 ms] 28.47/8.64 (9) IRSwT 28.47/8.64 (10) IRSFormatTransformerProof [EQUIVALENT, 0 ms] 28.47/8.64 (11) IRSwT 28.47/8.64 (12) IRSwTTerminationDigraphProof [EQUIVALENT, 37 ms] 28.47/8.64 (13) IRSwT 28.47/8.64 (14) IntTRSCompressionProof [EQUIVALENT, 0 ms] 28.47/8.64 (15) IRSwT 28.47/8.64 (16) TempFilterProof [SOUND, 921 ms] 28.47/8.64 (17) IRSwT 28.47/8.64 (18) IRSwTTerminationDigraphProof [EQUIVALENT, 0 ms] 28.47/8.64 (19) IRSwT 28.47/8.64 (20) IntTRSUnneededArgumentFilterProof [EQUIVALENT, 0 ms] 28.47/8.64 (21) IRSwT 28.47/8.64 (22) TempFilterProof [SOUND, 2 ms] 28.47/8.64 (23) IRSwT 28.47/8.64 (24) IRSwTToQDPProof [SOUND, 0 ms] 28.47/8.64 (25) QDP 28.47/8.64 (26) QDPSizeChangeProof [EQUIVALENT, 0 ms] 28.47/8.64 (27) YES 28.47/8.64 (28) JBCTerminationSCC 28.47/8.64 (29) SCCToIRSProof [SOUND, 207 ms] 28.47/8.64 (30) IRSwT 28.47/8.64 (31) IRSFormatTransformerProof [EQUIVALENT, 0 ms] 28.47/8.64 (32) IRSwT 28.47/8.64 (33) IRSwTTerminationDigraphProof [EQUIVALENT, 47 ms] 28.47/8.64 (34) IRSwT 28.47/8.64 (35) IntTRSCompressionProof [EQUIVALENT, 4 ms] 28.47/8.64 (36) IRSwT 28.47/8.64 (37) TempFilterProof [SOUND, 23 ms] 28.47/8.64 (38) IRSwT 28.47/8.64 (39) IRSwTToQDPProof [SOUND, 0 ms] 28.47/8.64 (40) QDP 28.47/8.64 (41) QDPSizeChangeProof [EQUIVALENT, 0 ms] 28.47/8.64 (42) YES 28.47/8.64 (43) JBCTerminationSCC 28.47/8.64 (44) SCCToIRSProof [SOUND, 758 ms] 28.47/8.64 (45) IRSwT 28.47/8.64 (46) IRSFormatTransformerProof [EQUIVALENT, 0 ms] 28.47/8.64 (47) IRSwT 28.47/8.64 (48) IRSwTTerminationDigraphProof [EQUIVALENT, 0 ms] 28.47/8.64 (49) IRSwT 28.47/8.64 (50) IntTRSCompressionProof [EQUIVALENT, 0 ms] 28.47/8.64 (51) IRSwT 28.47/8.64 (52) TempFilterProof [SOUND, 6 ms] 28.47/8.64 (53) IntTRS 28.47/8.64 (54) PolynomialOrderProcessor [EQUIVALENT, 0 ms] 28.47/8.64 (55) YES 28.47/8.64 (56) JBCTerminationSCC 28.47/8.64 (57) SCCToIRSProof [SOUND, 285 ms] 28.47/8.64 (58) IRSwT 28.47/8.64 (59) IRSFormatTransformerProof [EQUIVALENT, 0 ms] 28.47/8.64 (60) IRSwT 28.47/8.64 (61) IRSwTTerminationDigraphProof [EQUIVALENT, 41 ms] 28.47/8.64 (62) IRSwT 28.47/8.64 (63) IntTRSCompressionProof [EQUIVALENT, 0 ms] 28.47/8.64 (64) IRSwT 28.47/8.64 (65) TempFilterProof [SOUND, 685 ms] 28.47/8.64 (66) IRSwT 28.47/8.64 (67) IRSwTTerminationDigraphProof [EQUIVALENT, 0 ms] 28.47/8.64 (68) IRSwT 28.47/8.64 (69) IntTRSUnneededArgumentFilterProof [EQUIVALENT, 0 ms] 28.47/8.64 (70) IRSwT 28.47/8.64 (71) TempFilterProof [SOUND, 1 ms] 28.47/8.64 (72) IRSwT 28.47/8.64 (73) IRSwTToQDPProof [SOUND, 0 ms] 28.47/8.64 (74) QDP 28.47/8.64 (75) QDPSizeChangeProof [EQUIVALENT, 0 ms] 28.47/8.64 (76) YES 28.47/8.64 (77) JBCTerminationSCC 28.47/8.64 (78) SCCToIRSProof [SOUND, 54 ms] 28.47/8.64 (79) IRSwT 28.47/8.64 (80) IRSFormatTransformerProof [EQUIVALENT, 2 ms] 28.47/8.64 (81) IRSwT 28.47/8.64 (82) IRSwTTerminationDigraphProof [EQUIVALENT, 28 ms] 28.47/8.64 (83) IRSwT 28.47/8.64 (84) IntTRSCompressionProof [EQUIVALENT, 0 ms] 28.47/8.64 (85) IRSwT 28.47/8.64 (86) TempFilterProof [SOUND, 46 ms] 28.47/8.64 (87) IntTRS 28.47/8.64 (88) PolynomialOrderProcessor [EQUIVALENT, 0 ms] 28.47/8.64 (89) YES 28.47/8.64 28.47/8.64 28.47/8.64 ---------------------------------------- 28.47/8.64 28.47/8.64 (0) 28.47/8.64 Obligation: 28.47/8.64 need to prove termination of the following program: 28.47/8.64 /* 28.47/8.64 * Copyright 1997-2006 Sun Microsystems, Inc. All Rights Reserved. 28.47/8.64 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 28.47/8.64 * 28.47/8.64 * This code is free software; you can redistribute it and/or modify it 28.47/8.64 * under the terms of the GNU General Public License version 2 only, as 28.47/8.64 * published by the Free Software Foundation. Sun designates this 28.47/8.64 * particular file as subject to the "Classpath" exception as provided 28.47/8.64 * by Sun in the LICENSE file that accompanied this code. 28.47/8.64 * 28.47/8.64 * This code is distributed in the hope that it will be useful, but WITHOUT 28.47/8.64 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 28.47/8.64 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 28.47/8.64 * version 2 for more details (a copy is included in the LICENSE file that 28.47/8.64 * accompanied this code). 28.47/8.64 * 28.47/8.64 * You should have received a copy of the GNU General Public License version 28.47/8.64 * 2 along with this work; if not, write to the Free Software Foundation, 28.47/8.64 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 28.47/8.64 * 28.47/8.64 * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, 28.47/8.64 * CA 95054 USA or visit www.sun.com if you need additional information or 28.47/8.64 * have any questions. 28.47/8.64 */ 28.47/8.64 28.47/8.64 package javaUtilEx; 28.47/8.64 28.47/8.64 /** 28.47/8.64 * This class provides a skeletal implementation of the Collection 28.47/8.64 * interface, to minimize the effort required to implement this interface.

28.47/8.64 * 28.47/8.64 * To implement an unmodifiable collection, the programmer needs only to 28.47/8.64 * extend this class and provide implementations for the iterator and 28.47/8.64 * size methods. (The iterator returned by the iterator 28.47/8.64 * method must implement hasNext and next.)

28.47/8.64 * 28.47/8.64 * To implement a modifiable collection, the programmer must additionally 28.47/8.64 * override this class's add method (which otherwise throws an 28.47/8.64 * UnsupportedOperationException), and the iterator returned by the 28.47/8.64 * iterator method must additionally implement its remove 28.47/8.64 * method.

28.47/8.64 * 28.47/8.64 * The programmer should generally provide a void (no argument) and 28.47/8.64 * Collection constructor, as per the recommendation in the 28.47/8.64 * Collection interface specification.

28.47/8.64 * 28.47/8.64 * The documentation for each non-abstract method in this class describes its 28.47/8.64 * implementation in detail. Each of these methods may be overridden if 28.47/8.64 * the collection being implemented admits a more efficient implementation.

28.47/8.64 * 28.47/8.64 * This class is a member of the 28.47/8.64 * 28.47/8.64 * Java Collections Framework. 28.47/8.64 * 28.47/8.64 * @author Josh Bloch 28.47/8.64 * @author Neal Gafter 28.47/8.64 * @see Collection 28.47/8.64 * @since 1.2 28.47/8.64 */ 28.47/8.64 28.47/8.64 public abstract class AbstractCollection implements Collection { 28.47/8.64 /** 28.47/8.64 * Sole constructor. (For invocation by subclass constructors, typically 28.47/8.64 * implicit.) 28.47/8.64 */ 28.47/8.64 protected AbstractCollection() { 28.47/8.64 } 28.47/8.64 28.47/8.64 // Query Operations 28.47/8.64 28.47/8.64 /** 28.47/8.64 * Returns an iterator over the elements contained in this collection. 28.47/8.64 * 28.47/8.64 * @return an iterator over the elements contained in this collection 28.47/8.64 */ 28.47/8.64 public abstract Iterator iterator(); 28.47/8.64 28.47/8.64 public abstract int size(); 28.47/8.64 28.47/8.64 /** 28.47/8.64 * {@inheritDoc} 28.47/8.64 * 28.47/8.64 *

This implementation returns size() == 0. 28.47/8.64 */ 28.47/8.64 public boolean isEmpty() { 28.47/8.64 return size() == 0; 28.47/8.64 } 28.47/8.64 28.47/8.64 /** 28.47/8.64 * {@inheritDoc} 28.47/8.64 * 28.47/8.64 *

This implementation iterates over the elements in the collection, 28.47/8.64 * checking each element in turn for equality with the specified element. 28.47/8.64 * 28.47/8.64 * @throws ClassCastException {@inheritDoc} 28.47/8.64 * @throws NullPointerException {@inheritDoc} 28.47/8.64 */ 28.47/8.64 public boolean contains(Object o) { 28.47/8.64 Iterator e = iterator(); 28.47/8.64 if (o==null) { 28.47/8.64 while (e.hasNext()) 28.47/8.64 if (e.next()==null) 28.47/8.64 return true; 28.47/8.64 } else { 28.47/8.64 while (e.hasNext()) 28.47/8.64 if (o.equals(e.next())) 28.47/8.64 return true; 28.47/8.64 } 28.47/8.64 return false; 28.47/8.64 } 28.47/8.64 28.47/8.64 // Modification Operations 28.47/8.64 28.47/8.64 /** 28.47/8.64 * {@inheritDoc} 28.47/8.64 * 28.47/8.64 *

This implementation always throws an 28.47/8.64 * UnsupportedOperationException. 28.47/8.64 * 28.47/8.64 * @throws UnsupportedOperationException {@inheritDoc} 28.47/8.64 * @throws ClassCastException {@inheritDoc} 28.47/8.64 * @throws NullPointerException {@inheritDoc} 28.47/8.64 * @throws IllegalArgumentException {@inheritDoc} 28.47/8.64 * @throws IllegalStateException {@inheritDoc} 28.47/8.64 */ 28.47/8.64 public boolean add(E e) { 28.47/8.64 throw new UnsupportedOperationException(); 28.47/8.64 } 28.47/8.64 28.47/8.64 /** 28.47/8.64 * {@inheritDoc} 28.47/8.64 * 28.47/8.64 *

This implementation iterates over the collection looking for the 28.47/8.64 * specified element. If it finds the element, it removes the element 28.47/8.64 * from the collection using the iterator's remove method. 28.47/8.64 * 28.47/8.64 *

Note that this implementation throws an 28.47/8.64 * UnsupportedOperationException if the iterator returned by this 28.47/8.64 * collection's iterator method does not implement the remove 28.47/8.64 * method and this collection contains the specified object. 28.47/8.64 * 28.47/8.64 * @throws UnsupportedOperationException {@inheritDoc} 28.47/8.64 * @throws ClassCastException {@inheritDoc} 28.47/8.64 * @throws NullPointerException {@inheritDoc} 28.47/8.64 */ 28.47/8.64 public boolean remove(Object o) { 28.47/8.64 Iterator e = iterator(); 28.47/8.64 if (o==null) { 28.47/8.64 while (e.hasNext()) { 28.47/8.64 if (e.next()==null) { 28.47/8.64 e.remove(); 28.47/8.64 return true; 28.47/8.64 } 28.47/8.64 } 28.47/8.64 } else { 28.47/8.64 while (e.hasNext()) { 28.47/8.64 if (o.equals(e.next())) { 28.47/8.64 e.remove(); 28.47/8.64 return true; 28.47/8.64 } 28.47/8.64 } 28.47/8.64 } 28.47/8.64 return false; 28.47/8.64 } 28.47/8.64 28.47/8.64 28.47/8.64 // Bulk Operations 28.47/8.64 28.47/8.64 /** 28.47/8.64 * {@inheritDoc} 28.47/8.64 * 28.47/8.64 *

This implementation iterates over the specified collection, 28.47/8.64 * checking each element returned by the iterator in turn to see 28.47/8.64 * if it's contained in this collection. If all elements are so 28.47/8.64 * contained true is returned, otherwise false. 28.47/8.64 * 28.47/8.64 * @throws ClassCastException {@inheritDoc} 28.47/8.64 * @throws NullPointerException {@inheritDoc} 28.47/8.64 * @see #contains(Object) 28.47/8.64 */ 28.47/8.64 public boolean containsAll(Collection c) { 28.47/8.64 Iterator e = c.iterator(); 28.47/8.64 while (e.hasNext()) 28.47/8.64 if (!contains(e.next())) 28.47/8.64 return false; 28.47/8.64 return true; 28.47/8.64 } 28.47/8.64 28.47/8.64 /** 28.47/8.64 * {@inheritDoc} 28.47/8.64 * 28.47/8.64 *

This implementation iterates over the specified collection, and adds 28.47/8.64 * each object returned by the iterator to this collection, in turn. 28.47/8.64 * 28.47/8.64 *

Note that this implementation will throw an 28.47/8.64 * UnsupportedOperationException unless add is 28.47/8.64 * overridden (assuming the specified collection is non-empty). 28.47/8.64 * 28.47/8.64 * @throws UnsupportedOperationException {@inheritDoc} 28.47/8.64 * @throws ClassCastException {@inheritDoc} 28.47/8.64 * @throws NullPointerException {@inheritDoc} 28.47/8.64 * @throws IllegalArgumentException {@inheritDoc} 28.47/8.64 * @throws IllegalStateException {@inheritDoc} 28.47/8.64 * 28.47/8.64 * @see #add(Object) 28.47/8.64 */ 28.47/8.64 public boolean addAll(Collection c) { 28.47/8.64 boolean modified = false; 28.47/8.64 Iterator e = c.iterator(); 28.47/8.64 while (e.hasNext()) { 28.47/8.64 if (add(e.next())) 28.47/8.64 modified = true; 28.47/8.64 } 28.47/8.64 return modified; 28.47/8.64 } 28.47/8.64 28.47/8.64 /** 28.47/8.64 * {@inheritDoc} 28.47/8.64 * 28.47/8.64 *

This implementation iterates over this collection, checking each 28.47/8.64 * element returned by the iterator in turn to see if it's contained 28.47/8.64 * in the specified collection. If it's so contained, it's removed from 28.47/8.64 * this collection with the iterator's remove method. 28.47/8.64 * 28.47/8.64 *

Note that this implementation will throw an 28.47/8.64 * UnsupportedOperationException if the iterator returned by the 28.47/8.64 * iterator method does not implement the remove method 28.47/8.64 * and this collection contains one or more elements in common with the 28.47/8.64 * specified collection. 28.47/8.64 * 28.47/8.64 * @throws UnsupportedOperationException {@inheritDoc} 28.47/8.64 * @throws ClassCastException {@inheritDoc} 28.47/8.64 * @throws NullPointerException {@inheritDoc} 28.47/8.64 * 28.47/8.64 * @see #remove(Object) 28.47/8.64 * @see #contains(Object) 28.47/8.64 */ 28.47/8.64 public boolean removeAll(Collection c) { 28.47/8.64 boolean modified = false; 28.47/8.64 Iterator e = iterator(); 28.47/8.64 while (e.hasNext()) { 28.47/8.64 if (c.contains(e.next())) { 28.47/8.64 e.remove(); 28.47/8.64 modified = true; 28.47/8.64 } 28.47/8.64 } 28.47/8.64 return modified; 28.47/8.64 } 28.47/8.64 28.47/8.64 /** 28.47/8.64 * {@inheritDoc} 28.47/8.64 * 28.47/8.64 *

This implementation iterates over this collection, checking each 28.47/8.64 * element returned by the iterator in turn to see if it's contained 28.47/8.64 * in the specified collection. If it's not so contained, it's removed 28.47/8.64 * from this collection with the iterator's remove method. 28.47/8.64 * 28.47/8.64 *

Note that this implementation will throw an 28.47/8.64 * UnsupportedOperationException if the iterator returned by the 28.47/8.64 * iterator method does not implement the remove method 28.47/8.64 * and this collection contains one or more elements not present in the 28.47/8.64 * specified collection. 28.47/8.64 * 28.47/8.64 * @throws UnsupportedOperationException {@inheritDoc} 28.47/8.64 * @throws ClassCastException {@inheritDoc} 28.47/8.64 * @throws NullPointerException {@inheritDoc} 28.47/8.64 * 28.47/8.64 * @see #remove(Object) 28.47/8.64 * @see #contains(Object) 28.47/8.64 */ 28.47/8.64 public boolean retainAll(Collection c) { 28.47/8.64 boolean modified = false; 28.47/8.64 Iterator e = iterator(); 28.47/8.64 while (e.hasNext()) { 28.47/8.64 if (!c.contains(e.next())) { 28.47/8.64 e.remove(); 28.47/8.64 modified = true; 28.47/8.64 } 28.47/8.64 } 28.47/8.64 return modified; 28.47/8.64 } 28.47/8.64 28.47/8.64 /** 28.47/8.64 * {@inheritDoc} 28.47/8.64 * 28.47/8.64 *

This implementation iterates over this collection, removing each 28.47/8.64 * element using the Iterator.remove operation. Most 28.47/8.64 * implementations will probably choose to override this method for 28.47/8.64 * efficiency. 28.47/8.64 * 28.47/8.64 *

Note that this implementation will throw an 28.47/8.64 * UnsupportedOperationException if the iterator returned by this 28.47/8.64 * collection's iterator method does not implement the 28.47/8.64 * remove method and this collection is non-empty. 28.47/8.64 * 28.47/8.64 * @throws UnsupportedOperationException {@inheritDoc} 28.47/8.64 */ 28.47/8.64 public void clear() { 28.47/8.64 Iterator e = iterator(); 28.47/8.64 while (e.hasNext()) { 28.47/8.64 e.next(); 28.47/8.64 e.remove(); 28.47/8.64 } 28.47/8.64 } 28.47/8.64 28.47/8.64 28.47/8.64 // String conversion 28.47/8.64 28.47/8.64 /** 28.47/8.64 * Returns a string representation of this collection. The string 28.47/8.64 * representation consists of a list of the collection's elements in the 28.47/8.64 * order they are returned by its iterator, enclosed in square brackets 28.47/8.64 * ("[]"). Adjacent elements are separated by the characters 28.47/8.64 * ", " (comma and space). Elements are converted to strings as 28.47/8.64 * by {@link String#valueOf(Object)}. 28.47/8.64 * 28.47/8.64 * @return a string representation of this collection 28.47/8.64 */ 28.47/8.64 public String toString() { 28.47/8.64 Iterator i = iterator(); 28.47/8.64 if (! i.hasNext()) 28.47/8.64 return "[]"; 28.47/8.64 28.47/8.64 String sb = ""; 28.47/8.64 sb = sb + "["; 28.47/8.64 for (;;) { 28.47/8.64 E e = i.next(); 28.47/8.64 sb = sb + (e == this ? "(this Collection)" : e); 28.47/8.64 if (! i.hasNext()) { 28.47/8.64 sb = sb + "]"; 28.47/8.64 return sb; 28.47/8.64 } 28.47/8.64 sb = sb + ", "; 28.47/8.64 } 28.47/8.64 } 28.47/8.64 28.47/8.64 } 28.47/8.64 28.47/8.64 28.47/8.64 /* 28.47/8.64 * Copyright 1997-2007 Sun Microsystems, Inc. All Rights Reserved. 28.47/8.64 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 28.47/8.64 * 28.47/8.64 * This code is free software; you can redistribute it and/or modify it 28.47/8.64 * under the terms of the GNU General Public License version 2 only, as 28.47/8.64 * published by the Free Software Foundation. Sun designates this 28.47/8.64 * particular file as subject to the "Classpath" exception as provided 28.47/8.64 * by Sun in the LICENSE file that accompanied this code. 28.47/8.64 * 28.47/8.64 * This code is distributed in the hope that it will be useful, but WITHOUT 28.47/8.64 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 28.47/8.64 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 28.47/8.64 * version 2 for more details (a copy is included in the LICENSE file that 28.47/8.64 * accompanied this code). 28.47/8.64 * 28.47/8.64 * You should have received a copy of the GNU General Public License version 28.47/8.64 * 2 along with this work; if not, write to the Free Software Foundation, 28.47/8.64 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 28.47/8.64 * 28.47/8.64 * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, 28.47/8.64 * CA 95054 USA or visit www.sun.com if you need additional information or 28.47/8.64 * have any questions. 28.47/8.64 */ 28.47/8.64 28.47/8.64 package javaUtilEx; 28.47/8.64 import javaUtilEx.Map.Entry; 28.47/8.64 28.47/8.64 /** 28.47/8.64 * This class provides a skeletal implementation of the Map 28.47/8.64 * interface, to minimize the effort required to implement this interface. 28.47/8.64 * 28.47/8.64 *

To implement an unmodifiable map, the programmer needs only to extend this 28.47/8.64 * class and provide an implementation for the entrySet method, which 28.47/8.64 * returns a set-view of the map's mappings. Typically, the returned set 28.47/8.64 * will, in turn, be implemented atop AbstractSet. This set should 28.47/8.64 * not support the add or remove methods, and its iterator 28.47/8.64 * should not support the remove method. 28.47/8.64 * 28.47/8.64 *

To implement a modifiable map, the programmer must additionally override 28.47/8.64 * this class's put method (which otherwise throws an 28.47/8.64 * UnsupportedOperationException), and the iterator returned by 28.47/8.64 * entrySet().iterator() must additionally implement its 28.47/8.64 * remove method. 28.47/8.64 * 28.47/8.64 *

The programmer should generally provide a void (no argument) and map 28.47/8.64 * constructor, as per the recommendation in the Map interface 28.47/8.64 * specification. 28.47/8.64 * 28.47/8.64 *

The documentation for each non-abstract method in this class describes its 28.47/8.64 * implementation in detail. Each of these methods may be overridden if the 28.47/8.64 * map being implemented admits a more efficient implementation. 28.47/8.64 * 28.47/8.64 *

This class is a member of the 28.47/8.64 * 28.47/8.64 * Java Collections Framework. 28.47/8.64 * 28.47/8.64 * @param the type of keys maintained by this map 28.47/8.64 * @param the type of mapped values 28.47/8.64 * 28.47/8.64 * @author Josh Bloch 28.47/8.64 * @author Neal Gafter 28.47/8.64 * @see Map 28.47/8.64 * @see Collection 28.47/8.64 * @since 1.2 28.47/8.64 */ 28.47/8.64 28.47/8.64 public abstract class AbstractMap implements Map { 28.47/8.64 /** 28.47/8.64 * Sole constructor. (For invocation by subclass constructors, typically 28.47/8.64 * implicit.) 28.47/8.64 */ 28.47/8.64 protected AbstractMap() { 28.47/8.64 } 28.47/8.64 28.47/8.64 // Query Operations 28.47/8.64 28.47/8.64 /** 28.47/8.64 * {@inheritDoc} 28.47/8.64 * 28.47/8.64 *

This implementation returns entrySet().size(). 28.47/8.64 */ 28.47/8.64 public int size() { 28.47/8.64 return entrySet().size(); 28.47/8.64 } 28.47/8.64 28.47/8.64 /** 28.47/8.64 * {@inheritDoc} 28.47/8.64 * 28.47/8.64 *

This implementation returns size() == 0. 28.47/8.64 */ 28.47/8.64 public boolean isEmpty() { 28.47/8.64 return size() == 0; 28.47/8.64 } 28.47/8.64 28.47/8.64 /** 28.47/8.64 * {@inheritDoc} 28.47/8.64 * 28.47/8.64 *

This implementation iterates over entrySet() searching 28.47/8.64 * for an entry with the specified value. If such an entry is found, 28.47/8.64 * true is returned. If the iteration terminates without 28.47/8.64 * finding such an entry, false is returned. Note that this 28.47/8.64 * implementation requires linear time in the size of the map. 28.47/8.64 * 28.47/8.64 * @throws ClassCastException {@inheritDoc} 28.47/8.64 * @throws NullPointerException {@inheritDoc} 28.47/8.64 */ 28.47/8.64 public boolean containsValue(Object value) { 28.47/8.64 Iterator> i = entrySet().iterator(); 28.47/8.64 if (value==null) { 28.47/8.64 while (i.hasNext()) { 28.47/8.64 Entry e = i.next(); 28.47/8.64 if (e.getValue()==null) 28.47/8.64 return true; 28.47/8.64 } 28.47/8.64 } else { 28.47/8.64 while (i.hasNext()) { 28.47/8.64 Entry e = i.next(); 28.47/8.64 if (value.equals(e.getValue())) 28.47/8.64 return true; 28.47/8.64 } 28.47/8.64 } 28.47/8.64 return false; 28.47/8.64 } 28.47/8.64 28.47/8.64 /** 28.47/8.64 * {@inheritDoc} 28.47/8.64 * 28.47/8.64 *

This implementation iterates over entrySet() searching 28.47/8.64 * for an entry with the specified key. If such an entry is found, 28.47/8.64 * true is returned. If the iteration terminates without 28.47/8.64 * finding such an entry, false is returned. Note that this 28.47/8.64 * implementation requires linear time in the size of the map; many 28.47/8.64 * implementations will override this method. 28.47/8.64 * 28.47/8.64 * @throws ClassCastException {@inheritDoc} 28.47/8.64 * @throws NullPointerException {@inheritDoc} 28.47/8.64 */ 28.47/8.64 public boolean containsKey(Object key) { 28.47/8.64 Iterator> i = entrySet().iterator(); 28.47/8.64 if (key==null) { 28.47/8.64 while (i.hasNext()) { 28.47/8.64 Entry e = i.next(); 28.47/8.64 if (e.getKey()==null) 28.47/8.64 return true; 28.47/8.64 } 28.47/8.64 } else { 28.47/8.64 while (i.hasNext()) { 28.47/8.64 Entry e = i.next(); 28.47/8.64 if (key.equals(e.getKey())) 28.47/8.64 return true; 28.47/8.64 } 28.47/8.64 } 28.47/8.64 return false; 28.47/8.64 } 28.47/8.64 28.47/8.64 /** 28.47/8.64 * {@inheritDoc} 28.47/8.64 * 28.47/8.64 *

This implementation iterates over entrySet() searching 28.47/8.64 * for an entry with the specified key. If such an entry is found, 28.47/8.64 * the entry's value is returned. If the iteration terminates without 28.47/8.64 * finding such an entry, null is returned. Note that this 28.47/8.64 * implementation requires linear time in the size of the map; many 28.47/8.64 * implementations will override this method. 28.47/8.64 * 28.47/8.64 * @throws ClassCastException {@inheritDoc} 28.47/8.64 * @throws NullPointerException {@inheritDoc} 28.47/8.64 */ 28.47/8.64 public V get(Object key) { 28.47/8.64 Iterator> i = entrySet().iterator(); 28.47/8.64 if (key==null) { 28.47/8.64 while (i.hasNext()) { 28.47/8.64 Entry e = i.next(); 28.47/8.64 if (e.getKey()==null) 28.47/8.64 return e.getValue(); 28.47/8.64 } 28.47/8.64 } else { 28.47/8.64 while (i.hasNext()) { 28.47/8.64 Entry e = i.next(); 28.47/8.64 if (key.equals(e.getKey())) 28.47/8.64 return e.getValue(); 28.47/8.64 } 28.47/8.64 } 28.47/8.64 return null; 28.47/8.64 } 28.47/8.64 28.47/8.64 28.47/8.64 // Modification Operations 28.47/8.64 28.47/8.64 /** 28.47/8.64 * {@inheritDoc} 28.47/8.64 * 28.47/8.64 *

This implementation always throws an 28.47/8.64 * UnsupportedOperationException. 28.47/8.64 * 28.47/8.64 * @throws UnsupportedOperationException {@inheritDoc} 28.47/8.64 * @throws ClassCastException {@inheritDoc} 28.47/8.64 * @throws NullPointerException {@inheritDoc} 28.47/8.64 * @throws IllegalArgumentException {@inheritDoc} 28.47/8.64 */ 28.47/8.64 public V put(K key, V value) { 28.47/8.64 throw new UnsupportedOperationException(); 28.47/8.64 } 28.47/8.64 28.47/8.64 /** 28.47/8.64 * {@inheritDoc} 28.47/8.64 * 28.47/8.64 *

This implementation iterates over entrySet() searching for an 28.47/8.64 * entry with the specified key. If such an entry is found, its value is 28.47/8.64 * obtained with its getValue operation, the entry is removed 28.47/8.64 * from the collection (and the backing map) with the iterator's 28.47/8.64 * remove operation, and the saved value is returned. If the 28.47/8.64 * iteration terminates without finding such an entry, null is 28.47/8.64 * returned. Note that this implementation requires linear time in the 28.47/8.64 * size of the map; many implementations will override this method. 28.47/8.64 * 28.47/8.64 *

Note that this implementation throws an 28.47/8.64 * UnsupportedOperationException if the entrySet 28.47/8.64 * iterator does not support the remove method and this map 28.47/8.64 * contains a mapping for the specified key. 28.47/8.64 * 28.47/8.64 * @throws UnsupportedOperationException {@inheritDoc} 28.47/8.64 * @throws ClassCastException {@inheritDoc} 28.47/8.64 * @throws NullPointerException {@inheritDoc} 28.47/8.64 */ 28.47/8.64 public V remove(Object key) { 28.47/8.64 Iterator> i = entrySet().iterator(); 28.47/8.64 Entry correctEntry = null; 28.47/8.64 if (key==null) { 28.47/8.64 while (correctEntry==null && i.hasNext()) { 28.47/8.64 Entry e = i.next(); 28.47/8.64 if (e.getKey()==null) 28.47/8.64 correctEntry = e; 28.47/8.64 } 28.47/8.64 } else { 28.47/8.64 while (correctEntry==null && i.hasNext()) { 28.47/8.64 Entry e = i.next(); 28.47/8.64 if (key.equals(e.getKey())) 28.47/8.64 correctEntry = e; 28.47/8.64 } 28.47/8.64 } 28.47/8.64 28.47/8.64 V oldValue = null; 28.47/8.64 if (correctEntry !=null) { 28.47/8.64 oldValue = correctEntry.getValue(); 28.47/8.64 i.remove(); 28.47/8.64 } 28.47/8.64 return oldValue; 28.47/8.64 } 28.47/8.64 28.47/8.64 28.47/8.64 // Bulk Operations 28.47/8.64 28.47/8.64 /** 28.47/8.64 * {@inheritDoc} 28.47/8.64 * 28.47/8.64 *

This implementation iterates over the specified map's 28.47/8.64 * entrySet() collection, and calls this map's put 28.47/8.64 * operation once for each entry returned by the iteration. 28.47/8.64 * 28.47/8.64 *

Note that this implementation throws an 28.47/8.64 * UnsupportedOperationException if this map does not support 28.47/8.64 * the put operation and the specified map is nonempty. 28.47/8.64 * 28.47/8.64 * @throws UnsupportedOperationException {@inheritDoc} 28.47/8.64 * @throws ClassCastException {@inheritDoc} 28.47/8.64 * @throws NullPointerException {@inheritDoc} 28.47/8.64 * @throws IllegalArgumentException {@inheritDoc} 28.47/8.64 */ 28.47/8.64 public void putAll(Map m) { 28.47/8.64 Iterator it = m.entrySet().iterator(); 28.47/8.64 while (it.hasNext()) { 28.47/8.64 Map.Entry e = (Map.Entry) it.next(); 28.47/8.64 put((K) e.getKey(), (V) e.getValue()); 28.47/8.64 } 28.47/8.64 } 28.47/8.64 28.47/8.64 /** 28.47/8.64 * {@inheritDoc} 28.47/8.64 * 28.47/8.64 *

This implementation calls entrySet().clear(). 28.47/8.64 * 28.47/8.64 *

Note that this implementation throws an 28.47/8.64 * UnsupportedOperationException if the entrySet 28.47/8.64 * does not support the clear operation. 28.47/8.64 * 28.47/8.64 * @throws UnsupportedOperationException {@inheritDoc} 28.47/8.64 */ 28.47/8.64 public void clear() { 28.47/8.64 entrySet().clear(); 28.47/8.64 } 28.47/8.64 28.47/8.64 28.47/8.64 // Views 28.47/8.64 28.47/8.64 /** 28.47/8.64 * Each of these fields are initialized to contain an instance of the 28.47/8.64 * appropriate view the first time this view is requested. The views are 28.47/8.64 * stateless, so there's no reason to create more than one of each. 28.47/8.64 */ 28.47/8.64 transient volatile Set keySet = null; 28.47/8.64 transient volatile Collection values = null; 28.47/8.64 28.47/8.64 /** 28.47/8.64 * {@inheritDoc} 28.47/8.64 * 28.47/8.64 *

This implementation returns a set that subclasses {@link AbstractSet}. 28.47/8.64 * The subclass's iterator method returns a "wrapper object" over this 28.47/8.64 * map's entrySet() iterator. The size method 28.47/8.64 * delegates to this map's size method and the 28.47/8.64 * contains method delegates to this map's 28.47/8.64 * containsKey method. 28.47/8.64 * 28.47/8.64 *

The set is created the first time this method is called, 28.47/8.64 * and returned in response to all subsequent calls. No synchronization 28.47/8.64 * is performed, so there is a slight chance that multiple calls to this 28.47/8.64 * method will not all return the same set. 28.47/8.64 */ 28.47/8.64 public Set keySet() { 28.47/8.64 if (keySet == null) { 28.47/8.64 keySet = new AbstractSet() { 28.47/8.64 public Iterator iterator() { 28.47/8.64 return new Iterator() { 28.47/8.64 private Iterator> i = entrySet().iterator(); 28.47/8.64 28.47/8.64 public boolean hasNext() { 28.47/8.64 return i.hasNext(); 28.47/8.64 } 28.47/8.64 28.47/8.64 public K next() { 28.47/8.64 return i.next().getKey(); 28.47/8.64 } 28.47/8.64 28.47/8.64 public void remove() { 28.47/8.64 i.remove(); 28.47/8.64 } 28.47/8.64 }; 28.47/8.64 } 28.47/8.64 28.47/8.64 public int size() { 28.47/8.64 return AbstractMap.this.size(); 28.47/8.64 } 28.47/8.64 28.47/8.64 public boolean isEmpty() { 28.47/8.64 return AbstractMap.this.isEmpty(); 28.47/8.64 } 28.47/8.64 28.47/8.64 public void clear() { 28.47/8.64 AbstractMap.this.clear(); 28.47/8.64 } 28.47/8.64 28.47/8.64 public boolean contains(Object k) { 28.47/8.64 return AbstractMap.this.containsKey(k); 28.47/8.64 } 28.47/8.64 28.47/8.64 public Object[] toArray() { 28.47/8.64 Object[] res = new Object[AbstractMap.this.size()]; 28.47/8.64 Iterator> it = entrySet().iterator(); 28.47/8.64 int i = 0; 28.47/8.64 while (it.hasNext()) 28.47/8.64 res[i++] = it.next().getKey(); 28.47/8.64 return res; 28.47/8.64 } 28.47/8.64 28.47/8.64 public T[] toArray(T[] a) { 28.47/8.64 a = (T[])java.lang.reflect.Array.newInstance( 28.47/8.64 a.getClass().getComponentType(), AbstractMap.this.size()); 28.47/8.64 Object[] res = a; 28.47/8.64 Iterator> it = entrySet().iterator(); 28.47/8.64 int i = 0; 28.47/8.64 while (it.hasNext()) 28.47/8.64 res[i++] = it.next().getKey(); 28.47/8.64 return a; 28.47/8.64 } 28.47/8.64 }; 28.47/8.64 } 28.47/8.64 return keySet; 28.47/8.64 } 28.47/8.64 28.47/8.64 /** 28.47/8.64 * {@inheritDoc} 28.47/8.64 * 28.47/8.64 *

This implementation returns a collection that subclasses {@link 28.47/8.64 * AbstractCollection}. The subclass's iterator method returns a 28.47/8.64 * "wrapper object" over this map's entrySet() iterator. 28.47/8.64 * The size method delegates to this map's size 28.47/8.64 * method and the contains method delegates to this map's 28.47/8.64 * containsValue method. 28.47/8.64 * 28.47/8.64 *

The collection is created the first time this method is called, and 28.47/8.64 * returned in response to all subsequent calls. No synchronization is 28.47/8.64 * performed, so there is a slight chance that multiple calls to this 28.47/8.64 * method will not all return the same collection. 28.47/8.64 */ 28.47/8.64 public Collection values() { 28.47/8.64 if (values == null) { 28.47/8.64 values = new AbstractCollection() { 28.47/8.64 public Iterator iterator() { 28.47/8.64 return new Iterator() { 28.47/8.64 private Iterator> i = entrySet().iterator(); 28.47/8.64 28.47/8.64 public boolean hasNext() { 28.47/8.64 return i.hasNext(); 28.47/8.64 } 28.47/8.64 28.47/8.64 public V next() { 28.47/8.64 return i.next().getValue(); 28.47/8.64 } 28.47/8.64 28.47/8.64 public void remove() { 28.47/8.64 i.remove(); 28.47/8.64 } 28.47/8.64 }; 28.47/8.64 } 28.47/8.64 28.47/8.64 public int size() { 28.47/8.64 return AbstractMap.this.size(); 28.47/8.64 } 28.47/8.64 28.47/8.64 public boolean isEmpty() { 28.47/8.64 return AbstractMap.this.isEmpty(); 28.47/8.64 } 28.47/8.64 28.47/8.64 public void clear() { 28.47/8.64 AbstractMap.this.clear(); 28.47/8.64 } 28.47/8.64 28.47/8.64 public boolean contains(Object v) { 28.47/8.64 return AbstractMap.this.containsValue(v); 28.47/8.64 } 28.47/8.64 }; 28.47/8.64 } 28.47/8.64 return values; 28.47/8.64 } 28.47/8.64 28.47/8.64 public abstract Set> entrySet(); 28.47/8.64 28.47/8.64 28.47/8.64 // Comparison and hashing 28.47/8.64 28.47/8.64 /** 28.47/8.64 * Compares the specified object with this map for equality. Returns 28.47/8.64 * true if the given object is also a map and the two maps 28.47/8.64 * represent the same mappings. More formally, two maps m1 and 28.47/8.64 * m2 represent the same mappings if 28.47/8.64 * m1.entrySet().equals(m2.entrySet()). This ensures that the 28.47/8.64 * equals method works properly across different implementations 28.47/8.64 * of the Map interface. 28.47/8.64 * 28.47/8.64 *

This implementation first checks if the specified object is this map; 28.47/8.64 * if so it returns true. Then, it checks if the specified 28.47/8.64 * object is a map whose size is identical to the size of this map; if 28.47/8.64 * not, it returns false. If so, it iterates over this map's 28.47/8.64 * entrySet collection, and checks that the specified map 28.47/8.64 * contains each mapping that this map contains. If the specified map 28.47/8.64 * fails to contain such a mapping, false is returned. If the 28.47/8.64 * iteration completes, true is returned. 28.47/8.64 * 28.47/8.64 * @param o object to be compared for equality with this map 28.47/8.64 * @return true if the specified object is equal to this map 28.47/8.64 */ 28.47/8.64 public boolean equals(Object o) { 28.47/8.64 if (o == this) 28.47/8.64 return true; 28.47/8.64 28.47/8.64 if (!(o instanceof Map)) 28.47/8.64 return false; 28.47/8.64 Map m = (Map) o; 28.47/8.64 if (m.size() != size()) 28.47/8.64 return false; 28.47/8.64 28.47/8.64 try { 28.47/8.64 Iterator> i = entrySet().iterator(); 28.47/8.64 while (i.hasNext()) { 28.47/8.64 Entry e = i.next(); 28.47/8.64 K key = e.getKey(); 28.47/8.64 V value = e.getValue(); 28.47/8.64 if (value == null) { 28.47/8.64 if (!(m.get(key)==null && m.containsKey(key))) 28.47/8.64 return false; 28.47/8.64 } else { 28.47/8.64 if (!value.equals(m.get(key))) 28.47/8.64 return false; 28.47/8.64 } 28.47/8.64 } 28.47/8.64 } catch (ClassCastException unused) { 28.47/8.64 return false; 28.47/8.64 } catch (NullPointerException unused) { 28.47/8.64 return false; 28.47/8.64 } 28.47/8.64 28.47/8.64 return true; 28.47/8.64 } 28.47/8.64 28.47/8.64 /** 28.47/8.64 * Returns the hash code value for this map. The hash code of a map is 28.47/8.64 * defined to be the sum of the hash codes of each entry in the map's 28.47/8.64 * entrySet() view. This ensures that m1.equals(m2) 28.47/8.64 * implies that m1.hashCode()==m2.hashCode() for any two maps 28.47/8.64 * m1 and m2, as required by the general contract of 28.47/8.64 * {@link Object#hashCode}. 28.47/8.64 * 28.47/8.64 *

This implementation iterates over entrySet(), calling 28.47/8.64 * {@link Map.Entry#hashCode hashCode()} on each element (entry) in the 28.47/8.64 * set, and adding up the results. 28.47/8.64 * 28.47/8.64 * @return the hash code value for this map 28.47/8.64 * @see Map.Entry#hashCode() 28.47/8.64 * @see Object#equals(Object) 28.47/8.64 * @see Set#equals(Object) 28.47/8.64 */ 28.47/8.64 public int hashCode() { 28.47/8.64 int h = 0; 28.47/8.64 Iterator> i = entrySet().iterator(); 28.47/8.64 while (i.hasNext()) 28.47/8.64 h += i.next().hashCode(); 28.47/8.64 return h; 28.47/8.64 } 28.47/8.64 28.47/8.64 /** 28.47/8.64 * Returns a string representation of this map. The string representation 28.47/8.64 * consists of a list of key-value mappings in the order returned by the 28.47/8.64 * map's entrySet view's iterator, enclosed in braces 28.47/8.64 * ("{}"). Adjacent mappings are separated by the characters 28.47/8.64 * ", " (comma and space). Each key-value mapping is rendered as 28.47/8.64 * the key followed by an equals sign ("=") followed by the 28.47/8.64 * associated value. Keys and values are converted to strings as by 28.47/8.64 * {@link String#valueOf(Object)}. 28.47/8.64 * 28.47/8.64 * @return a string representation of this map 28.47/8.64 */ 28.47/8.64 public String toString() { 28.47/8.64 Iterator> i = entrySet().iterator(); 28.47/8.64 if (! i.hasNext()) 28.47/8.64 return "{}"; 28.47/8.64 28.47/8.64 StringBuilder sb = new StringBuilder(); 28.47/8.64 sb.append('{'); 28.47/8.64 for (;;) { 28.47/8.64 Entry e = i.next(); 28.47/8.64 K key = e.getKey(); 28.47/8.64 V value = e.getValue(); 28.47/8.64 sb.append(key == this ? "(this Map)" : key); 28.47/8.64 sb.append('='); 28.47/8.64 sb.append(value == this ? "(this Map)" : value); 28.47/8.64 if (! i.hasNext()) 28.47/8.64 return sb.append('}').toString(); 28.47/8.64 sb.append(", "); 28.47/8.64 } 28.47/8.64 } 28.47/8.64 28.47/8.64 /** 28.47/8.64 * Returns a shallow copy of this AbstractMap instance: the keys 28.47/8.64 * and values themselves are not cloned. 28.47/8.64 * 28.47/8.64 * @return a shallow copy of this map 28.47/8.64 */ 28.47/8.64 protected Object clone() throws CloneNotSupportedException { 28.47/8.64 AbstractMap result = (AbstractMap)super.clone(); 28.47/8.64 result.keySet = null; 28.47/8.64 result.values = null; 28.47/8.64 return result; 28.47/8.64 } 28.47/8.64 28.47/8.64 /** 28.47/8.64 * Utility method for SimpleEntry and SimpleImmutableEntry. 28.47/8.64 * Test for equality, checking for nulls. 28.47/8.64 */ 28.47/8.64 private static boolean eq(Object o1, Object o2) { 28.47/8.64 return o1 == null ? o2 == null : o1.equals(o2); 28.47/8.64 } 28.47/8.64 28.47/8.64 // Implementation Note: SimpleEntry and SimpleImmutableEntry 28.47/8.64 // are distinct unrelated classes, even though they share 28.47/8.64 // some code. Since you can't add or subtract final-ness 28.47/8.64 // of a field in a subclass, they can't share representations, 28.47/8.64 // and the amount of duplicated code is too small to warrant 28.47/8.64 // exposing a common abstract class. 28.47/8.64 28.47/8.64 28.47/8.64 /** 28.47/8.64 * An Entry maintaining a key and a value. The value may be 28.47/8.64 * changed using the setValue method. This class 28.47/8.64 * facilitates the process of building custom map 28.47/8.64 * implementations. For example, it may be convenient to return 28.47/8.64 * arrays of SimpleEntry instances in method 28.47/8.64 * Map.entrySet().toArray. 28.47/8.64 * 28.47/8.64 * @since 1.6 28.47/8.64 */ 28.47/8.64 public static class SimpleEntry 28.47/8.64 implements Entry, java.io.Serializable 28.47/8.64 { 28.47/8.64 private static final long serialVersionUID = -8499721149061103585L; 28.47/8.64 28.47/8.64 private final K key; 28.47/8.64 private V value; 28.47/8.64 28.47/8.64 /** 28.47/8.64 * Creates an entry representing a mapping from the specified 28.47/8.64 * key to the specified value. 28.47/8.64 * 28.47/8.64 * @param key the key represented by this entry 28.47/8.64 * @param value the value represented by this entry 28.47/8.64 */ 28.47/8.64 public SimpleEntry(K key, V value) { 28.47/8.64 this.key = key; 28.47/8.64 this.value = value; 28.47/8.64 } 28.47/8.64 28.47/8.64 /** 28.47/8.64 * Creates an entry representing the same mapping as the 28.47/8.64 * specified entry. 28.47/8.64 * 28.47/8.64 * @param entry the entry to copy 28.47/8.64 */ 28.47/8.64 public SimpleEntry(Entry entry) { 28.47/8.64 this.key = entry.getKey(); 28.47/8.64 this.value = entry.getValue(); 28.47/8.64 } 28.47/8.64 28.47/8.64 /** 28.47/8.64 * Returns the key corresponding to this entry. 28.47/8.64 * 28.47/8.64 * @return the key corresponding to this entry 28.47/8.64 */ 28.47/8.64 public K getKey() { 28.47/8.64 return key; 28.47/8.64 } 28.47/8.64 28.47/8.64 /** 28.47/8.64 * Returns the value corresponding to this entry. 28.47/8.64 * 28.47/8.64 * @return the value corresponding to this entry 28.47/8.64 */ 28.47/8.64 public V getValue() { 28.47/8.64 return value; 28.47/8.64 } 28.47/8.64 28.47/8.64 /** 28.47/8.64 * Replaces the value corresponding to this entry with the specified 28.47/8.64 * value. 28.47/8.64 * 28.47/8.64 * @param value new value to be stored in this entry 28.47/8.64 * @return the old value corresponding to the entry 28.47/8.64 */ 28.47/8.64 public V setValue(V value) { 28.47/8.64 V oldValue = this.value; 28.47/8.64 this.value = value; 28.47/8.64 return oldValue; 28.47/8.64 } 28.47/8.64 28.47/8.64 /** 28.47/8.64 * Compares the specified object with this entry for equality. 28.47/8.64 * Returns {@code true} if the given object is also a map entry and 28.47/8.64 * the two entries represent the same mapping. More formally, two 28.47/8.64 * entries {@code e1} and {@code e2} represent the same mapping 28.47/8.64 * if

28.47/8.64	         *   (e1.getKey()==null ?
28.47/8.64	         *    e2.getKey()==null :
28.47/8.64	         *    e1.getKey().equals(e2.getKey()))
28.47/8.64	         *   &&
28.47/8.64	         *   (e1.getValue()==null ?
28.47/8.64	         *    e2.getValue()==null :
28.47/8.64	         *    e1.getValue().equals(e2.getValue()))
28.47/8.64 * This ensures that the {@code equals} method works properly across 28.47/8.64 * different implementations of the {@code Map.Entry} interface. 28.47/8.64 * 28.47/8.64 * @param o object to be compared for equality with this map entry 28.47/8.64 * @return {@code true} if the specified object is equal to this map 28.47/8.64 * entry 28.47/8.64 * @see #hashCode 28.47/8.64 */ 28.47/8.64 public boolean equals(Object o) { 28.47/8.64 if (!(o instanceof Map.Entry)) 28.47/8.64 return false; 28.47/8.64 Map.Entry e = (Map.Entry)o; 28.47/8.64 return eq(key, e.getKey()) && eq(value, e.getValue()); 28.47/8.64 } 28.47/8.64 28.47/8.64 /** 28.47/8.64 * Returns the hash code value for this map entry. The hash code 28.47/8.64 * of a map entry {@code e} is defined to be:
28.47/8.64	         *   (e.getKey()==null   ? 0 : e.getKey().hashCode()) ^
28.47/8.64	         *   (e.getValue()==null ? 0 : e.getValue().hashCode())
28.47/8.64 * This ensures that {@code e1.equals(e2)} implies that 28.47/8.64 * {@code e1.hashCode()==e2.hashCode()} for any two Entries 28.47/8.64 * {@code e1} and {@code e2}, as required by the general 28.47/8.64 * contract of {@link Object#hashCode}. 28.47/8.64 * 28.47/8.64 * @return the hash code value for this map entry 28.47/8.64 * @see #equals 28.47/8.64 */ 28.47/8.64 public int hashCode() { 28.47/8.64 return (key == null ? 0 : key.hashCode()) ^ 28.47/8.64 (value == null ? 0 : value.hashCode()); 28.47/8.64 } 28.47/8.64 28.47/8.64 /** 28.47/8.64 * Returns a String representation of this map entry. This 28.47/8.64 * implementation returns the string representation of this 28.47/8.64 * entry's key followed by the equals character ("=") 28.47/8.64 * followed by the string representation of this entry's value. 28.47/8.64 * 28.47/8.64 * @return a String representation of this map entry 28.47/8.64 */ 28.47/8.64 public String toString() { 28.47/8.64 return key + "=" + value; 28.47/8.64 } 28.47/8.64 28.47/8.64 } 28.47/8.64 28.47/8.64 /** 28.47/8.64 * An Entry maintaining an immutable key and value. This class 28.47/8.64 * does not support method setValue. This class may be 28.47/8.64 * convenient in methods that return thread-safe snapshots of 28.47/8.64 * key-value mappings. 28.47/8.64 * 28.47/8.64 * @since 1.6 28.47/8.64 */ 28.47/8.64 public static class SimpleImmutableEntry 28.47/8.64 implements Entry, java.io.Serializable 28.47/8.64 { 28.47/8.64 private static final long serialVersionUID = 7138329143949025153L; 28.47/8.64 28.47/8.64 private final K key; 28.47/8.64 private final V value; 28.47/8.64 28.47/8.64 /** 28.47/8.64 * Creates an entry representing a mapping from the specified 28.47/8.64 * key to the specified value. 28.47/8.64 * 28.47/8.64 * @param key the key represented by this entry 28.47/8.64 * @param value the value represented by this entry 28.47/8.64 */ 28.47/8.64 public SimpleImmutableEntry(K key, V value) { 28.47/8.64 this.key = key; 28.47/8.64 this.value = value; 28.47/8.64 } 28.47/8.64 28.47/8.64 /** 28.47/8.64 * Creates an entry representing the same mapping as the 28.47/8.64 * specified entry. 28.47/8.64 * 28.47/8.64 * @param entry the entry to copy 28.47/8.64 */ 28.47/8.64 public SimpleImmutableEntry(Entry entry) { 28.47/8.64 this.key = entry.getKey(); 28.47/8.64 this.value = entry.getValue(); 28.47/8.64 } 28.47/8.64 28.47/8.64 /** 28.47/8.64 * Returns the key corresponding to this entry. 28.47/8.64 * 28.47/8.64 * @return the key corresponding to this entry 28.47/8.64 */ 28.47/8.64 public K getKey() { 28.47/8.64 return key; 28.47/8.64 } 28.47/8.64 28.47/8.64 /** 28.47/8.64 * Returns the value corresponding to this entry. 28.47/8.64 * 28.47/8.64 * @return the value corresponding to this entry 28.47/8.64 */ 28.47/8.64 public V getValue() { 28.47/8.64 return value; 28.47/8.64 } 28.47/8.64 28.47/8.64 /** 28.47/8.64 * Replaces the value corresponding to this entry with the specified 28.47/8.64 * value (optional operation). This implementation simply throws 28.47/8.64 * UnsupportedOperationException, as this class implements 28.47/8.64 * an immutable map entry. 28.47/8.64 * 28.47/8.64 * @param value new value to be stored in this entry 28.47/8.64 * @return (Does not return) 28.47/8.64 * @throws UnsupportedOperationException always 28.47/8.64 */ 28.47/8.64 public V setValue(V value) { 28.47/8.64 throw new UnsupportedOperationException(); 28.47/8.64 } 28.47/8.64 28.47/8.64 /** 28.47/8.64 * Compares the specified object with this entry for equality. 28.47/8.64 * Returns {@code true} if the given object is also a map entry and 28.47/8.64 * the two entries represent the same mapping. More formally, two 28.47/8.65 * entries {@code e1} and {@code e2} represent the same mapping 28.47/8.65 * if
28.47/8.65	         *   (e1.getKey()==null ?
28.47/8.65	         *    e2.getKey()==null :
28.47/8.65	         *    e1.getKey().equals(e2.getKey()))
28.47/8.65	         *   &&
28.47/8.65	         *   (e1.getValue()==null ?
28.47/8.65	         *    e2.getValue()==null :
28.47/8.65	         *    e1.getValue().equals(e2.getValue()))
28.47/8.65 * This ensures that the {@code equals} method works properly across 28.47/8.65 * different implementations of the {@code Map.Entry} interface. 28.47/8.65 * 28.47/8.65 * @param o object to be compared for equality with this map entry 28.47/8.65 * @return {@code true} if the specified object is equal to this map 28.47/8.65 * entry 28.47/8.65 * @see #hashCode 28.47/8.65 */ 28.47/8.65 public boolean equals(Object o) { 28.47/8.65 if (!(o instanceof Map.Entry)) 28.47/8.65 return false; 28.47/8.65 Map.Entry e = (Map.Entry)o; 28.47/8.65 return eq(key, e.getKey()) && eq(value, e.getValue()); 28.47/8.65 } 28.47/8.65 28.47/8.65 /** 28.47/8.65 * Returns the hash code value for this map entry. The hash code 28.47/8.65 * of a map entry {@code e} is defined to be:
28.47/8.65	         *   (e.getKey()==null   ? 0 : e.getKey().hashCode()) ^
28.47/8.65	         *   (e.getValue()==null ? 0 : e.getValue().hashCode())
28.47/8.65 * This ensures that {@code e1.equals(e2)} implies that 28.47/8.65 * {@code e1.hashCode()==e2.hashCode()} for any two Entries 28.47/8.65 * {@code e1} and {@code e2}, as required by the general 28.47/8.65 * contract of {@link Object#hashCode}. 28.47/8.65 * 28.47/8.65 * @return the hash code value for this map entry 28.47/8.65 * @see #equals 28.47/8.65 */ 28.47/8.65 public int hashCode() { 28.47/8.65 return (key == null ? 0 : key.hashCode()) ^ 28.47/8.65 (value == null ? 0 : value.hashCode()); 28.47/8.65 } 28.47/8.65 28.47/8.65 /** 28.47/8.65 * Returns a String representation of this map entry. This 28.47/8.65 * implementation returns the string representation of this 28.47/8.65 * entry's key followed by the equals character ("=") 28.47/8.65 * followed by the string representation of this entry's value. 28.47/8.65 * 28.47/8.65 * @return a String representation of this map entry 28.47/8.65 */ 28.47/8.65 public String toString() { 28.47/8.65 return key + "=" + value; 28.47/8.65 } 28.47/8.65 28.47/8.65 } 28.47/8.65 28.47/8.65 } 28.47/8.65 28.47/8.65 28.47/8.65 /* 28.47/8.65 * Copyright 1997-2006 Sun Microsystems, Inc. All Rights Reserved. 28.47/8.65 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 28.47/8.65 * 28.47/8.65 * This code is free software; you can redistribute it and/or modify it 28.47/8.65 * under the terms of the GNU General Public License version 2 only, as 28.47/8.65 * published by the Free Software Foundation. Sun designates this 28.47/8.65 * particular file as subject to the "Classpath" exception as provided 28.47/8.65 * by Sun in the LICENSE file that accompanied this code. 28.47/8.65 * 28.47/8.65 * This code is distributed in the hope that it will be useful, but WITHOUT 28.47/8.65 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 28.47/8.65 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 28.47/8.65 * version 2 for more details (a copy is included in the LICENSE file that 28.47/8.65 * accompanied this code). 28.47/8.65 * 28.47/8.65 * You should have received a copy of the GNU General Public License version 28.47/8.65 * 2 along with this work; if not, write to the Free Software Foundation, 28.47/8.65 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 28.47/8.65 * 28.47/8.65 * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, 28.47/8.65 * CA 95054 USA or visit www.sun.com if you need additional information or 28.47/8.65 * have any questions. 28.47/8.65 */ 28.47/8.65 28.47/8.65 package javaUtilEx; 28.47/8.65 28.47/8.65 /** 28.47/8.65 * This class provides a skeletal implementation of the Set 28.47/8.65 * interface to minimize the effort required to implement this 28.47/8.65 * interface.

28.47/8.65 * 28.47/8.65 * The process of implementing a set by extending this class is identical 28.47/8.65 * to that of implementing a Collection by extending AbstractCollection, 28.47/8.65 * except that all of the methods and constructors in subclasses of this 28.47/8.65 * class must obey the additional constraints imposed by the Set 28.47/8.65 * interface (for instance, the add method must not permit addition of 28.47/8.65 * multiple instances of an object to a set).

28.47/8.65 * 28.47/8.65 * Note that this class does not override any of the implementations from 28.47/8.65 * the AbstractCollection class. It merely adds implementations 28.47/8.65 * for equals and hashCode.

28.47/8.65 * 28.47/8.65 * This class is a member of the 28.47/8.65 * 28.47/8.65 * Java Collections Framework. 28.47/8.65 * 28.47/8.65 * @param the type of elements maintained by this set 28.47/8.65 * 28.47/8.65 * @author Josh Bloch 28.47/8.65 * @author Neal Gafter 28.47/8.65 * @see Collection 28.47/8.65 * @see AbstractCollection 28.47/8.65 * @see Set 28.47/8.65 * @since 1.2 28.47/8.65 */ 28.47/8.65 28.47/8.65 public abstract class AbstractSet extends AbstractCollection implements Set { 28.47/8.65 /** 28.47/8.65 * Sole constructor. (For invocation by subclass constructors, typically 28.47/8.65 * implicit.) 28.47/8.65 */ 28.47/8.65 protected AbstractSet() { 28.47/8.65 } 28.47/8.65 28.47/8.65 // Comparison and hashing 28.47/8.65 28.47/8.65 /** 28.47/8.65 * Compares the specified object with this set for equality. Returns 28.47/8.65 * true if the given object is also a set, the two sets have 28.47/8.65 * the same size, and every member of the given set is contained in 28.47/8.65 * this set. This ensures that the equals method works 28.47/8.65 * properly across different implementations of the Set 28.47/8.65 * interface.

28.47/8.65 * 28.47/8.65 * This implementation first checks if the specified object is this 28.47/8.65 * set; if so it returns true. Then, it checks if the 28.47/8.65 * specified object is a set whose size is identical to the size of 28.47/8.65 * this set; if not, it returns false. If so, it returns 28.47/8.65 * containsAll((Collection) o). 28.47/8.65 * 28.47/8.65 * @param o object to be compared for equality with this set 28.47/8.65 * @return true if the specified object is equal to this set 28.47/8.65 */ 28.47/8.65 public boolean equals(Object o) { 28.47/8.65 if (o == this) 28.47/8.65 return true; 28.47/8.65 28.47/8.65 if (!(o instanceof Set)) 28.47/8.65 return false; 28.47/8.65 Collection c = (Collection) o; 28.47/8.65 if (c.size() != size()) 28.47/8.65 return false; 28.47/8.65 try { 28.47/8.65 return containsAll(c); 28.47/8.65 } catch (ClassCastException unused) { 28.47/8.65 return false; 28.47/8.65 } catch (NullPointerException unused) { 28.47/8.65 return false; 28.47/8.65 } 28.47/8.65 } 28.47/8.65 28.47/8.65 /** 28.47/8.65 * Returns the hash code value for this set. The hash code of a set is 28.47/8.65 * defined to be the sum of the hash codes of the elements in the set, 28.47/8.65 * where the hash code of a null element is defined to be zero. 28.47/8.65 * This ensures that s1.equals(s2) implies that 28.47/8.65 * s1.hashCode()==s2.hashCode() for any two sets s1 28.47/8.65 * and s2, as required by the general contract of 28.47/8.65 * {@link Object#hashCode}. 28.47/8.65 * 28.47/8.65 *

This implementation iterates over the set, calling the 28.47/8.65 * hashCode method on each element in the set, and adding up 28.47/8.65 * the results. 28.47/8.65 * 28.47/8.65 * @return the hash code value for this set 28.47/8.65 * @see Object#equals(Object) 28.47/8.65 * @see Set#equals(Object) 28.47/8.65 */ 28.47/8.65 public int hashCode() { 28.47/8.65 int h = 0; 28.47/8.65 Iterator i = iterator(); 28.47/8.65 while (i.hasNext()) { 28.47/8.65 E obj = i.next(); 28.47/8.65 if (obj != null) 28.47/8.65 h += obj.hashCode(); 28.47/8.65 } 28.47/8.65 return h; 28.47/8.65 } 28.47/8.65 28.47/8.65 /** 28.47/8.65 * Removes from this set all of its elements that are contained in the 28.47/8.65 * specified collection (optional operation). If the specified 28.47/8.65 * collection is also a set, this operation effectively modifies this 28.47/8.65 * set so that its value is the asymmetric set difference of 28.47/8.65 * the two sets. 28.47/8.65 * 28.47/8.65 *

This implementation determines which is the smaller of this set 28.47/8.65 * and the specified collection, by invoking the size 28.47/8.65 * method on each. If this set has fewer elements, then the 28.47/8.65 * implementation iterates over this set, checking each element 28.47/8.65 * returned by the iterator in turn to see if it is contained in 28.47/8.65 * the specified collection. If it is so contained, it is removed 28.47/8.65 * from this set with the iterator's remove method. If 28.47/8.65 * the specified collection has fewer elements, then the 28.47/8.65 * implementation iterates over the specified collection, removing 28.47/8.65 * from this set each element returned by the iterator, using this 28.47/8.65 * set's remove method. 28.47/8.65 * 28.47/8.65 *

Note that this implementation will throw an 28.47/8.65 * UnsupportedOperationException if the iterator returned by the 28.47/8.65 * iterator method does not implement the remove method. 28.47/8.65 * 28.47/8.65 * @param c collection containing elements to be removed from this set 28.47/8.65 * @return true if this set changed as a result of the call 28.47/8.65 * @throws UnsupportedOperationException if the removeAll operation 28.47/8.65 * is not supported by this set 28.47/8.65 * @throws ClassCastException if the class of an element of this set 28.47/8.65 * is incompatible with the specified collection (optional) 28.47/8.65 * @throws NullPointerException if this set contains a null element and the 28.47/8.65 * specified collection does not permit null elements (optional), 28.47/8.65 * or if the specified collection is null 28.47/8.65 * @see #remove(Object) 28.47/8.65 * @see #contains(Object) 28.47/8.65 */ 28.47/8.65 public boolean removeAll(Collection c) { 28.47/8.65 boolean modified = false; 28.47/8.65 28.47/8.65 if (size() > c.size()) { 28.47/8.65 for (Iterator i = c.iterator(); i.hasNext(); ) 28.47/8.65 modified |= remove(i.next()); 28.47/8.65 } else { 28.47/8.65 for (Iterator i = iterator(); i.hasNext(); ) { 28.47/8.65 if (c.contains(i.next())) { 28.47/8.65 i.remove(); 28.47/8.65 modified = true; 28.47/8.65 } 28.47/8.65 } 28.47/8.65 } 28.47/8.65 return modified; 28.47/8.65 } 28.47/8.65 28.47/8.65 } 28.47/8.65 28.47/8.65 28.47/8.65 /* 28.47/8.65 * Copyright 1997-2006 Sun Microsystems, Inc. All Rights Reserved. 28.47/8.65 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 28.47/8.65 * 28.47/8.65 * This code is free software; you can redistribute it and/or modify it 28.47/8.65 * under the terms of the GNU General Public License version 2 only, as 28.47/8.65 * published by the Free Software Foundation. Sun designates this 28.47/8.65 * particular file as subject to the "Classpath" exception as provided 28.47/8.65 * by Sun in the LICENSE file that accompanied this code. 28.47/8.65 * 28.47/8.65 * This code is distributed in the hope that it will be useful, but WITHOUT 28.47/8.65 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 28.47/8.65 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 28.47/8.65 * version 2 for more details (a copy is included in the LICENSE file that 28.47/8.65 * accompanied this code). 28.47/8.65 * 28.47/8.65 * You should have received a copy of the GNU General Public License version 28.47/8.65 * 2 along with this work; if not, write to the Free Software Foundation, 28.47/8.65 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 28.47/8.65 * 28.47/8.65 * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, 28.47/8.65 * CA 95054 USA or visit www.sun.com if you need additional information or 28.47/8.65 * have any questions. 28.47/8.65 */ 28.47/8.65 28.47/8.65 package javaUtilEx; 28.47/8.65 28.47/8.65 /** 28.47/8.65 * The root interface in the collection hierarchy. A collection 28.47/8.65 * represents a group of objects, known as its elements. Some 28.47/8.65 * collections allow duplicate elements and others do not. Some are ordered 28.47/8.65 * and others unordered. The JDK does not provide any direct 28.47/8.65 * implementations of this interface: it provides implementations of more 28.47/8.65 * specific subinterfaces like Set and List. This interface 28.47/8.65 * is typically used to pass collections around and manipulate them where 28.47/8.65 * maximum generality is desired. 28.47/8.65 * 28.47/8.65 *

Bags or multisets (unordered collections that may contain 28.47/8.65 * duplicate elements) should implement this interface directly. 28.47/8.65 * 28.47/8.65 *

All general-purpose Collection implementation classes (which 28.47/8.65 * typically implement Collection indirectly through one of its 28.47/8.65 * subinterfaces) should provide two "standard" constructors: a void (no 28.47/8.65 * arguments) constructor, which creates an empty collection, and a 28.47/8.65 * constructor with a single argument of type Collection, which 28.47/8.65 * creates a new collection with the same elements as its argument. In 28.47/8.65 * effect, the latter constructor allows the user to copy any collection, 28.47/8.65 * producing an equivalent collection of the desired implementation type. 28.47/8.65 * There is no way to enforce this convention (as interfaces cannot contain 28.47/8.65 * constructors) but all of the general-purpose Collection 28.47/8.65 * implementations in the Java platform libraries comply. 28.47/8.65 * 28.47/8.65 *

The "destructive" methods contained in this interface, that is, the 28.47/8.65 * methods that modify the collection on which they operate, are specified to 28.47/8.65 * throw UnsupportedOperationException if this collection does not 28.47/8.65 * support the operation. If this is the case, these methods may, but are not 28.47/8.65 * required to, throw an UnsupportedOperationException if the 28.47/8.65 * invocation would have no effect on the collection. For example, invoking 28.47/8.65 * the {@link #addAll(Collection)} method on an unmodifiable collection may, 28.47/8.65 * but is not required to, throw the exception if the collection to be added 28.47/8.65 * is empty. 28.47/8.65 * 28.47/8.65 *

Some collection implementations have restrictions on the elements that 28.47/8.65 * they may contain. For example, some implementations prohibit null elements, 28.47/8.65 * and some have restrictions on the types of their elements. Attempting to 28.47/8.65 * add an ineligible element throws an unchecked exception, typically 28.47/8.65 * NullPointerException or ClassCastException. Attempting 28.47/8.65 * to query the presence of an ineligible element may throw an exception, 28.47/8.65 * or it may simply return false; some implementations will exhibit the former 28.47/8.65 * behavior and some will exhibit the latter. More generally, attempting an 28.47/8.65 * operation on an ineligible element whose completion would not result in 28.47/8.65 * the insertion of an ineligible element into the collection may throw an 28.47/8.65 * exception or it may succeed, at the option of the implementation. 28.47/8.65 * Such exceptions are marked as "optional" in the specification for this 28.47/8.65 * interface. 28.47/8.65 * 28.47/8.65 *

It is up to each collection to determine its own synchronization 28.47/8.65 * policy. In the absence of a stronger guarantee by the 28.47/8.65 * implementation, undefined behavior may result from the invocation 28.47/8.65 * of any method on a collection that is being mutated by another 28.47/8.65 * thread; this includes direct invocations, passing the collection to 28.47/8.65 * a method that might perform invocations, and using an existing 28.47/8.65 * iterator to examine the collection. 28.47/8.65 * 28.47/8.65 *

Many methods in Collections Framework interfaces are defined in 28.47/8.65 * terms of the {@link Object#equals(Object) equals} method. For example, 28.47/8.65 * the specification for the {@link #contains(Object) contains(Object o)} 28.47/8.65 * method says: "returns true if and only if this collection 28.47/8.65 * contains at least one element e such that 28.47/8.65 * (o==null ? e==null : o.equals(e))." This specification should 28.47/8.65 * not be construed to imply that invoking Collection.contains 28.47/8.65 * with a non-null argument o will cause o.equals(e) to be 28.47/8.65 * invoked for any element e. Implementations are free to implement 28.47/8.65 * optimizations whereby the equals invocation is avoided, for 28.47/8.65 * example, by first comparing the hash codes of the two elements. (The 28.47/8.65 * {@link Object#hashCode()} specification guarantees that two objects with 28.47/8.65 * unequal hash codes cannot be equal.) More generally, implementations of 28.47/8.65 * the various Collections Framework interfaces are free to take advantage of 28.47/8.65 * the specified behavior of underlying {@link Object} methods wherever the 28.47/8.65 * implementor deems it appropriate. 28.47/8.65 * 28.47/8.65 *

This interface is a member of the 28.47/8.65 * 28.47/8.65 * Java Collections Framework. 28.47/8.65 * 28.47/8.65 * @author Josh Bloch 28.47/8.65 * @author Neal Gafter 28.47/8.65 * @see Set 28.47/8.65 * @see List 28.47/8.65 * @see Map 28.47/8.65 * @see SortedSet 28.47/8.65 * @see SortedMap 28.47/8.65 * @see HashSet 28.47/8.65 * @see TreeSet 28.47/8.65 * @see ArrayList 28.47/8.65 * @see LinkedList 28.47/8.65 * @see Vector 28.47/8.65 * @see Collections 28.47/8.65 * @see Arrays 28.47/8.65 * @see AbstractCollection 28.47/8.65 * @since 1.2 28.47/8.65 */ 28.47/8.65 28.47/8.65 public interface Collection { 28.47/8.65 // Query Operations 28.47/8.65 28.47/8.65 /** 28.47/8.65 * Returns the number of elements in this collection. If this collection 28.47/8.65 * contains more than Integer.MAX_VALUE elements, returns 28.47/8.65 * Integer.MAX_VALUE. 28.47/8.65 * 28.47/8.65 * @return the number of elements in this collection 28.47/8.65 */ 28.47/8.65 int size(); 28.47/8.65 28.47/8.65 /** 28.47/8.65 * Returns true if this collection contains no elements. 28.47/8.65 * 28.47/8.65 * @return true if this collection contains no elements 28.47/8.65 */ 28.47/8.65 boolean isEmpty(); 28.47/8.65 28.47/8.65 /** 28.47/8.65 * Returns true if this collection contains the specified element. 28.47/8.65 * More formally, returns true if and only if this collection 28.47/8.65 * contains at least one element e such that 28.47/8.65 * (o==null ? e==null : o.equals(e)). 28.47/8.65 * 28.47/8.65 * @param o element whose presence in this collection is to be tested 28.47/8.65 * @return true if this collection contains the specified 28.47/8.65 * element 28.47/8.65 * @throws ClassCastException if the type of the specified element 28.47/8.65 * is incompatible with this collection (optional) 28.47/8.65 * @throws NullPointerException if the specified element is null and this 28.47/8.65 * collection does not permit null elements (optional) 28.47/8.65 */ 28.47/8.65 boolean contains(Object o); 28.47/8.65 28.47/8.65 /** 28.47/8.65 * Returns an iterator over the elements in this collection. There are no 28.47/8.65 * guarantees concerning the order in which the elements are returned 28.47/8.65 * (unless this collection is an instance of some class that provides a 28.47/8.65 * guarantee). 28.47/8.65 * 28.47/8.65 * @return an Iterator over the elements in this collection 28.47/8.65 */ 28.47/8.65 Iterator iterator(); 28.47/8.65 28.47/8.65 // Modification Operations 28.47/8.65 28.47/8.65 /** 28.47/8.65 * Ensures that this collection contains the specified element (optional 28.47/8.65 * operation). Returns true if this collection changed as a 28.47/8.65 * result of the call. (Returns false if this collection does 28.47/8.65 * not permit duplicates and already contains the specified element.)

28.47/8.65 * 28.47/8.65 * Collections that support this operation may place limitations on what 28.47/8.65 * elements may be added to this collection. In particular, some 28.47/8.65 * collections will refuse to add null elements, and others will 28.47/8.65 * impose restrictions on the type of elements that may be added. 28.47/8.65 * Collection classes should clearly specify in their documentation any 28.47/8.65 * restrictions on what elements may be added.

28.47/8.65 * 28.47/8.65 * If a collection refuses to add a particular element for any reason 28.47/8.65 * other than that it already contains the element, it must throw 28.47/8.65 * an exception (rather than returning false). This preserves 28.47/8.65 * the invariant that a collection always contains the specified element 28.47/8.65 * after this call returns. 28.47/8.65 * 28.47/8.65 * @param e element whose presence in this collection is to be ensured 28.47/8.65 * @return true if this collection changed as a result of the 28.47/8.65 * call 28.47/8.65 * @throws UnsupportedOperationException if the add operation 28.47/8.65 * is not supported by this collection 28.47/8.65 * @throws ClassCastException if the class of the specified element 28.47/8.65 * prevents it from being added to this collection 28.47/8.65 * @throws NullPointerException if the specified element is null and this 28.47/8.65 * collection does not permit null elements 28.47/8.65 * @throws IllegalArgumentException if some property of the element 28.47/8.65 * prevents it from being added to this collection 28.47/8.65 * @throws IllegalStateException if the element cannot be added at this 28.47/8.65 * time due to insertion restrictions 28.47/8.65 */ 28.47/8.65 boolean add(E e); 28.47/8.65 28.47/8.65 /** 28.47/8.65 * Removes a single instance of the specified element from this 28.47/8.65 * collection, if it is present (optional operation). More formally, 28.47/8.65 * removes an element e such that 28.47/8.65 * (o==null ? e==null : o.equals(e)), if 28.47/8.65 * this collection contains one or more such elements. Returns 28.47/8.65 * true if this collection contained the specified element (or 28.47/8.65 * equivalently, if this collection changed as a result of the call). 28.47/8.65 * 28.47/8.65 * @param o element to be removed from this collection, if present 28.47/8.65 * @return true if an element was removed as a result of this call 28.47/8.65 * @throws ClassCastException if the type of the specified element 28.47/8.65 * is incompatible with this collection (optional) 28.47/8.65 * @throws NullPointerException if the specified element is null and this 28.47/8.65 * collection does not permit null elements (optional) 28.47/8.65 * @throws UnsupportedOperationException if the remove operation 28.47/8.65 * is not supported by this collection 28.47/8.65 */ 28.47/8.65 boolean remove(Object o); 28.47/8.65 28.47/8.65 28.47/8.65 // Bulk Operations 28.47/8.65 28.47/8.65 /** 28.47/8.65 * Returns true if this collection contains all of the elements 28.47/8.65 * in the specified collection. 28.47/8.65 * 28.47/8.65 * @param c collection to be checked for containment in this collection 28.47/8.65 * @return true if this collection contains all of the elements 28.47/8.65 * in the specified collection 28.47/8.65 * @throws ClassCastException if the types of one or more elements 28.47/8.65 * in the specified collection are incompatible with this 28.47/8.65 * collection (optional) 28.47/8.65 * @throws NullPointerException if the specified collection contains one 28.47/8.65 * or more null elements and this collection does not permit null 28.47/8.65 * elements (optional), or if the specified collection is null 28.47/8.65 * @see #contains(Object) 28.47/8.65 */ 28.47/8.65 boolean containsAll(Collection c); 28.47/8.65 28.47/8.65 /** 28.47/8.65 * Adds all of the elements in the specified collection to this collection 28.47/8.65 * (optional operation). The behavior of this operation is undefined if 28.47/8.65 * the specified collection is modified while the operation is in progress. 28.47/8.65 * (This implies that the behavior of this call is undefined if the 28.47/8.65 * specified collection is this collection, and this collection is 28.47/8.65 * nonempty.) 28.47/8.65 * 28.47/8.65 * @param c collection containing elements to be added to this collection 28.47/8.65 * @return true if this collection changed as a result of the call 28.47/8.65 * @throws UnsupportedOperationException if the addAll operation 28.47/8.65 * is not supported by this collection 28.47/8.65 * @throws ClassCastException if the class of an element of the specified 28.47/8.65 * collection prevents it from being added to this collection 28.47/8.65 * @throws NullPointerException if the specified collection contains a 28.47/8.65 * null element and this collection does not permit null elements, 28.47/8.65 * or if the specified collection is null 28.47/8.65 * @throws IllegalArgumentException if some property of an element of the 28.47/8.65 * specified collection prevents it from being added to this 28.47/8.65 * collection 28.47/8.65 * @throws IllegalStateException if not all the elements can be added at 28.47/8.65 * this time due to insertion restrictions 28.47/8.65 * @see #add(Object) 28.47/8.65 */ 28.47/8.65 boolean addAll(Collection c); 28.47/8.65 28.47/8.65 /** 28.47/8.65 * Removes all of this collection's elements that are also contained in the 28.47/8.65 * specified collection (optional operation). After this call returns, 28.47/8.65 * this collection will contain no elements in common with the specified 28.47/8.65 * collection. 28.47/8.65 * 28.47/8.65 * @param c collection containing elements to be removed from this collection 28.47/8.65 * @return true if this collection changed as a result of the 28.47/8.65 * call 28.47/8.65 * @throws UnsupportedOperationException if the removeAll method 28.47/8.65 * is not supported by this collection 28.47/8.65 * @throws ClassCastException if the types of one or more elements 28.47/8.65 * in this collection are incompatible with the specified 28.47/8.65 * collection (optional) 28.47/8.65 * @throws NullPointerException if this collection contains one or more 28.47/8.65 * null elements and the specified collection does not support 28.47/8.65 * null elements (optional), or if the specified collection is null 28.47/8.65 * @see #remove(Object) 28.47/8.65 * @see #contains(Object) 28.47/8.65 */ 28.47/8.65 boolean removeAll(Collection c); 28.47/8.65 28.47/8.65 /** 28.47/8.65 * Retains only the elements in this collection that are contained in the 28.47/8.65 * specified collection (optional operation). In other words, removes from 28.47/8.65 * this collection all of its elements that are not contained in the 28.47/8.65 * specified collection. 28.47/8.65 * 28.47/8.65 * @param c collection containing elements to be retained in this collection 28.47/8.65 * @return true if this collection changed as a result of the call 28.47/8.65 * @throws UnsupportedOperationException if the retainAll operation 28.47/8.65 * is not supported by this collection 28.47/8.65 * @throws ClassCastException if the types of one or more elements 28.47/8.65 * in this collection are incompatible with the specified 28.47/8.65 * collection (optional) 28.47/8.65 * @throws NullPointerException if this collection contains one or more 28.47/8.65 * null elements and the specified collection does not permit null 28.47/8.65 * elements (optional), or if the specified collection is null 28.47/8.65 * @see #remove(Object) 28.47/8.65 * @see #contains(Object) 28.47/8.65 */ 28.47/8.65 boolean retainAll(Collection c); 28.47/8.65 28.47/8.65 /** 28.47/8.65 * Removes all of the elements from this collection (optional operation). 28.47/8.65 * The collection will be empty after this method returns. 28.47/8.65 * 28.47/8.65 * @throws UnsupportedOperationException if the clear operation 28.47/8.65 * is not supported by this collection 28.47/8.65 */ 28.47/8.65 void clear(); 28.47/8.65 28.47/8.65 28.47/8.65 // Comparison and hashing 28.47/8.65 28.47/8.65 /** 28.47/8.65 * Compares the specified object with this collection for equality.

28.47/8.65 * 28.47/8.65 * While the Collection interface adds no stipulations to the 28.47/8.65 * general contract for the Object.equals, programmers who 28.47/8.65 * implement the Collection interface "directly" (in other words, 28.47/8.65 * create a class that is a Collection but is not a Set 28.47/8.65 * or a List) must exercise care if they choose to override the 28.47/8.65 * Object.equals. It is not necessary to do so, and the simplest 28.47/8.65 * course of action is to rely on Object's implementation, but 28.47/8.65 * the implementor may wish to implement a "value comparison" in place of 28.47/8.65 * the default "reference comparison." (The List and 28.47/8.65 * Set interfaces mandate such value comparisons.)

28.47/8.65 * 28.47/8.65 * The general contract for the Object.equals method states that 28.47/8.65 * equals must be symmetric (in other words, a.equals(b) if and 28.47/8.65 * only if b.equals(a)). The contracts for List.equals 28.47/8.65 * and Set.equals state that lists are only equal to other lists, 28.47/8.65 * and sets to other sets. Thus, a custom equals method for a 28.47/8.65 * collection class that implements neither the List nor 28.47/8.65 * Set interface must return false when this collection 28.47/8.65 * is compared to any list or set. (By the same logic, it is not possible 28.47/8.65 * to write a class that correctly implements both the Set and 28.47/8.65 * List interfaces.) 28.47/8.65 * 28.47/8.65 * @param o object to be compared for equality with this collection 28.47/8.65 * @return true if the specified object is equal to this 28.47/8.65 * collection 28.47/8.65 * 28.47/8.65 * @see Object#equals(Object) 28.47/8.65 * @see Set#equals(Object) 28.47/8.65 * @see List#equals(Object) 28.47/8.65 */ 28.47/8.65 boolean equals(Object o); 28.47/8.65 28.47/8.65 /** 28.47/8.65 * Returns the hash code value for this collection. While the 28.47/8.65 * Collection interface adds no stipulations to the general 28.47/8.65 * contract for the Object.hashCode method, programmers should 28.47/8.65 * take note that any class that overrides the Object.equals 28.47/8.65 * method must also override the Object.hashCode method in order 28.47/8.65 * to satisfy the general contract for the Object.hashCodemethod. 28.47/8.65 * In particular, c1.equals(c2) implies that 28.47/8.65 * c1.hashCode()==c2.hashCode(). 28.47/8.65 * 28.47/8.65 * @return the hash code value for this collection 28.47/8.65 * 28.47/8.65 * @see Object#hashCode() 28.47/8.65 * @see Object#equals(Object) 28.47/8.65 */ 28.47/8.65 int hashCode(); 28.47/8.65 } 28.47/8.65 28.47/8.65 28.47/8.65 /* 28.47/8.65 * Copyright 1997-2006 Sun Microsystems, Inc. All Rights Reserved. 28.47/8.65 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 28.47/8.65 * 28.47/8.65 * This code is free software; you can redistribute it and/or modify it 28.47/8.65 * under the terms of the GNU General Public License version 2 only, as 28.47/8.65 * published by the Free Software Foundation. Sun designates this 28.47/8.65 * particular file as subject to the "Classpath" exception as provided 28.47/8.65 * by Sun in the LICENSE file that accompanied this code. 28.47/8.65 * 28.47/8.65 * This code is distributed in the hope that it will be useful, but WITHOUT 28.47/8.65 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 28.47/8.65 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 28.47/8.65 * version 2 for more details (a copy is included in the LICENSE file that 28.47/8.65 * accompanied this code). 28.47/8.65 * 28.47/8.65 * You should have received a copy of the GNU General Public License version 28.47/8.65 * 2 along with this work; if not, write to the Free Software Foundation, 28.47/8.65 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 28.47/8.65 * 28.47/8.65 * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, 28.47/8.65 * CA 95054 USA or visit www.sun.com if you need additional information or 28.47/8.65 * have any questions. 28.47/8.65 */ 28.47/8.65 28.47/8.65 package javaUtilEx; 28.47/8.65 28.47/8.65 /** 28.47/8.65 * This exception may be thrown by methods that have detected concurrent 28.47/8.65 * modification of an object when such modification is not permissible. 28.47/8.65 *

28.47/8.65 * For example, it is not generally permissible for one thread to modify a Collection 28.47/8.65 * while another thread is iterating over it. In general, the results of the 28.47/8.65 * iteration are undefined under these circumstances. Some Iterator 28.47/8.65 * implementations (including those of all the general purpose collection implementations 28.47/8.65 * provided by the JRE) may choose to throw this exception if this behavior is 28.47/8.65 * detected. Iterators that do this are known as fail-fast iterators, 28.47/8.65 * as they fail quickly and cleanly, rather that risking arbitrary, 28.47/8.65 * non-deterministic behavior at an undetermined time in the future. 28.47/8.65 *

28.47/8.65 * Note that this exception does not always indicate that an object has 28.47/8.65 * been concurrently modified by a different thread. If a single 28.47/8.65 * thread issues a sequence of method invocations that violates the 28.47/8.65 * contract of an object, the object may throw this exception. For 28.47/8.65 * example, if a thread modifies a collection directly while it is 28.47/8.65 * iterating over the collection with a fail-fast iterator, the iterator 28.47/8.65 * will throw this exception. 28.47/8.65 * 28.47/8.65 *

Note that fail-fast behavior cannot be guaranteed as it is, generally 28.47/8.65 * speaking, impossible to make any hard guarantees in the presence of 28.47/8.65 * unsynchronized concurrent modification. Fail-fast operations 28.47/8.65 * throw ConcurrentModificationException on a best-effort basis. 28.47/8.65 * Therefore, it would be wrong to write a program that depended on this 28.47/8.65 * exception for its correctness: ConcurrentModificationException 28.47/8.65 * should be used only to detect bugs. 28.47/8.65 * 28.47/8.65 * @author Josh Bloch 28.47/8.65 * @see Collection 28.47/8.65 * @see Iterator 28.47/8.65 * @see ListIterator 28.47/8.65 * @see Vector 28.47/8.65 * @see LinkedList 28.47/8.65 * @see HashSet 28.47/8.65 * @see Hashtable 28.47/8.65 * @see TreeMap 28.47/8.65 * @see AbstractList 28.47/8.65 * @since 1.2 28.47/8.65 */ 28.47/8.65 public class ConcurrentModificationException extends RuntimeException { 28.47/8.65 /** 28.47/8.65 * Constructs a ConcurrentModificationException with no 28.47/8.65 * detail message. 28.47/8.65 */ 28.47/8.65 public ConcurrentModificationException() { 28.47/8.65 } 28.47/8.65 28.47/8.65 /** 28.47/8.65 * Constructs a ConcurrentModificationException with the 28.47/8.65 * specified detail message. 28.47/8.65 * 28.47/8.65 * @param message the detail message pertaining to this exception. 28.47/8.65 */ 28.47/8.65 public ConcurrentModificationException(String message) { 28.47/8.65 super(message); 28.47/8.65 } 28.47/8.65 } 28.47/8.65 28.47/8.65 28.47/8.65 /* 28.47/8.65 * Copyright 1997-2007 Sun Microsystems, Inc. All Rights Reserved. 28.47/8.65 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 28.47/8.65 * 28.47/8.65 * This code is free software; you can redistribute it and/or modify it 28.47/8.65 * under the terms of the GNU General Public License version 2 only, as 28.47/8.65 * published by the Free Software Foundation. Sun designates this 28.47/8.65 * particular file as subject to the "Classpath" exception as provided 28.47/8.65 * by Sun in the LICENSE file that accompanied this code. 28.47/8.65 * 28.47/8.65 * This code is distributed in the hope that it will be useful, but WITHOUT 28.47/8.65 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 28.47/8.65 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 28.47/8.65 * version 2 for more details (a copy is included in the LICENSE file that 28.47/8.65 * accompanied this code). 28.47/8.65 * 28.47/8.65 * You should have received a copy of the GNU General Public License version 28.47/8.65 * 2 along with this work; if not, write to the Free Software Foundation, 28.47/8.65 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 28.47/8.65 * 28.47/8.65 * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, 28.47/8.65 * CA 95054 USA or visit www.sun.com if you need additional information or 28.47/8.65 * have any questions. 28.47/8.65 */ 28.47/8.65 28.47/8.65 package javaUtilEx; 28.47/8.65 28.47/8.65 /** 28.47/8.65 * Hash table based implementation of the Map interface. This 28.47/8.65 * implementation provides all of the optional map operations, and permits 28.47/8.65 * null values and the null key. (The HashMap 28.47/8.65 * class is roughly equivalent to Hashtable, except that it is 28.47/8.65 * unsynchronized and permits nulls.) This class makes no guarantees as to 28.47/8.65 * the order of the map; in particular, it does not guarantee that the order 28.47/8.65 * will remain constant over time. 28.47/8.65 * 28.47/8.65 *

This implementation provides constant-time performance for the basic 28.47/8.65 * operations (get and put), assuming the hash function 28.47/8.65 * disperses the elements properly among the buckets. Iteration over 28.47/8.65 * collection views requires time proportional to the "capacity" of the 28.47/8.65 * HashMap instance (the number of buckets) plus its size (the number 28.47/8.65 * of key-value mappings). Thus, it's very important not to set the initial 28.47/8.65 * capacity too high (or the load factor too low) if iteration performance is 28.47/8.65 * important. 28.47/8.65 * 28.47/8.65 *

An instance of HashMap has two parameters that affect its 28.47/8.65 * performance: initial capacity and load factor. The 28.47/8.65 * capacity is the number of buckets in the hash table, and the initial 28.47/8.65 * capacity is simply the capacity at the time the hash table is created. The 28.47/8.65 * load factor is a measure of how full the hash table is allowed to 28.47/8.65 * get before its capacity is automatically increased. When the number of 28.47/8.65 * entries in the hash table exceeds the product of the load factor and the 28.47/8.65 * current capacity, the hash table is rehashed (that is, internal data 28.47/8.65 * structures are rebuilt) so that the hash table has approximately twice the 28.47/8.65 * number of buckets. 28.47/8.65 * 28.47/8.65 *

As a general rule, the default load factor (.75) offers a good tradeoff 28.47/8.65 * between time and space costs. Higher values decrease the space overhead 28.47/8.65 * but increase the lookup cost (reflected in most of the operations of the 28.47/8.65 * HashMap class, including get and put). The 28.47/8.65 * expected number of entries in the map and its load factor should be taken 28.47/8.65 * into account when setting its initial capacity, so as to minimize the 28.47/8.65 * number of rehash operations. If the initial capacity is greater 28.47/8.65 * than the maximum number of entries divided by the load factor, no 28.47/8.65 * rehash operations will ever occur. 28.47/8.65 * 28.47/8.65 *

If many mappings are to be stored in a HashMap instance, 28.47/8.65 * creating it with a sufficiently large capacity will allow the mappings to 28.47/8.65 * be stored more efficiently than letting it perform automatic rehashing as 28.47/8.65 * needed to grow the table. 28.47/8.65 * 28.47/8.65 *

Note that this implementation is not synchronized. 28.47/8.65 * If multiple threads access a hash map concurrently, and at least one of 28.47/8.65 * the threads modifies the map structurally, it must be 28.47/8.65 * synchronized externally. (A structural modification is any operation 28.47/8.65 * that adds or deletes one or more mappings; merely changing the value 28.47/8.65 * associated with a key that an instance already contains is not a 28.47/8.65 * structural modification.) This is typically accomplished by 28.47/8.65 * synchronizing on some object that naturally encapsulates the map. 28.47/8.65 * 28.47/8.65 * If no such object exists, the map should be "wrapped" using the 28.47/8.65 * {@link Collections#synchronizedMap Collections.synchronizedMap} 28.47/8.65 * method. This is best done at creation time, to prevent accidental 28.47/8.65 * unsynchronized access to the map:

28.47/8.65	 *   Map m = Collections.synchronizedMap(new HashMap(...));
28.47/8.65 * 28.47/8.65 *

The iterators returned by all of this class's "collection view methods" 28.47/8.65 * are fail-fast: if the map is structurally modified at any time after 28.47/8.65 * the iterator is created, in any way except through the iterator's own 28.47/8.65 * remove method, the iterator will throw a 28.47/8.65 * {@link ConcurrentModificationException}. Thus, in the face of concurrent 28.47/8.65 * modification, the iterator fails quickly and cleanly, rather than risking 28.47/8.65 * arbitrary, non-deterministic behavior at an undetermined time in the 28.47/8.65 * future. 28.47/8.65 * 28.47/8.65 *

Note that the fail-fast behavior of an iterator cannot be guaranteed 28.47/8.65 * as it is, generally speaking, impossible to make any hard guarantees in the 28.47/8.65 * presence of unsynchronized concurrent modification. Fail-fast iterators 28.47/8.65 * throw ConcurrentModificationException on a best-effort basis. 28.47/8.65 * Therefore, it would be wrong to write a program that depended on this 28.47/8.65 * exception for its correctness: the fail-fast behavior of iterators 28.47/8.65 * should be used only to detect bugs. 28.47/8.65 * 28.47/8.65 *

This class is a member of the 28.47/8.65 * 28.47/8.65 * Java Collections Framework. 28.47/8.65 * 28.47/8.65 * @param the type of keys maintained by this map 28.47/8.65 * @param the type of mapped values 28.47/8.65 * 28.47/8.65 * @author Doug Lea 28.47/8.65 * @author Josh Bloch 28.47/8.65 * @author Arthur van Hoff 28.47/8.65 * @author Neal Gafter 28.47/8.65 * @see Object#hashCode() 28.47/8.65 * @see Collection 28.47/8.65 * @see Map 28.47/8.65 * @see TreeMap 28.47/8.65 * @see Hashtable 28.47/8.65 * @since 1.2 28.47/8.65 */ 28.47/8.65 28.47/8.65 public class HashMap 28.47/8.65 extends AbstractMap 28.47/8.65 implements Map, Cloneable 28.47/8.65 { 28.47/8.65 28.47/8.65 /** 28.47/8.65 * The default initial capacity - MUST be a power of two. 28.47/8.65 */ 28.47/8.65 static final int DEFAULT_INITIAL_CAPACITY = 16; 28.47/8.65 28.47/8.65 /** 28.47/8.65 * The maximum capacity, used if a higher value is implicitly specified 28.47/8.65 * by either of the constructors with arguments. 28.47/8.65 * MUST be a power of two <= 1<<30. 28.47/8.65 */ 28.47/8.65 static final int MAXIMUM_CAPACITY = 1 << 30; 28.47/8.65 28.47/8.65 /** 28.47/8.65 * The load factor used when none specified in constructor. 28.47/8.65 */ 28.47/8.65 static final float DEFAULT_LOAD_FACTOR = 0.75f; 28.47/8.65 28.47/8.65 /** 28.47/8.65 * The table, resized as necessary. Length MUST Always be a power of two. 28.47/8.65 */ 28.47/8.65 transient Entry[] table; 28.47/8.65 28.47/8.65 /** 28.47/8.65 * The number of key-value mappings contained in this map. 28.47/8.65 */ 28.47/8.65 transient int size; 28.47/8.65 28.47/8.65 /** 28.47/8.65 * The next size value at which to resize (capacity * load factor). 28.47/8.65 * @serial 28.47/8.65 */ 28.47/8.65 int threshold; 28.47/8.65 28.47/8.65 /** 28.47/8.65 * The load factor for the hash table. 28.47/8.65 * 28.47/8.65 * @serial 28.47/8.65 */ 28.47/8.65 final float loadFactor; 28.47/8.65 28.47/8.65 /** 28.47/8.65 * The number of times this HashMap has been structurally modified 28.47/8.65 * Structural modifications are those that change the number of mappings in 28.47/8.65 * the HashMap or otherwise modify its internal structure (e.g., 28.47/8.65 * rehash). This field is used to make iterators on Collection-views of 28.47/8.65 * the HashMap fail-fast. (See ConcurrentModificationException). 28.47/8.65 */ 28.47/8.65 transient volatile int modCount; 28.47/8.65 28.47/8.65 /** 28.47/8.65 * Constructs an empty HashMap with the specified initial 28.47/8.65 * capacity and load factor. 28.47/8.65 * 28.47/8.65 * @param initialCapacity the initial capacity 28.47/8.65 * @param loadFactor the load factor 28.47/8.65 * @throws IllegalArgumentException if the initial capacity is negative 28.47/8.65 * or the load factor is nonpositive 28.47/8.65 */ 28.47/8.65 public HashMap(int initialCapacity, float loadFactor) { 28.47/8.65 if (initialCapacity < 0) 28.47/8.65 throw new IllegalArgumentException("Illegal initial capacity: " + 28.47/8.65 initialCapacity); 28.47/8.65 if (initialCapacity > MAXIMUM_CAPACITY) 28.47/8.65 initialCapacity = MAXIMUM_CAPACITY; 28.47/8.65 if (loadFactor <= 0 || Float.isNaN(loadFactor)) 28.47/8.65 throw new IllegalArgumentException("Illegal load factor: " + 28.47/8.65 loadFactor); 28.47/8.65 28.47/8.65 // Find a power of 2 >= initialCapacity 28.47/8.65 int capacity = 1; 28.47/8.65 while (capacity < initialCapacity) 28.47/8.65 capacity <<= 1; 28.47/8.65 28.47/8.65 this.loadFactor = loadFactor; 28.47/8.65 threshold = (int)(capacity * loadFactor); 28.47/8.65 table = new Entry[capacity]; 28.47/8.65 init(); 28.47/8.65 } 28.47/8.65 28.47/8.65 /** 28.47/8.65 * Constructs an empty HashMap with the specified initial 28.47/8.65 * capacity and the default load factor (0.75). 28.47/8.65 * 28.47/8.65 * @param initialCapacity the initial capacity. 28.47/8.65 * @throws IllegalArgumentException if the initial capacity is negative. 28.47/8.65 */ 28.47/8.65 public HashMap(int initialCapacity) { 28.47/8.65 this(initialCapacity, DEFAULT_LOAD_FACTOR); 28.47/8.65 } 28.47/8.65 28.47/8.65 /** 28.47/8.65 * Constructs an empty HashMap with the default initial capacity 28.47/8.65 * (16) and the default load factor (0.75). 28.47/8.65 */ 28.47/8.65 public HashMap() { 28.47/8.65 this.loadFactor = DEFAULT_LOAD_FACTOR; 28.47/8.65 threshold = (int)(DEFAULT_INITIAL_CAPACITY * DEFAULT_LOAD_FACTOR); 28.47/8.65 table = new Entry[DEFAULT_INITIAL_CAPACITY]; 28.47/8.65 init(); 28.47/8.65 } 28.47/8.65 28.47/8.65 /** 28.47/8.65 * Constructs a new HashMap with the same mappings as the 28.47/8.65 * specified Map. The HashMap is created with 28.47/8.65 * default load factor (0.75) and an initial capacity sufficient to 28.47/8.65 * hold the mappings in the specified Map. 28.47/8.65 * 28.47/8.65 * @param m the map whose mappings are to be placed in this map 28.47/8.65 * @throws NullPointerException if the specified map is null 28.47/8.65 */ 28.47/8.65 public HashMap(Map m) { 28.47/8.65 this(Math.max((int) (m.size() / DEFAULT_LOAD_FACTOR) + 1, 28.47/8.65 DEFAULT_INITIAL_CAPACITY), DEFAULT_LOAD_FACTOR); 28.47/8.65 putAllForCreate(m); 28.47/8.65 } 28.47/8.65 28.47/8.65 // internal utilities 28.47/8.65 28.47/8.65 /** 28.47/8.65 * Initialization hook for subclasses. This method is called 28.47/8.65 * in all constructors and pseudo-constructors (clone, readObject) 28.47/8.65 * after HashMap has been initialized but before any entries have 28.47/8.65 * been inserted. (In the absence of this method, readObject would 28.47/8.65 * require explicit knowledge of subclasses.) 28.47/8.65 */ 28.47/8.65 void init() { 28.47/8.65 } 28.47/8.65 28.47/8.65 /** 28.47/8.65 * Applies a supplemental hash function to a given hashCode, which 28.47/8.65 * defends against poor quality hash functions. This is critical 28.47/8.65 * because HashMap uses power-of-two length hash tables, that 28.47/8.65 * otherwise encounter collisions for hashCodes that do not differ 28.47/8.65 * in lower bits. Note: Null keys always map to hash 0, thus index 0. 28.47/8.65 */ 28.47/8.65 static int hash(int h) { 28.47/8.65 // This function ensures that hashCodes that differ only by 28.47/8.65 // constant multiples at each bit position have a bounded 28.47/8.65 // number of collisions (approximately 8 at default load factor). 28.47/8.65 h ^= (h >>> 20) ^ (h >>> 12); 28.47/8.65 return h ^ (h >>> 7) ^ (h >>> 4); 28.47/8.65 } 28.47/8.65 28.47/8.65 /** 28.47/8.65 * Returns index for hash code h. 28.47/8.65 */ 28.47/8.65 static int indexFor(int h, int length) { 28.47/8.65 return h & (length-1); 28.47/8.65 } 28.47/8.65 28.47/8.65 /** 28.47/8.65 * Returns the number of key-value mappings in this map. 28.47/8.65 * 28.47/8.65 * @return the number of key-value mappings in this map 28.47/8.65 */ 28.47/8.65 public int size() { 28.47/8.65 return size; 28.47/8.65 } 28.47/8.65 28.47/8.65 /** 28.47/8.65 * Returns true if this map contains no key-value mappings. 28.47/8.65 * 28.47/8.65 * @return true if this map contains no key-value mappings 28.47/8.65 */ 28.47/8.65 public boolean isEmpty() { 28.47/8.65 return size == 0; 28.47/8.65 } 28.47/8.65 28.47/8.65 /** 28.47/8.65 * Returns the value to which the specified key is mapped, 28.47/8.65 * or {@code null} if this map contains no mapping for the key. 28.47/8.65 * 28.47/8.65 *

More formally, if this map contains a mapping from a key 28.47/8.65 * {@code k} to a value {@code v} such that {@code (key==null ? k==null : 28.47/8.65 * key.equals(k))}, then this method returns {@code v}; otherwise 28.47/8.65 * it returns {@code null}. (There can be at most one such mapping.) 28.47/8.65 * 28.47/8.65 *

A return value of {@code null} does not necessarily 28.47/8.65 * indicate that the map contains no mapping for the key; it's also 28.47/8.65 * possible that the map explicitly maps the key to {@code null}. 28.47/8.65 * The {@link #containsKey containsKey} operation may be used to 28.47/8.65 * distinguish these two cases. 28.47/8.65 * 28.47/8.65 * @see #put(Object, Object) 28.47/8.65 */ 28.47/8.65 public V get(Object key) { 28.47/8.65 if (key == null) 28.47/8.65 return getForNullKey(); 28.47/8.65 int hash = hash(key.hashCode()); 28.47/8.65 for (Entry e = table[indexFor(hash, table.length)]; 28.47/8.65 e != null; 28.47/8.65 e = e.next) { 28.47/8.65 Object k; 28.47/8.65 if (e.hash == hash && ((k = e.key) == key || key.equals(k))) 28.47/8.65 return e.value; 28.47/8.65 } 28.47/8.65 return null; 28.47/8.65 } 28.47/8.65 28.47/8.65 /** 28.47/8.65 * Offloaded version of get() to look up null keys. Null keys map 28.47/8.65 * to index 0. This null case is split out into separate methods 28.47/8.65 * for the sake of performance in the two most commonly used 28.47/8.65 * operations (get and put), but incorporated with conditionals in 28.47/8.65 * others. 28.47/8.65 */ 28.47/8.65 private V getForNullKey() { 28.47/8.65 for (Entry e = table[0]; e != null; e = e.next) { 28.47/8.65 if (e.key == null) 28.47/8.65 return e.value; 28.47/8.65 } 28.47/8.65 return null; 28.47/8.65 } 28.47/8.65 28.47/8.65 /** 28.47/8.65 * Returns true if this map contains a mapping for the 28.47/8.65 * specified key. 28.47/8.65 * 28.47/8.65 * @param key The key whose presence in this map is to be tested 28.47/8.65 * @return true if this map contains a mapping for the specified 28.47/8.65 * key. 28.47/8.65 */ 28.47/8.65 public boolean containsKey(Object key) { 28.47/8.65 return getEntry(key) != null; 28.47/8.65 } 28.47/8.65 28.47/8.65 /** 28.47/8.65 * Returns the entry associated with the specified key in the 28.47/8.65 * HashMap. Returns null if the HashMap contains no mapping 28.47/8.65 * for the key. 28.47/8.65 */ 28.47/8.65 final Entry getEntry(Object key) { 28.47/8.65 int hash = (key == null) ? 0 : hash(key.hashCode()); 28.47/8.65 for (Entry e = table[indexFor(hash, table.length)]; 28.47/8.65 e != null; 28.47/8.65 e = e.next) { 28.47/8.65 Object k; 28.47/8.65 if (e.hash == hash && 28.47/8.65 ((k = e.key) == key || (key != null && key.equals(k)))) 28.47/8.65 return e; 28.47/8.65 } 28.47/8.65 return null; 28.47/8.65 } 28.47/8.65 28.47/8.65 28.47/8.65 /** 28.47/8.65 * Associates the specified value with the specified key in this map. 28.47/8.65 * If the map previously contained a mapping for the key, the old 28.47/8.65 * value is replaced. 28.47/8.65 * 28.47/8.65 * @param key key with which the specified value is to be associated 28.47/8.65 * @param value value to be associated with the specified key 28.47/8.65 * @return the previous value associated with key, or 28.47/8.65 * null if there was no mapping for key. 28.47/8.65 * (A null return can also indicate that the map 28.47/8.65 * previously associated null with key.) 28.47/8.65 */ 28.47/8.65 public V put(K key, V value) { 28.47/8.65 if (key == null) 28.47/8.65 return putForNullKey(value); 28.47/8.65 int hash = hash(key.hashCode()); 28.47/8.65 int i = indexFor(hash, table.length); 28.47/8.65 for (Entry e = table[i]; e != null; e = e.next) { 28.47/8.65 Object k; 28.47/8.65 if (e.hash == hash && ((k = e.key) == key || key.equals(k))) { 28.47/8.65 V oldValue = e.value; 28.47/8.65 e.value = value; 28.47/8.65 e.recordAccess(this); 28.47/8.65 return oldValue; 28.47/8.65 } 28.47/8.65 } 28.47/8.65 28.47/8.65 modCount++; 28.47/8.65 addEntry(hash, key, value, i); 28.47/8.65 return null; 28.47/8.65 } 28.47/8.65 28.47/8.65 /** 28.47/8.65 * Offloaded version of put for null keys 28.47/8.65 */ 28.47/8.65 private V putForNullKey(V value) { 28.47/8.65 for (Entry e = table[0]; e != null; e = e.next) { 28.47/8.65 if (e.key == null) { 28.47/8.65 V oldValue = e.value; 28.47/8.65 e.value = value; 28.47/8.65 e.recordAccess(this); 28.47/8.65 return oldValue; 28.47/8.65 } 28.47/8.65 } 28.47/8.65 modCount++; 28.47/8.65 addEntry(0, null, value, 0); 28.47/8.65 return null; 28.47/8.65 } 28.47/8.65 28.47/8.65 /** 28.47/8.65 * This method is used instead of put by constructors and 28.47/8.65 * pseudoconstructors (clone, readObject). It does not resize the table, 28.47/8.65 * check for comodification, etc. It calls createEntry rather than 28.47/8.65 * addEntry. 28.47/8.65 */ 28.47/8.65 private void putForCreate(K key, V value) { 28.47/8.65 int hash = (key == null) ? 0 : hash(key.hashCode()); 28.47/8.65 int i = indexFor(hash, table.length); 28.47/8.65 28.47/8.65 /** 28.47/8.65 * Look for preexisting entry for key. This will never happen for 28.47/8.65 * clone or deserialize. It will only happen for construction if the 28.47/8.65 * input Map is a sorted map whose ordering is inconsistent w/ equals. 28.47/8.65 */ 28.47/8.65 for (Entry e = table[i]; e != null; e = e.next) { 28.47/8.65 Object k; 28.47/8.65 if (e.hash == hash && 28.47/8.65 ((k = e.key) == key || (key != null && key.equals(k)))) { 28.47/8.65 e.value = value; 28.47/8.65 return; 28.47/8.65 } 28.47/8.65 } 28.47/8.65 28.47/8.65 createEntry(hash, key, value, i); 28.47/8.65 } 28.47/8.65 28.47/8.65 private void putAllForCreate(Map m) { 28.47/8.65 for (Iterator> i = m.entrySet().iterator(); i.hasNext(); ) { 28.47/8.65 Map.Entry e = i.next(); 28.47/8.65 putForCreate(e.getKey(), e.getValue()); 28.47/8.65 } 28.47/8.65 } 28.47/8.65 28.47/8.65 /** 28.47/8.65 * Rehashes the contents of this map into a new array with a 28.47/8.65 * larger capacity. This method is called automatically when the 28.47/8.65 * number of keys in this map reaches its threshold. 28.47/8.65 * 28.47/8.65 * If current capacity is MAXIMUM_CAPACITY, this method does not 28.47/8.65 * resize the map, but sets threshold to Integer.MAX_VALUE. 28.47/8.65 * This has the effect of preventing future calls. 28.47/8.65 * 28.47/8.65 * @param newCapacity the new capacity, MUST be a power of two; 28.47/8.65 * must be greater than current capacity unless current 28.47/8.65 * capacity is MAXIMUM_CAPACITY (in which case value 28.47/8.65 * is irrelevant). 28.47/8.65 */ 28.47/8.65 void resize(int newCapacity) { 28.47/8.65 Entry[] oldTable = table; 28.47/8.65 int oldCapacity = oldTable.length; 28.47/8.65 if (oldCapacity == MAXIMUM_CAPACITY) { 28.47/8.65 threshold = Integer.MAX_VALUE; 28.47/8.65 return; 28.47/8.65 } 28.47/8.65 28.47/8.65 Entry[] newTable = new Entry[newCapacity]; 28.47/8.65 transfer(newTable); 28.47/8.65 table = newTable; 28.47/8.65 threshold = (int)(newCapacity * loadFactor); 28.47/8.65 } 28.47/8.65 28.47/8.65 /** 28.47/8.65 * Transfers all entries from current table to newTable. 28.47/8.65 */ 28.47/8.65 void transfer(Entry[] newTable) { 28.47/8.65 Entry[] src = table; 28.47/8.65 int newCapacity = newTable.length; 28.47/8.65 for (int j = 0; j < src.length; j++) { 28.47/8.65 Entry e = src[j]; 28.47/8.65 if (e != null) { 28.47/8.65 src[j] = null; 28.47/8.65 do { 28.47/8.65 Entry next = e.next; 28.47/8.65 int i = indexFor(e.hash, newCapacity); 28.47/8.65 e.next = newTable[i]; 28.47/8.65 newTable[i] = e; 28.47/8.65 e = next; 28.47/8.65 } while (e != null); 28.47/8.65 } 28.47/8.65 } 28.47/8.65 } 28.47/8.65 28.47/8.65 /** 28.47/8.65 * Copies all of the mappings from the specified map to this map. 28.47/8.65 * These mappings will replace any mappings that this map had for 28.47/8.65 * any of the keys currently in the specified map. 28.47/8.65 * 28.47/8.65 * @param m mappings to be stored in this map 28.47/8.65 * @throws NullPointerException if the specified map is null 28.47/8.65 */ 28.47/8.65 public void putAll(Map m) { 28.47/8.65 int numKeysToBeAdded = m.size(); 28.47/8.65 if (numKeysToBeAdded == 0) 28.47/8.65 return; 28.47/8.65 28.47/8.65 /* 28.47/8.65 * Expand the map if the map if the number of mappings to be added 28.47/8.65 * is greater than or equal to threshold. This is conservative; the 28.47/8.65 * obvious condition is (m.size() + size) >= threshold, but this 28.47/8.65 * condition could result in a map with twice the appropriate capacity, 28.47/8.65 * if the keys to be added overlap with the keys already in this map. 28.47/8.65 * By using the conservative calculation, we subject ourself 28.47/8.65 * to at most one extra resize. 28.47/8.65 */ 28.47/8.65 if (numKeysToBeAdded > threshold) { 28.47/8.65 int targetCapacity = (int)(numKeysToBeAdded / loadFactor + 1); 28.47/8.65 if (targetCapacity > MAXIMUM_CAPACITY) 28.47/8.65 targetCapacity = MAXIMUM_CAPACITY; 28.47/8.65 int newCapacity = table.length; 28.47/8.65 while (newCapacity < targetCapacity) 28.47/8.65 newCapacity <<= 1; 28.47/8.65 if (newCapacity > table.length) 28.47/8.65 resize(newCapacity); 28.47/8.65 } 28.47/8.65 28.47/8.65 for (Iterator> i = m.entrySet().iterator(); i.hasNext(); ) { 28.47/8.65 Map.Entry e = i.next(); 28.47/8.65 put(e.getKey(), e.getValue()); 28.47/8.65 } 28.47/8.65 } 28.47/8.65 28.47/8.65 /** 28.47/8.65 * Removes the mapping for the specified key from this map if present. 28.47/8.65 * 28.47/8.65 * @param key key whose mapping is to be removed from the map 28.47/8.65 * @return the previous value associated with key, or 28.47/8.65 * null if there was no mapping for key. 28.47/8.65 * (A null return can also indicate that the map 28.47/8.65 * previously associated null with key.) 28.47/8.65 */ 28.47/8.65 public V remove(Object key) { 28.47/8.65 Entry e = removeEntryForKey(key); 28.47/8.65 return (e == null ? null : e.value); 28.47/8.65 } 28.47/8.65 28.47/8.65 /** 28.47/8.65 * Removes and returns the entry associated with the specified key 28.47/8.65 * in the HashMap. Returns null if the HashMap contains no mapping 28.47/8.65 * for this key. 28.47/8.65 */ 28.47/8.65 final Entry removeEntryForKey(Object key) { 28.47/8.65 int hash = (key == null) ? 0 : hash(key.hashCode()); 28.47/8.65 int i = indexFor(hash, table.length); 28.47/8.65 Entry prev = table[i]; 28.47/8.65 Entry e = prev; 28.47/8.65 28.47/8.65 while (e != null) { 28.47/8.65 Entry next = e.next; 28.47/8.65 Object k; 28.47/8.65 if (e.hash == hash && 28.47/8.65 ((k = e.key) == key || (key != null && key.equals(k)))) { 28.47/8.65 modCount++; 28.47/8.65 size--; 28.47/8.65 if (prev == e) 28.47/8.65 table[i] = next; 28.47/8.65 else 28.47/8.65 prev.next = next; 28.47/8.65 e.recordRemoval(this); 28.47/8.65 return e; 28.47/8.65 } 28.47/8.65 prev = e; 28.47/8.65 e = next; 28.47/8.65 } 28.47/8.65 28.47/8.65 return e; 28.47/8.65 } 28.47/8.65 28.47/8.65 /** 28.47/8.65 * Special version of remove for EntrySet. 28.47/8.65 */ 28.47/8.65 final Entry removeMapping(Object o) { 28.47/8.65 if (!(o instanceof Map.Entry)) 28.47/8.65 return null; 28.47/8.65 28.47/8.65 Map.Entry entry = (Map.Entry) o; 28.47/8.65 Object key = entry.getKey(); 28.47/8.65 int hash = (key == null) ? 0 : hash(key.hashCode()); 28.47/8.65 int i = indexFor(hash, table.length); 28.47/8.65 Entry prev = table[i]; 28.47/8.65 Entry e = prev; 28.47/8.65 28.47/8.65 while (e != null) { 28.47/8.65 Entry next = e.next; 28.47/8.65 if (e.hash == hash && e.equals(entry)) { 28.47/8.65 modCount++; 28.47/8.65 size--; 28.47/8.65 if (prev == e) 28.47/8.65 table[i] = next; 28.47/8.65 else 28.47/8.65 prev.next = next; 28.47/8.65 e.recordRemoval(this); 28.47/8.65 return e; 28.47/8.65 } 28.47/8.65 prev = e; 28.47/8.65 e = next; 28.47/8.65 } 28.47/8.65 28.47/8.65 return e; 28.47/8.65 } 28.47/8.65 28.47/8.65 /** 28.47/8.65 * Removes all of the mappings from this map. 28.47/8.65 * The map will be empty after this call returns. 28.47/8.65 */ 28.47/8.65 public void clear() { 28.47/8.65 modCount++; 28.47/8.65 Entry[] tab = table; 28.47/8.65 for (int i = 0; i < tab.length; i++) 28.47/8.65 tab[i] = null; 28.47/8.65 size = 0; 28.47/8.65 } 28.47/8.65 28.47/8.65 /** 28.47/8.65 * Returns true if this map maps one or more keys to the 28.47/8.65 * specified value. 28.47/8.65 * 28.47/8.65 * @param value value whose presence in this map is to be tested 28.47/8.65 * @return true if this map maps one or more keys to the 28.47/8.65 * specified value 28.47/8.65 */ 28.47/8.65 public boolean containsValue(Object value) { 28.47/8.65 if (value == null) 28.47/8.65 return containsNullValue(); 28.47/8.65 28.47/8.65 Entry[] tab = table; 28.47/8.65 for (int i = 0; i < tab.length ; i++) 28.47/8.65 for (Entry e = tab[i] ; e != null ; e = e.next) 28.47/8.65 if (value.equals(e.value)) 28.47/8.65 return true; 28.47/8.65 return false; 28.47/8.65 } 28.47/8.65 28.47/8.65 /** 28.47/8.65 * Special-case code for containsValue with null argument 28.47/8.65 */ 28.47/8.65 private boolean containsNullValue() { 28.47/8.65 Entry[] tab = table; 28.47/8.65 for (int i = 0; i < tab.length ; i++) 28.47/8.65 for (Entry e = tab[i] ; e != null ; e = e.next) 28.47/8.65 if (e.value == null) 28.47/8.65 return true; 28.47/8.65 return false; 28.47/8.65 } 28.47/8.65 28.47/8.65 /** 28.47/8.65 * Returns a shallow copy of this HashMap instance: the keys and 28.47/8.65 * values themselves are not cloned. 28.47/8.65 * 28.47/8.65 * @return a shallow copy of this map 28.47/8.65 */ 28.47/8.65 public Object clone() { 28.47/8.65 HashMap result = null; 28.47/8.65 try { 28.47/8.65 result = (HashMap)super.clone(); 28.47/8.65 } catch (CloneNotSupportedException e) { 28.47/8.65 // assert false; 28.47/8.65 } 28.47/8.65 result.table = new Entry[table.length]; 28.47/8.65 result.entrySet = null; 28.47/8.65 result.modCount = 0; 28.47/8.65 result.size = 0; 28.47/8.65 result.init(); 28.47/8.65 result.putAllForCreate(this); 28.47/8.65 28.47/8.65 return result; 28.47/8.65 } 28.47/8.65 28.47/8.65 static class Entry implements Map.Entry { 28.47/8.65 final K key; 28.47/8.65 V value; 28.47/8.65 Entry next; 28.47/8.65 final int hash; 28.47/8.65 28.47/8.65 /** 28.47/8.65 * Creates new entry. 28.47/8.65 */ 28.47/8.65 Entry(int h, K k, V v, Entry n) { 28.47/8.65 value = v; 28.47/8.65 next = n; 28.47/8.65 key = k; 28.47/8.65 hash = h; 28.47/8.65 } 28.47/8.65 28.47/8.65 public final K getKey() { 28.47/8.65 return key; 28.47/8.65 } 28.47/8.65 28.47/8.65 public final V getValue() { 28.47/8.65 return value; 28.47/8.65 } 28.47/8.65 28.47/8.65 public final V setValue(V newValue) { 28.47/8.65 V oldValue = value; 28.47/8.65 value = newValue; 28.47/8.65 return oldValue; 28.47/8.65 } 28.47/8.65 28.47/8.65 public final boolean equals(Object o) { 28.47/8.65 if (!(o instanceof Map.Entry)) 28.47/8.65 return false; 28.47/8.65 Map.Entry e = (Map.Entry)o; 28.47/8.65 Object k1 = getKey(); 28.47/8.65 Object k2 = e.getKey(); 28.47/8.65 if (k1 == k2 || (k1 != null && k1.equals(k2))) { 28.47/8.65 Object v1 = getValue(); 28.47/8.65 Object v2 = e.getValue(); 28.47/8.65 if (v1 == v2 || (v1 != null && v1.equals(v2))) 28.47/8.65 return true; 28.47/8.65 } 28.47/8.65 return false; 28.47/8.65 } 28.47/8.65 28.47/8.65 public final int hashCode() { 28.47/8.65 return (key==null ? 0 : key.hashCode()) ^ 28.47/8.65 (value==null ? 0 : value.hashCode()); 28.47/8.65 } 28.47/8.65 28.47/8.65 public final String toString() { 28.47/8.65 return getKey() + "=" + getValue(); 28.47/8.65 } 28.47/8.65 28.47/8.65 /** 28.47/8.65 * This method is invoked whenever the value in an entry is 28.47/8.65 * overwritten by an invocation of put(k,v) for a key k that's already 28.47/8.65 * in the HashMap. 28.47/8.65 */ 28.47/8.65 void recordAccess(HashMap m) { 28.47/8.65 } 28.47/8.65 28.47/8.65 /** 28.47/8.65 * This method is invoked whenever the entry is 28.47/8.65 * removed from the table. 28.47/8.65 */ 28.47/8.65 void recordRemoval(HashMap m) { 28.47/8.65 } 28.47/8.65 } 28.47/8.65 28.47/8.65 /** 28.47/8.65 * Adds a new entry with the specified key, value and hash code to 28.47/8.65 * the specified bucket. It is the responsibility of this 28.47/8.65 * method to resize the table if appropriate. 28.47/8.65 * 28.47/8.65 * Subclass overrides this to alter the behavior of put method. 28.47/8.65 */ 28.47/8.65 void addEntry(int hash, K key, V value, int bucketIndex) { 28.47/8.65 Entry e = table[bucketIndex]; 28.47/8.65 table[bucketIndex] = new Entry(hash, key, value, e); 28.47/8.65 if (size++ >= threshold) 28.47/8.65 resize(2 * table.length); 28.47/8.65 } 28.47/8.65 28.47/8.65 /** 28.47/8.65 * Like addEntry except that this version is used when creating entries 28.47/8.65 * as part of Map construction or "pseudo-construction" (cloning, 28.47/8.65 * deserialization). This version needn't worry about resizing the table. 28.47/8.65 * 28.47/8.65 * Subclass overrides this to alter the behavior of HashMap(Map), 28.47/8.65 * clone, and readObject. 28.47/8.65 */ 28.47/8.65 void createEntry(int hash, K key, V value, int bucketIndex) { 28.47/8.65 Entry e = table[bucketIndex]; 28.47/8.65 table[bucketIndex] = new Entry(hash, key, value, e); 28.47/8.65 size++; 28.47/8.65 } 28.47/8.65 28.47/8.65 private abstract class HashIterator implements Iterator { 28.47/8.65 Entry next; // next entry to return 28.47/8.65 int expectedModCount; // For fast-fail 28.47/8.65 int index; // current slot 28.47/8.65 Entry current; // current entry 28.47/8.65 28.47/8.65 HashIterator() { 28.47/8.65 expectedModCount = modCount; 28.47/8.65 if (size > 0) { // advance to first entry 28.47/8.65 Entry[] t = table; 28.47/8.65 while (index < t.length && (next = t[index++]) == null) 28.47/8.65 ; 28.47/8.65 } 28.47/8.65 } 28.47/8.65 28.47/8.65 public final boolean hasNext() { 28.47/8.65 return next != null; 28.47/8.65 } 28.47/8.65 28.47/8.65 final Entry nextEntry() { 28.47/8.65 if (modCount != expectedModCount) 28.47/8.65 throw new ConcurrentModificationException(); 28.47/8.65 Entry e = next; 28.47/8.65 if (e == null) 28.47/8.65 throw new NoSuchElementException(); 28.47/8.65 28.47/8.65 if ((next = e.next) == null) { 28.47/8.65 Entry[] t = table; 28.47/8.65 while (index < t.length && (next = t[index++]) == null) 28.47/8.65 ; 28.47/8.65 } 28.47/8.65 current = e; 28.47/8.65 return e; 28.47/8.65 } 28.47/8.65 28.47/8.65 public void remove() { 28.47/8.65 if (current == null) 28.47/8.65 throw new IllegalStateException(); 28.47/8.65 if (modCount != expectedModCount) 28.47/8.65 throw new ConcurrentModificationException(); 28.47/8.65 Object k = current.key; 28.47/8.65 current = null; 28.47/8.65 HashMap.this.removeEntryForKey(k); 28.47/8.65 expectedModCount = modCount; 28.47/8.65 } 28.47/8.65 28.47/8.65 } 28.47/8.65 28.47/8.65 private final class ValueIterator extends HashIterator { 28.47/8.65 public V next() { 28.47/8.65 return nextEntry().value; 28.47/8.65 } 28.47/8.65 } 28.47/8.65 28.47/8.65 private final class KeyIterator extends HashIterator { 28.47/8.65 public K next() { 28.47/8.65 return nextEntry().getKey(); 28.47/8.65 } 28.47/8.65 } 28.47/8.65 28.47/8.65 private final class EntryIterator extends HashIterator> { 28.47/8.65 public Map.Entry next() { 28.47/8.65 return nextEntry(); 28.47/8.65 } 28.47/8.65 } 28.47/8.65 28.47/8.65 // Subclass overrides these to alter behavior of views' iterator() method 28.47/8.65 Iterator newKeyIterator() { 28.47/8.65 return new KeyIterator(); 28.47/8.65 } 28.47/8.65 Iterator newValueIterator() { 28.47/8.65 return new ValueIterator(); 28.47/8.65 } 28.47/8.65 Iterator> newEntryIterator() { 28.47/8.65 return new EntryIterator(); 28.47/8.65 } 28.47/8.65 28.47/8.65 28.47/8.65 // Views 28.47/8.65 28.47/8.65 private transient Set> entrySet = null; 28.47/8.65 28.47/8.65 /** 28.47/8.65 * Returns a {@link Set} view of the keys contained in this map. 28.47/8.65 * The set is backed by the map, so changes to the map are 28.47/8.65 * reflected in the set, and vice-versa. If the map is modified 28.47/8.65 * while an iteration over the set is in progress (except through 28.47/8.65 * the iterator's own remove operation), the results of 28.47/8.65 * the iteration are undefined. The set supports element removal, 28.47/8.65 * which removes the corresponding mapping from the map, via the 28.47/8.65 * Iterator.remove, Set.remove, 28.47/8.65 * removeAll, retainAll, and clear 28.47/8.65 * operations. It does not support the add or addAll 28.47/8.65 * operations. 28.47/8.65 */ 28.47/8.65 public Set keySet() { 28.47/8.65 Set ks = keySet; 28.47/8.65 return (ks != null ? ks : (keySet = new KeySet())); 28.47/8.65 } 28.47/8.65 28.47/8.65 private final class KeySet extends AbstractSet { 28.47/8.65 public Iterator iterator() { 28.47/8.65 return newKeyIterator(); 28.47/8.65 } 28.47/8.65 public int size() { 28.47/8.65 return size; 28.47/8.65 } 28.47/8.65 public boolean contains(Object o) { 28.47/8.65 return containsKey(o); 28.47/8.65 } 28.47/8.65 public boolean remove(Object o) { 28.47/8.65 return HashMap.this.removeEntryForKey(o) != null; 28.47/8.65 } 28.47/8.65 public void clear() { 28.47/8.65 HashMap.this.clear(); 28.47/8.65 } 28.47/8.65 public Object[] toArray() { 28.47/8.65 Object[] res = new Object[size]; 28.47/8.65 Iterator it = iterator(); 28.47/8.65 int i = 0; 28.47/8.65 while (it.hasNext()) 28.47/8.65 res[i++] = it.next(); 28.47/8.65 return res; 28.47/8.65 } 28.47/8.65 public T[] toArray(T[] a) { 28.47/8.65 a = (T[])java.lang.reflect.Array.newInstance( 28.47/8.65 a.getClass().getComponentType(), size); 28.47/8.65 Object[] res = a; 28.47/8.65 Iterator it = iterator(); 28.47/8.65 int i = 0; 28.47/8.65 while (it.hasNext()) 28.47/8.65 res[i++] = it.next(); 28.47/8.65 return a; 28.47/8.65 } 28.47/8.65 } 28.47/8.65 28.47/8.65 /** 28.47/8.65 * Returns a {@link Collection} view of the values contained in this map. 28.47/8.65 * The collection is backed by the map, so changes to the map are 28.47/8.65 * reflected in the collection, and vice-versa. If the map is 28.47/8.65 * modified while an iteration over the collection is in progress 28.47/8.65 * (except through the iterator's own remove operation), 28.47/8.65 * the results of the iteration are undefined. The collection 28.47/8.65 * supports element removal, which removes the corresponding 28.47/8.65 * mapping from the map, via the Iterator.remove, 28.47/8.65 * Collection.remove, removeAll, 28.47/8.65 * retainAll and clear operations. It does not 28.47/8.65 * support the add or addAll operations. 28.47/8.65 */ 28.47/8.65 public Collection values() { 28.47/8.65 Collection vs = values; 28.47/8.65 return (vs != null ? vs : (values = new Values())); 28.47/8.65 } 28.47/8.65 28.47/8.65 private final class Values extends AbstractCollection { 28.47/8.65 public Iterator iterator() { 28.47/8.65 return newValueIterator(); 28.47/8.65 } 28.47/8.65 public int size() { 28.47/8.65 return size; 28.47/8.65 } 28.47/8.65 public boolean contains(Object o) { 28.47/8.65 return containsValue(o); 28.47/8.65 } 28.47/8.65 public void clear() { 28.47/8.65 HashMap.this.clear(); 28.47/8.65 } 28.47/8.65 } 28.47/8.65 28.47/8.65 /** 28.47/8.65 * Returns a {@link Set} view of the mappings contained in this map. 28.47/8.65 * The set is backed by the map, so changes to the map are 28.47/8.65 * reflected in the set, and vice-versa. If the map is modified 28.47/8.65 * while an iteration over the set is in progress (except through 28.47/8.65 * the iterator's own remove operation, or through the 28.47/8.65 * setValue operation on a map entry returned by the 28.47/8.65 * iterator) the results of the iteration are undefined. The set 28.47/8.65 * supports element removal, which removes the corresponding 28.47/8.65 * mapping from the map, via the Iterator.remove, 28.47/8.65 * Set.remove, removeAll, retainAll and 28.47/8.65 * clear operations. It does not support the 28.47/8.65 * add or addAll operations. 28.47/8.65 * 28.47/8.65 * @return a set view of the mappings contained in this map 28.47/8.65 */ 28.47/8.65 public Set> entrySet() { 28.47/8.65 return entrySet0(); 28.47/8.65 } 28.47/8.65 28.47/8.65 private Set> entrySet0() { 28.47/8.65 Set> es = entrySet; 28.47/8.65 return es != null ? es : (entrySet = new EntrySet()); 28.47/8.65 } 28.47/8.65 28.47/8.65 private final class EntrySet extends AbstractSet> { 28.47/8.65 public Iterator> iterator() { 28.47/8.65 return newEntryIterator(); 28.47/8.65 } 28.47/8.65 public boolean contains(Object o) { 28.47/8.65 if (!(o instanceof Map.Entry)) 28.47/8.65 return false; 28.47/8.65 Map.Entry e = (Map.Entry) o; 28.47/8.65 Entry candidate = getEntry(e.getKey()); 28.47/8.65 return candidate != null && candidate.equals(e); 28.47/8.65 } 28.47/8.65 public boolean remove(Object o) { 28.47/8.65 return removeMapping(o) != null; 28.47/8.65 } 28.47/8.65 public int size() { 28.47/8.65 return size; 28.47/8.65 } 28.47/8.65 public void clear() { 28.47/8.65 HashMap.this.clear(); 28.47/8.65 } 28.47/8.65 public Object[] toArray() { 28.47/8.65 Object[] res = new Object[size]; 28.47/8.65 Iterator> it = iterator(); 28.47/8.65 int i = 0; 28.47/8.65 while (it.hasNext()) 28.47/8.65 res[i++] = it.next(); 28.47/8.65 return res; 28.47/8.65 } 28.47/8.65 public T[] toArray(T[] a) { 28.47/8.65 a = (T[])java.lang.reflect.Array.newInstance( 28.47/8.65 a.getClass().getComponentType(), size); 28.47/8.65 Object[] res = a; 28.47/8.65 Iterator> it = iterator(); 28.47/8.65 int i = 0; 28.47/8.65 while (it.hasNext()) 28.47/8.65 res[i++] = it.next(); 28.47/8.65 return a; 28.47/8.65 } 28.47/8.65 } 28.47/8.65 28.47/8.65 private static final long serialVersionUID = 362498820763181265L; 28.47/8.65 } 28.47/8.65 28.47/8.65 28.47/8.65 /* 28.47/8.65 * Copyright 1994-2003 Sun Microsystems, Inc. All Rights Reserved. 28.47/8.65 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 28.47/8.65 * 28.47/8.65 * This code is free software; you can redistribute it and/or modify it 28.47/8.65 * under the terms of the GNU General Public License version 2 only, as 28.47/8.65 * published by the Free Software Foundation. Sun designates this 28.47/8.65 * particular file as subject to the "Classpath" exception as provided 28.47/8.65 * by Sun in the LICENSE file that accompanied this code. 28.47/8.65 * 28.47/8.65 * This code is distributed in the hope that it will be useful, but WITHOUT 28.47/8.65 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 28.47/8.65 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 28.47/8.65 * version 2 for more details (a copy is included in the LICENSE file that 28.47/8.65 * accompanied this code). 28.47/8.65 * 28.47/8.65 * You should have received a copy of the GNU General Public License version 28.47/8.65 * 2 along with this work; if not, write to the Free Software Foundation, 28.47/8.65 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 28.47/8.65 * 28.47/8.65 * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, 28.47/8.65 * CA 95054 USA or visit www.sun.com if you need additional information or 28.47/8.65 * have any questions. 28.47/8.65 */ 28.47/8.65 28.47/8.65 package javaUtilEx; 28.47/8.65 28.47/8.65 /** 28.47/8.65 * Thrown to indicate that a method has been passed an illegal or 28.47/8.65 * inappropriate argument. 28.47/8.65 * 28.47/8.65 * @author unascribed 28.47/8.65 * @see java.lang.Thread#setPriority(int) 28.47/8.65 * @since JDK1.0 28.47/8.65 */ 28.47/8.65 public 28.47/8.65 class IllegalArgumentException extends RuntimeException { 28.47/8.65 /** 28.47/8.65 * Constructs an IllegalArgumentException with no 28.47/8.65 * detail message. 28.47/8.65 */ 28.47/8.65 public IllegalArgumentException() { 28.47/8.65 super(); 28.47/8.65 } 28.47/8.65 28.47/8.65 /** 28.47/8.65 * Constructs an IllegalArgumentException with the 28.47/8.65 * specified detail message. 28.47/8.65 * 28.47/8.65 * @param s the detail message. 28.47/8.65 */ 28.47/8.65 public IllegalArgumentException(String s) { 28.47/8.65 super(s); 28.47/8.65 } 28.47/8.65 28.47/8.65 /** 28.47/8.65 * Constructs a new exception with the specified detail message and 28.47/8.65 * cause. 28.47/8.65 * 28.47/8.65 *

Note that the detail message associated with cause is 28.47/8.65 * not automatically incorporated in this exception's detail 28.47/8.65 * message. 28.47/8.65 * 28.47/8.65 * @param message the detail message (which is saved for later retrieval 28.47/8.65 * by the {@link Throwable#getMessage()} method). 28.47/8.65 * @param cause the cause (which is saved for later retrieval by the 28.47/8.65 * {@link Throwable#getCause()} method). (A null value 28.47/8.65 * is permitted, and indicates that the cause is nonexistent or 28.47/8.65 * unknown.) 28.47/8.65 * @since 1.5 28.47/8.65 */ 28.47/8.65 public IllegalArgumentException(String message, Throwable cause) { 28.47/8.65 super(message, cause); 28.47/8.65 } 28.47/8.65 28.47/8.65 /** 28.47/8.65 * Constructs a new exception with the specified cause and a detail 28.47/8.65 * message of (cause==null ? null : cause.toString()) (which 28.47/8.65 * typically contains the class and detail message of cause). 28.47/8.65 * This constructor is useful for exceptions that are little more than 28.47/8.65 * wrappers for other throwables (for example, {@link 28.47/8.65 * java.security.PrivilegedActionException}). 28.47/8.65 * 28.47/8.65 * @param cause the cause (which is saved for later retrieval by the 28.47/8.65 * {@link Throwable#getCause()} method). (A null value is 28.47/8.65 * permitted, and indicates that the cause is nonexistent or 28.47/8.65 * unknown.) 28.47/8.65 * @since 1.5 28.47/8.65 */ 28.47/8.65 public IllegalArgumentException(Throwable cause) { 28.47/8.65 super(cause); 28.47/8.65 } 28.47/8.65 28.47/8.65 private static final long serialVersionUID = -5365630128856068164L; 28.47/8.65 } 28.47/8.65 28.47/8.65 28.47/8.65 /* 28.47/8.65 * Copyright 1996-2003 Sun Microsystems, Inc. All Rights Reserved. 28.47/8.65 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 28.47/8.65 * 28.47/8.65 * This code is free software; you can redistribute it and/or modify it 28.47/8.65 * under the terms of the GNU General Public License version 2 only, as 28.47/8.65 * published by the Free Software Foundation. Sun designates this 28.47/8.65 * particular file as subject to the "Classpath" exception as provided 28.47/8.65 * by Sun in the LICENSE file that accompanied this code. 28.47/8.65 * 28.47/8.65 * This code is distributed in the hope that it will be useful, but WITHOUT 28.47/8.65 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 28.47/8.65 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 28.47/8.65 * version 2 for more details (a copy is included in the LICENSE file that 28.47/8.65 * accompanied this code). 28.47/8.65 * 28.47/8.65 * You should have received a copy of the GNU General Public License version 28.47/8.65 * 2 along with this work; if not, write to the Free Software Foundation, 28.47/8.65 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 28.47/8.65 * 28.47/8.65 * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, 28.47/8.65 * CA 95054 USA or visit www.sun.com if you need additional information or 28.47/8.65 * have any questions. 28.47/8.65 */ 28.47/8.65 28.47/8.65 package javaUtilEx; 28.47/8.65 28.47/8.65 /** 28.47/8.65 * Signals that a method has been invoked at an illegal or 28.47/8.65 * inappropriate time. In other words, the Java environment or 28.47/8.65 * Java application is not in an appropriate state for the requested 28.47/8.65 * operation. 28.47/8.65 * 28.47/8.65 * @author Jonni Kanerva 28.47/8.65 * @since JDK1.1 28.47/8.65 */ 28.47/8.65 public 28.47/8.65 class IllegalStateException extends RuntimeException { 28.47/8.65 /** 28.47/8.65 * Constructs an IllegalStateException with no detail message. 28.47/8.65 * A detail message is a String that describes this particular exception. 28.47/8.65 */ 28.47/8.65 public IllegalStateException() { 28.47/8.65 super(); 28.47/8.65 } 28.47/8.65 28.47/8.65 /** 28.47/8.65 * Constructs an IllegalStateException with the specified detail 28.47/8.65 * message. A detail message is a String that describes this particular 28.47/8.65 * exception. 28.47/8.65 * 28.47/8.65 * @param s the String that contains a detailed message 28.47/8.65 */ 28.47/8.65 public IllegalStateException(String s) { 28.47/8.65 super(s); 28.47/8.65 } 28.47/8.65 28.47/8.65 /** 28.47/8.65 * Constructs a new exception with the specified detail message and 28.47/8.65 * cause. 28.47/8.65 * 28.47/8.65 *

Note that the detail message associated with cause is 28.47/8.65 * not automatically incorporated in this exception's detail 28.47/8.65 * message. 28.47/8.65 * 28.47/8.65 * @param message the detail message (which is saved for later retrieval 28.47/8.65 * by the {@link Throwable#getMessage()} method). 28.47/8.65 * @param cause the cause (which is saved for later retrieval by the 28.47/8.65 * {@link Throwable#getCause()} method). (A null value 28.47/8.65 * is permitted, and indicates that the cause is nonexistent or 28.47/8.65 * unknown.) 28.47/8.65 * @since 1.5 28.47/8.65 */ 28.47/8.65 public IllegalStateException(String message, Throwable cause) { 28.47/8.65 super(message, cause); 28.47/8.65 } 28.47/8.65 28.47/8.65 /** 28.47/8.65 * Constructs a new exception with the specified cause and a detail 28.47/8.65 * message of (cause==null ? null : cause.toString()) (which 28.47/8.65 * typically contains the class and detail message of cause). 28.47/8.65 * This constructor is useful for exceptions that are little more than 28.47/8.65 * wrappers for other throwables (for example, {@link 28.47/8.65 * java.security.PrivilegedActionException}). 28.47/8.65 * 28.47/8.65 * @param cause the cause (which is saved for later retrieval by the 28.47/8.65 * {@link Throwable#getCause()} method). (A null value is 28.47/8.65 * permitted, and indicates that the cause is nonexistent or 28.47/8.65 * unknown.) 28.47/8.65 * @since 1.5 28.47/8.65 */ 28.47/8.65 public IllegalStateException(Throwable cause) { 28.47/8.65 super(cause); 28.47/8.65 } 28.47/8.65 28.47/8.65 static final long serialVersionUID = -1848914673093119416L; 28.47/8.65 } 28.47/8.65 28.47/8.65 28.47/8.65 /* 28.47/8.65 * Copyright 1997-2006 Sun Microsystems, Inc. All Rights Reserved. 28.47/8.65 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 28.47/8.65 * 28.47/8.65 * This code is free software; you can redistribute it and/or modify it 28.47/8.65 * under the terms of the GNU General Public License version 2 only, as 28.47/8.65 * published by the Free Software Foundation. Sun designates this 28.47/8.65 * particular file as subject to the "Classpath" exception as provided 28.47/8.66 * by Sun in the LICENSE file that accompanied this code. 28.47/8.66 * 28.47/8.66 * This code is distributed in the hope that it will be useful, but WITHOUT 28.47/8.66 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 28.47/8.66 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 28.47/8.66 * version 2 for more details (a copy is included in the LICENSE file that 28.47/8.66 * accompanied this code). 28.47/8.66 * 28.47/8.66 * You should have received a copy of the GNU General Public License version 28.47/8.66 * 2 along with this work; if not, write to the Free Software Foundation, 28.47/8.66 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 28.47/8.66 * 28.47/8.66 * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, 28.47/8.66 * CA 95054 USA or visit www.sun.com if you need additional information or 28.47/8.66 * have any questions. 28.47/8.66 */ 28.47/8.66 28.47/8.66 package javaUtilEx; 28.47/8.66 28.47/8.66 /** 28.47/8.66 * An iterator over a collection. {@code Iterator} takes the place of 28.47/8.66 * {@link Enumeration} in the Java Collections Framework. Iterators 28.47/8.66 * differ from enumerations in two ways: 28.47/8.66 * 28.47/8.66 *

28.47/8.66 * 28.47/8.66 *

This interface is a member of the 28.47/8.66 * 28.47/8.66 * Java Collections Framework. 28.47/8.66 * 28.47/8.66 * @author Josh Bloch 28.47/8.66 * @see Collection 28.47/8.66 * @see ListIterator 28.47/8.66 * @see Iterable 28.47/8.66 * @since 1.2 28.47/8.66 */ 28.47/8.66 public interface Iterator { 28.47/8.66 /** 28.47/8.66 * Returns {@code true} if the iteration has more elements. 28.47/8.66 * (In other words, returns {@code true} if {@link #next} would 28.47/8.66 * return an element rather than throwing an exception.) 28.47/8.66 * 28.47/8.66 * @return {@code true} if the iteration has more elements 28.47/8.66 */ 28.47/8.66 boolean hasNext(); 28.47/8.66 28.47/8.66 /** 28.47/8.66 * Returns the next element in the iteration. 28.47/8.66 * 28.47/8.66 * @return the next element in the iteration 28.47/8.66 * @throws NoSuchElementException if the iteration has no more elements 28.47/8.66 */ 28.47/8.66 E next(); 28.47/8.66 28.47/8.66 /** 28.47/8.66 * Removes from the underlying collection the last element returned 28.47/8.66 * by this iterator (optional operation). This method can be called 28.47/8.66 * only once per call to {@link #next}. The behavior of an iterator 28.47/8.66 * is unspecified if the underlying collection is modified while the 28.47/8.66 * iteration is in progress in any way other than by calling this 28.47/8.66 * method. 28.47/8.66 * 28.47/8.66 * @throws UnsupportedOperationException if the {@code remove} 28.47/8.66 * operation is not supported by this iterator 28.47/8.66 * 28.47/8.66 * @throws IllegalStateException if the {@code next} method has not 28.47/8.66 * yet been called, or the {@code remove} method has already 28.47/8.66 * been called after the last call to the {@code next} 28.47/8.66 * method 28.47/8.66 */ 28.47/8.66 void remove(); 28.47/8.66 } 28.47/8.66 28.47/8.66 28.47/8.66 package javaUtilEx; 28.47/8.66 28.47/8.66 public class juHashMapCreateIteratorKeyLoop { 28.47/8.66 public static void main(String[] args) { 28.47/8.66 Random.args = args; 28.47/8.66 28.47/8.66 HashMap m = createMap(Random.random()); 28.47/8.66 28.47/8.66 Iterator it = m.keySet().iterator(); 28.47/8.66 while (it.hasNext()) { 28.47/8.66 it.next(); 28.47/8.66 } 28.47/8.66 } 28.47/8.66 28.47/8.66 public static HashMap createMap(int n) { 28.47/8.66 HashMap m = new HashMap(); 28.47/8.66 while (n > 0) { 28.47/8.66 Content key = new Content(Random.random()); 28.47/8.66 Content val = new Content(Random.random()); 28.47/8.66 m.put(key, val); 28.47/8.66 n--; 28.47/8.66 } 28.47/8.66 return m; 28.47/8.66 } 28.47/8.66 } 28.47/8.66 28.47/8.66 final class Content { 28.47/8.66 int val; 28.47/8.66 28.47/8.66 public Content(int v) { 28.47/8.66 this.val = v; 28.47/8.66 } 28.47/8.66 28.47/8.66 public int hashCode() { 28.47/8.66 return val^31; 28.47/8.66 } 28.47/8.66 28.47/8.66 public boolean equals(Object o) { 28.47/8.66 if (o instanceof Content) { 28.47/8.66 return this.val == ((Content) o).val; 28.47/8.66 } 28.47/8.66 return false; 28.47/8.66 } 28.47/8.66 } 28.47/8.66 28.47/8.66 28.47/8.66 /* 28.47/8.66 * Copyright 1997-2006 Sun Microsystems, Inc. All Rights Reserved. 28.47/8.66 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 28.47/8.66 * 28.47/8.66 * This code is free software; you can redistribute it and/or modify it 28.47/8.66 * under the terms of the GNU General Public License version 2 only, as 28.47/8.66 * published by the Free Software Foundation. Sun designates this 28.47/8.66 * particular file as subject to the "Classpath" exception as provided 28.47/8.66 * by Sun in the LICENSE file that accompanied this code. 28.47/8.66 * 28.47/8.66 * This code is distributed in the hope that it will be useful, but WITHOUT 28.47/8.66 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 28.47/8.66 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 28.47/8.66 * version 2 for more details (a copy is included in the LICENSE file that 28.47/8.66 * accompanied this code). 28.47/8.66 * 28.47/8.66 * You should have received a copy of the GNU General Public License version 28.47/8.66 * 2 along with this work; if not, write to the Free Software Foundation, 28.47/8.66 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 28.47/8.66 * 28.47/8.66 * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, 28.47/8.66 * CA 95054 USA or visit www.sun.com if you need additional information or 28.47/8.66 * have any questions. 28.47/8.66 */ 28.47/8.66 28.47/8.66 package javaUtilEx; 28.47/8.66 28.47/8.66 /** 28.47/8.66 * An object that maps keys to values. A map cannot contain duplicate keys; 28.47/8.66 * each key can map to at most one value. 28.47/8.66 * 28.47/8.66 *

This interface takes the place of the Dictionary class, which 28.47/8.66 * was a totally abstract class rather than an interface. 28.47/8.66 * 28.47/8.66 *

The Map interface provides three collection views, which 28.47/8.66 * allow a map's contents to be viewed as a set of keys, collection of values, 28.47/8.66 * or set of key-value mappings. The order of a map is defined as 28.47/8.66 * the order in which the iterators on the map's collection views return their 28.47/8.66 * elements. Some map implementations, like the TreeMap class, make 28.47/8.66 * specific guarantees as to their order; others, like the HashMap 28.47/8.66 * class, do not. 28.47/8.66 * 28.47/8.66 *

Note: great care must be exercised if mutable objects are used as map 28.47/8.66 * keys. The behavior of a map is not specified if the value of an object is 28.47/8.66 * changed in a manner that affects equals comparisons while the 28.47/8.66 * object is a key in the map. A special case of this prohibition is that it 28.47/8.66 * is not permissible for a map to contain itself as a key. While it is 28.47/8.66 * permissible for a map to contain itself as a value, extreme caution is 28.47/8.66 * advised: the equals and hashCode methods are no longer 28.47/8.66 * well defined on such a map. 28.47/8.66 * 28.47/8.66 *

All general-purpose map implementation classes should provide two 28.47/8.66 * "standard" constructors: a void (no arguments) constructor which creates an 28.47/8.66 * empty map, and a constructor with a single argument of type Map, 28.47/8.66 * which creates a new map with the same key-value mappings as its argument. 28.47/8.66 * In effect, the latter constructor allows the user to copy any map, 28.47/8.66 * producing an equivalent map of the desired class. There is no way to 28.47/8.66 * enforce this recommendation (as interfaces cannot contain constructors) but 28.47/8.66 * all of the general-purpose map implementations in the JDK comply. 28.47/8.66 * 28.47/8.66 *

The "destructive" methods contained in this interface, that is, the 28.47/8.66 * methods that modify the map on which they operate, are specified to throw 28.47/8.66 * UnsupportedOperationException if this map does not support the 28.47/8.66 * operation. If this is the case, these methods may, but are not required 28.47/8.66 * to, throw an UnsupportedOperationException if the invocation would 28.47/8.66 * have no effect on the map. For example, invoking the {@link #putAll(Map)} 28.47/8.66 * method on an unmodifiable map may, but is not required to, throw the 28.47/8.66 * exception if the map whose mappings are to be "superimposed" is empty. 28.47/8.66 * 28.47/8.66 *

Some map implementations have restrictions on the keys and values they 28.47/8.66 * may contain. For example, some implementations prohibit null keys and 28.47/8.66 * values, and some have restrictions on the types of their keys. Attempting 28.47/8.66 * to insert an ineligible key or value throws an unchecked exception, 28.47/8.66 * typically NullPointerException or ClassCastException. 28.47/8.66 * Attempting to query the presence of an ineligible key or value may throw an 28.47/8.66 * exception, or it may simply return false; some implementations will exhibit 28.47/8.66 * the former behavior and some will exhibit the latter. More generally, 28.47/8.66 * attempting an operation on an ineligible key or value whose completion 28.47/8.66 * would not result in the insertion of an ineligible element into the map may 28.47/8.66 * throw an exception or it may succeed, at the option of the implementation. 28.47/8.66 * Such exceptions are marked as "optional" in the specification for this 28.47/8.66 * interface. 28.47/8.66 * 28.47/8.66 *

This interface is a member of the 28.47/8.66 * 28.47/8.66 * Java Collections Framework. 28.47/8.66 * 28.47/8.66 *

Many methods in Collections Framework interfaces are defined 28.47/8.66 * in terms of the {@link Object#equals(Object) equals} method. For 28.47/8.66 * example, the specification for the {@link #containsKey(Object) 28.47/8.66 * containsKey(Object key)} method says: "returns true if and 28.47/8.66 * only if this map contains a mapping for a key k such that 28.47/8.66 * (key==null ? k==null : key.equals(k))." This specification should 28.47/8.66 * not be construed to imply that invoking Map.containsKey 28.47/8.66 * with a non-null argument key will cause key.equals(k) to 28.47/8.66 * be invoked for any key k. Implementations are free to 28.47/8.66 * implement optimizations whereby the equals invocation is avoided, 28.47/8.66 * for example, by first comparing the hash codes of the two keys. (The 28.47/8.66 * {@link Object#hashCode()} specification guarantees that two objects with 28.47/8.66 * unequal hash codes cannot be equal.) More generally, implementations of 28.47/8.66 * the various Collections Framework interfaces are free to take advantage of 28.47/8.66 * the specified behavior of underlying {@link Object} methods wherever the 28.47/8.66 * implementor deems it appropriate. 28.47/8.66 * 28.47/8.66 * @param the type of keys maintained by this map 28.47/8.66 * @param the type of mapped values 28.47/8.66 * 28.47/8.66 * @author Josh Bloch 28.47/8.66 * @see HashMap 28.47/8.66 * @see TreeMap 28.47/8.66 * @see Hashtable 28.47/8.66 * @see SortedMap 28.47/8.66 * @see Collection 28.47/8.66 * @see Set 28.47/8.66 * @since 1.2 28.47/8.66 */ 28.47/8.66 public interface Map { 28.47/8.66 // Query Operations 28.47/8.66 28.47/8.66 /** 28.47/8.66 * Returns the number of key-value mappings in this map. If the 28.47/8.66 * map contains more than Integer.MAX_VALUE elements, returns 28.47/8.66 * Integer.MAX_VALUE. 28.47/8.66 * 28.47/8.66 * @return the number of key-value mappings in this map 28.47/8.66 */ 28.47/8.66 int size(); 28.47/8.66 28.47/8.66 /** 28.47/8.66 * Returns true if this map contains no key-value mappings. 28.47/8.66 * 28.47/8.66 * @return true if this map contains no key-value mappings 28.47/8.66 */ 28.47/8.66 boolean isEmpty(); 28.47/8.66 28.47/8.66 /** 28.47/8.66 * Returns true if this map contains a mapping for the specified 28.47/8.66 * key. More formally, returns true if and only if 28.47/8.66 * this map contains a mapping for a key k such that 28.47/8.66 * (key==null ? k==null : key.equals(k)). (There can be 28.47/8.66 * at most one such mapping.) 28.47/8.66 * 28.47/8.66 * @param key key whose presence in this map is to be tested 28.47/8.66 * @return true if this map contains a mapping for the specified 28.47/8.66 * key 28.47/8.66 * @throws ClassCastException if the key is of an inappropriate type for 28.47/8.66 * this map (optional) 28.47/8.66 * @throws NullPointerException if the specified key is null and this map 28.47/8.66 * does not permit null keys (optional) 28.47/8.66 */ 28.47/8.66 boolean containsKey(Object key); 28.47/8.66 28.47/8.66 /** 28.47/8.66 * Returns true if this map maps one or more keys to the 28.47/8.66 * specified value. More formally, returns true if and only if 28.47/8.66 * this map contains at least one mapping to a value v such that 28.47/8.66 * (value==null ? v==null : value.equals(v)). This operation 28.47/8.66 * will probably require time linear in the map size for most 28.47/8.66 * implementations of the Map interface. 28.47/8.66 * 28.47/8.66 * @param value value whose presence in this map is to be tested 28.47/8.66 * @return true if this map maps one or more keys to the 28.47/8.66 * specified value 28.47/8.66 * @throws ClassCastException if the value is of an inappropriate type for 28.47/8.66 * this map (optional) 28.47/8.66 * @throws NullPointerException if the specified value is null and this 28.47/8.66 * map does not permit null values (optional) 28.47/8.66 */ 28.47/8.66 boolean containsValue(Object value); 28.47/8.66 28.47/8.66 /** 28.47/8.66 * Returns the value to which the specified key is mapped, 28.47/8.66 * or {@code null} if this map contains no mapping for the key. 28.47/8.66 * 28.47/8.66 *

More formally, if this map contains a mapping from a key 28.47/8.66 * {@code k} to a value {@code v} such that {@code (key==null ? k==null : 28.47/8.66 * key.equals(k))}, then this method returns {@code v}; otherwise 28.47/8.66 * it returns {@code null}. (There can be at most one such mapping.) 28.47/8.66 * 28.47/8.66 *

If this map permits null values, then a return value of 28.47/8.66 * {@code null} does not necessarily indicate that the map 28.47/8.66 * contains no mapping for the key; it's also possible that the map 28.47/8.66 * explicitly maps the key to {@code null}. The {@link #containsKey 28.47/8.66 * containsKey} operation may be used to distinguish these two cases. 28.47/8.66 * 28.47/8.66 * @param key the key whose associated value is to be returned 28.47/8.66 * @return the value to which the specified key is mapped, or 28.47/8.66 * {@code null} if this map contains no mapping for the key 28.47/8.66 * @throws ClassCastException if the key is of an inappropriate type for 28.47/8.66 * this map (optional) 28.47/8.66 * @throws NullPointerException if the specified key is null and this map 28.47/8.66 * does not permit null keys (optional) 28.47/8.66 */ 28.47/8.66 V get(Object key); 28.47/8.66 28.47/8.66 // Modification Operations 28.47/8.66 28.47/8.66 /** 28.47/8.66 * Associates the specified value with the specified key in this map 28.47/8.66 * (optional operation). If the map previously contained a mapping for 28.47/8.66 * the key, the old value is replaced by the specified value. (A map 28.47/8.66 * m is said to contain a mapping for a key k if and only 28.47/8.66 * if {@link #containsKey(Object) m.containsKey(k)} would return 28.47/8.66 * true.) 28.47/8.66 * 28.47/8.66 * @param key key with which the specified value is to be associated 28.47/8.66 * @param value value to be associated with the specified key 28.47/8.66 * @return the previous value associated with key, or 28.47/8.66 * null if there was no mapping for key. 28.47/8.66 * (A null return can also indicate that the map 28.47/8.66 * previously associated null with key, 28.47/8.66 * if the implementation supports null values.) 28.47/8.66 * @throws UnsupportedOperationException if the put operation 28.47/8.66 * is not supported by this map 28.47/8.66 * @throws ClassCastException if the class of the specified key or value 28.47/8.66 * prevents it from being stored in this map 28.47/8.66 * @throws NullPointerException if the specified key or value is null 28.47/8.66 * and this map does not permit null keys or values 28.47/8.66 * @throws IllegalArgumentException if some property of the specified key 28.47/8.66 * or value prevents it from being stored in this map 28.47/8.66 */ 28.47/8.66 V put(K key, V value); 28.47/8.66 28.47/8.66 /** 28.47/8.66 * Removes the mapping for a key from this map if it is present 28.47/8.66 * (optional operation). More formally, if this map contains a mapping 28.47/8.66 * from key k to value v such that 28.47/8.66 * (key==null ? k==null : key.equals(k)), that mapping 28.47/8.66 * is removed. (The map can contain at most one such mapping.) 28.47/8.66 * 28.47/8.66 *

Returns the value to which this map previously associated the key, 28.47/8.66 * or null if the map contained no mapping for the key. 28.47/8.66 * 28.47/8.66 *

If this map permits null values, then a return value of 28.47/8.66 * null does not necessarily indicate that the map 28.47/8.66 * contained no mapping for the key; it's also possible that the map 28.47/8.66 * explicitly mapped the key to null. 28.47/8.66 * 28.47/8.66 *

The map will not contain a mapping for the specified key once the 28.47/8.66 * call returns. 28.47/8.66 * 28.47/8.66 * @param key key whose mapping is to be removed from the map 28.47/8.66 * @return the previous value associated with key, or 28.47/8.66 * null if there was no mapping for key. 28.47/8.66 * @throws UnsupportedOperationException if the remove operation 28.47/8.66 * is not supported by this map 28.47/8.66 * @throws ClassCastException if the key is of an inappropriate type for 28.47/8.66 * this map (optional) 28.47/8.66 * @throws NullPointerException if the specified key is null and this 28.47/8.66 * map does not permit null keys (optional) 28.47/8.66 */ 28.47/8.66 V remove(Object key); 28.47/8.66 28.47/8.66 28.47/8.66 // Bulk Operations 28.47/8.66 28.47/8.66 /** 28.47/8.66 * Copies all of the mappings from the specified map to this map 28.47/8.66 * (optional operation). The effect of this call is equivalent to that 28.47/8.66 * of calling {@link #put(Object,Object) put(k, v)} on this map once 28.47/8.66 * for each mapping from key k to value v in the 28.47/8.66 * specified map. The behavior of this operation is undefined if the 28.47/8.66 * specified map is modified while the operation is in progress. 28.47/8.66 * 28.47/8.66 * @param m mappings to be stored in this map 28.47/8.66 * @throws UnsupportedOperationException if the putAll operation 28.47/8.66 * is not supported by this map 28.47/8.66 * @throws ClassCastException if the class of a key or value in the 28.47/8.66 * specified map prevents it from being stored in this map 28.47/8.66 * @throws NullPointerException if the specified map is null, or if 28.47/8.66 * this map does not permit null keys or values, and the 28.47/8.66 * specified map contains null keys or values 28.47/8.66 * @throws IllegalArgumentException if some property of a key or value in 28.47/8.66 * the specified map prevents it from being stored in this map 28.47/8.66 */ 28.47/8.66 void putAll(Map m); 28.47/8.66 28.47/8.66 /** 28.47/8.66 * Removes all of the mappings from this map (optional operation). 28.47/8.66 * The map will be empty after this call returns. 28.47/8.66 * 28.47/8.66 * @throws UnsupportedOperationException if the clear operation 28.47/8.66 * is not supported by this map 28.47/8.66 */ 28.47/8.66 void clear(); 28.47/8.66 28.47/8.66 28.47/8.66 // Views 28.47/8.66 28.47/8.66 /** 28.47/8.66 * Returns a {@link Set} view of the keys contained in this map. 28.47/8.66 * The set is backed by the map, so changes to the map are 28.47/8.66 * reflected in the set, and vice-versa. If the map is modified 28.47/8.66 * while an iteration over the set is in progress (except through 28.47/8.66 * the iterator's own remove operation), the results of 28.47/8.66 * the iteration are undefined. The set supports element removal, 28.47/8.66 * which removes the corresponding mapping from the map, via the 28.47/8.66 * Iterator.remove, Set.remove, 28.47/8.66 * removeAll, retainAll, and clear 28.47/8.66 * operations. It does not support the add or addAll 28.47/8.66 * operations. 28.47/8.66 * 28.47/8.66 * @return a set view of the keys contained in this map 28.47/8.66 */ 28.47/8.66 Set keySet(); 28.47/8.66 28.47/8.66 /** 28.47/8.66 * Returns a {@link Collection} view of the values contained in this map. 28.47/8.66 * The collection is backed by the map, so changes to the map are 28.47/8.66 * reflected in the collection, and vice-versa. If the map is 28.47/8.66 * modified while an iteration over the collection is in progress 28.47/8.66 * (except through the iterator's own remove operation), 28.47/8.66 * the results of the iteration are undefined. The collection 28.47/8.66 * supports element removal, which removes the corresponding 28.47/8.66 * mapping from the map, via the Iterator.remove, 28.47/8.66 * Collection.remove, removeAll, 28.47/8.66 * retainAll and clear operations. It does not 28.47/8.66 * support the add or addAll operations. 28.47/8.66 * 28.47/8.66 * @return a collection view of the values contained in this map 28.47/8.66 */ 28.47/8.66 Collection values(); 28.47/8.66 28.47/8.66 /** 28.47/8.66 * Returns a {@link Set} view of the mappings contained in this map. 28.47/8.66 * The set is backed by the map, so changes to the map are 28.47/8.66 * reflected in the set, and vice-versa. If the map is modified 28.47/8.66 * while an iteration over the set is in progress (except through 28.47/8.66 * the iterator's own remove operation, or through the 28.47/8.66 * setValue operation on a map entry returned by the 28.47/8.66 * iterator) the results of the iteration are undefined. The set 28.47/8.66 * supports element removal, which removes the corresponding 28.47/8.66 * mapping from the map, via the Iterator.remove, 28.47/8.66 * Set.remove, removeAll, retainAll and 28.47/8.66 * clear operations. It does not support the 28.47/8.66 * add or addAll operations. 28.47/8.66 * 28.47/8.66 * @return a set view of the mappings contained in this map 28.47/8.66 */ 28.47/8.66 Set> entrySet(); 28.47/8.66 28.47/8.66 /** 28.47/8.66 * A map entry (key-value pair). The Map.entrySet method returns 28.47/8.66 * a collection-view of the map, whose elements are of this class. The 28.47/8.66 * only way to obtain a reference to a map entry is from the 28.47/8.66 * iterator of this collection-view. These Map.Entry objects are 28.47/8.66 * valid only for the duration of the iteration; more formally, 28.47/8.66 * the behavior of a map entry is undefined if the backing map has been 28.47/8.66 * modified after the entry was returned by the iterator, except through 28.47/8.66 * the setValue operation on the map entry. 28.47/8.66 * 28.47/8.66 * @see Map#entrySet() 28.47/8.66 * @since 1.2 28.47/8.66 */ 28.47/8.66 interface Entry { 28.47/8.66 /** 28.47/8.66 * Returns the key corresponding to this entry. 28.47/8.66 * 28.47/8.66 * @return the key corresponding to this entry 28.47/8.66 * @throws IllegalStateException implementations may, but are not 28.47/8.66 * required to, throw this exception if the entry has been 28.47/8.66 * removed from the backing map. 28.47/8.66 */ 28.47/8.66 K getKey(); 28.47/8.66 28.47/8.66 /** 28.47/8.66 * Returns the value corresponding to this entry. If the mapping 28.47/8.66 * has been removed from the backing map (by the iterator's 28.47/8.66 * remove operation), the results of this call are undefined. 28.47/8.66 * 28.47/8.66 * @return the value corresponding to this entry 28.47/8.66 * @throws IllegalStateException implementations may, but are not 28.47/8.66 * required to, throw this exception if the entry has been 28.47/8.66 * removed from the backing map. 28.47/8.66 */ 28.47/8.66 V getValue(); 28.47/8.66 28.47/8.66 /** 28.47/8.66 * Replaces the value corresponding to this entry with the specified 28.47/8.66 * value (optional operation). (Writes through to the map.) The 28.47/8.66 * behavior of this call is undefined if the mapping has already been 28.47/8.66 * removed from the map (by the iterator's remove operation). 28.47/8.66 * 28.47/8.66 * @param value new value to be stored in this entry 28.47/8.66 * @return old value corresponding to the entry 28.47/8.66 * @throws UnsupportedOperationException if the put operation 28.47/8.66 * is not supported by the backing map 28.47/8.66 * @throws ClassCastException if the class of the specified value 28.47/8.66 * prevents it from being stored in the backing map 28.47/8.66 * @throws NullPointerException if the backing map does not permit 28.47/8.66 * null values, and the specified value is null 28.47/8.66 * @throws IllegalArgumentException if some property of this value 28.47/8.66 * prevents it from being stored in the backing map 28.47/8.66 * @throws IllegalStateException implementations may, but are not 28.47/8.66 * required to, throw this exception if the entry has been 28.47/8.66 * removed from the backing map. 28.47/8.66 */ 28.47/8.66 V setValue(V value); 28.47/8.66 28.47/8.66 /** 28.47/8.66 * Compares the specified object with this entry for equality. 28.47/8.66 * Returns true if the given object is also a map entry and 28.47/8.66 * the two entries represent the same mapping. More formally, two 28.47/8.66 * entries e1 and e2 represent the same mapping 28.47/8.66 * if

28.47/8.66	         *     (e1.getKey()==null ?
28.47/8.66	         *      e2.getKey()==null : e1.getKey().equals(e2.getKey()))  &&
28.47/8.66	         *     (e1.getValue()==null ?
28.47/8.66	         *      e2.getValue()==null : e1.getValue().equals(e2.getValue()))
28.47/8.66	         * 
28.47/8.66 * This ensures that the equals method works properly across 28.47/8.66 * different implementations of the Map.Entry interface. 28.47/8.66 * 28.47/8.66 * @param o object to be compared for equality with this map entry 28.47/8.66 * @return true if the specified object is equal to this map 28.47/8.66 * entry 28.47/8.66 */ 28.47/8.66 boolean equals(Object o); 28.47/8.66 28.47/8.66 /** 28.47/8.66 * Returns the hash code value for this map entry. The hash code 28.47/8.66 * of a map entry e is defined to be:
28.47/8.66	         *     (e.getKey()==null   ? 0 : e.getKey().hashCode()) ^
28.47/8.66	         *     (e.getValue()==null ? 0 : e.getValue().hashCode())
28.47/8.66	         * 
28.47/8.66 * This ensures that e1.equals(e2) implies that 28.47/8.66 * e1.hashCode()==e2.hashCode() for any two Entries 28.47/8.66 * e1 and e2, as required by the general 28.47/8.66 * contract of Object.hashCode. 28.47/8.66 * 28.47/8.66 * @return the hash code value for this map entry 28.47/8.66 * @see Object#hashCode() 28.47/8.66 * @see Object#equals(Object) 28.47/8.66 * @see #equals(Object) 28.47/8.66 */ 28.47/8.66 int hashCode(); 28.47/8.66 } 28.47/8.66 28.47/8.66 // Comparison and hashing 28.47/8.66 28.47/8.66 /** 28.47/8.66 * Compares the specified object with this map for equality. Returns 28.47/8.66 * true if the given object is also a map and the two maps 28.47/8.66 * represent the same mappings. More formally, two maps m1 and 28.47/8.66 * m2 represent the same mappings if 28.47/8.66 * m1.entrySet().equals(m2.entrySet()). This ensures that the 28.47/8.66 * equals method works properly across different implementations 28.47/8.66 * of the Map interface. 28.47/8.66 * 28.47/8.66 * @param o object to be compared for equality with this map 28.47/8.66 * @return true if the specified object is equal to this map 28.47/8.66 */ 28.47/8.66 boolean equals(Object o); 28.47/8.66 28.47/8.66 /** 28.47/8.66 * Returns the hash code value for this map. The hash code of a map is 28.47/8.66 * defined to be the sum of the hash codes of each entry in the map's 28.47/8.66 * entrySet() view. This ensures that m1.equals(m2) 28.47/8.66 * implies that m1.hashCode()==m2.hashCode() for any two maps 28.47/8.66 * m1 and m2, as required by the general contract of 28.47/8.66 * {@link Object#hashCode}. 28.47/8.66 * 28.47/8.66 * @return the hash code value for this map 28.47/8.66 * @see Map.Entry#hashCode() 28.47/8.66 * @see Object#equals(Object) 28.47/8.66 * @see #equals(Object) 28.47/8.66 */ 28.47/8.66 int hashCode(); 28.47/8.66 } 28.47/8.66 28.47/8.66 28.47/8.66 /* 28.47/8.66 * Copyright 1994-1998 Sun Microsystems, Inc. All Rights Reserved. 28.47/8.66 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 28.47/8.66 * 28.47/8.66 * This code is free software; you can redistribute it and/or modify it 28.47/8.66 * under the terms of the GNU General Public License version 2 only, as 28.47/8.66 * published by the Free Software Foundation. Sun designates this 28.47/8.66 * particular file as subject to the "Classpath" exception as provided 28.47/8.66 * by Sun in the LICENSE file that accompanied this code. 28.47/8.66 * 28.47/8.66 * This code is distributed in the hope that it will be useful, but WITHOUT 28.47/8.66 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 28.47/8.66 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 28.47/8.66 * version 2 for more details (a copy is included in the LICENSE file that 28.47/8.66 * accompanied this code). 28.47/8.66 * 28.47/8.66 * You should have received a copy of the GNU General Public License version 28.47/8.66 * 2 along with this work; if not, write to the Free Software Foundation, 28.47/8.66 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 28.47/8.66 * 28.47/8.66 * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, 28.47/8.66 * CA 95054 USA or visit www.sun.com if you need additional information or 28.47/8.66 * have any questions. 28.47/8.66 */ 28.47/8.66 28.47/8.66 package javaUtilEx; 28.47/8.66 28.47/8.66 /** 28.47/8.66 * Thrown by the nextElement method of an 28.47/8.66 * Enumeration to indicate that there are no more 28.47/8.66 * elements in the enumeration. 28.47/8.66 * 28.47/8.66 * @author unascribed 28.47/8.66 * @see java.util.Enumeration 28.47/8.66 * @see java.util.Enumeration#nextElement() 28.47/8.66 * @since JDK1.0 28.47/8.66 */ 28.47/8.66 public 28.47/8.66 class NoSuchElementException extends RuntimeException { 28.47/8.66 /** 28.47/8.66 * Constructs a NoSuchElementException with null 28.47/8.66 * as its error message string. 28.47/8.66 */ 28.47/8.66 public NoSuchElementException() { 28.47/8.66 super(); 28.47/8.66 } 28.47/8.66 28.47/8.66 /** 28.47/8.66 * Constructs a NoSuchElementException, saving a reference 28.47/8.66 * to the error message string s for later retrieval by the 28.47/8.66 * getMessage method. 28.47/8.66 * 28.47/8.66 * @param s the detail message. 28.47/8.66 */ 28.47/8.66 public NoSuchElementException(String s) { 28.47/8.66 super(s); 28.47/8.66 } 28.47/8.66 } 28.47/8.66 28.47/8.66 28.47/8.66 package javaUtilEx; 28.47/8.66 28.47/8.66 public class Random { 28.47/8.66 static String[] args; 28.47/8.66 static int index = 0; 28.47/8.66 28.47/8.66 public static int random() { 28.47/8.66 String string = args[index]; 28.47/8.66 index++; 28.47/8.66 return string.length(); 28.47/8.66 } 28.47/8.66 } 28.47/8.66 28.47/8.66 28.47/8.66 /* 28.47/8.66 * Copyright 1997-2006 Sun Microsystems, Inc. All Rights Reserved. 28.47/8.66 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 28.47/8.66 * 28.47/8.66 * This code is free software; you can redistribute it and/or modify it 28.47/8.66 * under the terms of the GNU General Public License version 2 only, as 28.47/8.66 * published by the Free Software Foundation. Sun designates this 28.47/8.66 * particular file as subject to the "Classpath" exception as provided 28.47/8.66 * by Sun in the LICENSE file that accompanied this code. 28.47/8.66 * 28.47/8.66 * This code is distributed in the hope that it will be useful, but WITHOUT 28.47/8.66 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 28.47/8.66 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 28.47/8.66 * version 2 for more details (a copy is included in the LICENSE file that 28.47/8.66 * accompanied this code). 28.47/8.66 * 28.47/8.66 * You should have received a copy of the GNU General Public License version 28.47/8.66 * 2 along with this work; if not, write to the Free Software Foundation, 28.47/8.66 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 28.47/8.66 * 28.47/8.66 * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, 28.47/8.66 * CA 95054 USA or visit www.sun.com if you need additional information or 28.47/8.66 * have any questions. 28.47/8.66 */ 28.47/8.66 28.47/8.66 package javaUtilEx; 28.47/8.66 28.47/8.66 /** 28.47/8.66 * A collection that contains no duplicate elements. More formally, sets 28.47/8.66 * contain no pair of elements e1 and e2 such that 28.47/8.66 * e1.equals(e2), and at most one null element. As implied by 28.47/8.66 * its name, this interface models the mathematical set abstraction. 28.47/8.66 * 28.47/8.66 *

The Set interface places additional stipulations, beyond those 28.47/8.66 * inherited from the Collection interface, on the contracts of all 28.47/8.66 * constructors and on the contracts of the add, equals and 28.47/8.66 * hashCode methods. Declarations for other inherited methods are 28.47/8.66 * also included here for convenience. (The specifications accompanying these 28.47/8.66 * declarations have been tailored to the Set interface, but they do 28.47/8.66 * not contain any additional stipulations.) 28.47/8.66 * 28.47/8.66 *

The additional stipulation on constructors is, not surprisingly, 28.47/8.66 * that all constructors must create a set that contains no duplicate elements 28.47/8.66 * (as defined above). 28.47/8.66 * 28.47/8.66 *

Note: Great care must be exercised if mutable objects are used as set 28.47/8.66 * elements. The behavior of a set is not specified if the value of an object 28.47/8.66 * is changed in a manner that affects equals comparisons while the 28.47/8.66 * object is an element in the set. A special case of this prohibition is 28.47/8.66 * that it is not permissible for a set to contain itself as an element. 28.47/8.66 * 28.47/8.66 *

Some set implementations have restrictions on the elements that 28.47/8.66 * they may contain. For example, some implementations prohibit null elements, 28.47/8.66 * and some have restrictions on the types of their elements. Attempting to 28.47/8.66 * add an ineligible element throws an unchecked exception, typically 28.47/8.66 * NullPointerException or ClassCastException. Attempting 28.47/8.66 * to query the presence of an ineligible element may throw an exception, 28.47/8.66 * or it may simply return false; some implementations will exhibit the former 28.47/8.66 * behavior and some will exhibit the latter. More generally, attempting an 28.47/8.66 * operation on an ineligible element whose completion would not result in 28.47/8.66 * the insertion of an ineligible element into the set may throw an 28.47/8.66 * exception or it may succeed, at the option of the implementation. 28.47/8.66 * Such exceptions are marked as "optional" in the specification for this 28.47/8.66 * interface. 28.47/8.66 * 28.47/8.66 *

This interface is a member of the 28.47/8.66 * 28.47/8.66 * Java Collections Framework. 28.47/8.66 * 28.47/8.66 * @param the type of elements maintained by this set 28.47/8.66 * 28.47/8.66 * @author Josh Bloch 28.47/8.66 * @author Neal Gafter 28.47/8.66 * @see Collection 28.47/8.66 * @see List 28.47/8.66 * @see SortedSet 28.47/8.66 * @see HashSet 28.47/8.66 * @see TreeSet 28.47/8.66 * @see AbstractSet 28.47/8.66 * @see Collections#singleton(java.lang.Object) 28.47/8.66 * @see Collections#EMPTY_SET 28.47/8.66 * @since 1.2 28.47/8.66 */ 28.47/8.66 28.47/8.66 public interface Set extends Collection { 28.47/8.66 // Query Operations 28.47/8.66 28.47/8.66 /** 28.47/8.66 * Returns the number of elements in this set (its cardinality). If this 28.47/8.66 * set contains more than Integer.MAX_VALUE elements, returns 28.47/8.66 * Integer.MAX_VALUE. 28.47/8.66 * 28.47/8.66 * @return the number of elements in this set (its cardinality) 28.47/8.66 */ 28.47/8.66 int size(); 28.47/8.66 28.47/8.66 /** 28.47/8.66 * Returns true if this set contains no elements. 28.47/8.66 * 28.47/8.66 * @return true if this set contains no elements 28.47/8.66 */ 28.47/8.66 boolean isEmpty(); 28.47/8.66 28.47/8.66 /** 28.47/8.66 * Returns true if this set contains the specified element. 28.47/8.66 * More formally, returns true if and only if this set 28.47/8.66 * contains an element e such that 28.47/8.66 * (o==null ? e==null : o.equals(e)). 28.47/8.66 * 28.47/8.66 * @param o element whose presence in this set is to be tested 28.47/8.66 * @return true if this set contains the specified element 28.47/8.66 * @throws ClassCastException if the type of the specified element 28.47/8.66 * is incompatible with this set (optional) 28.47/8.66 * @throws NullPointerException if the specified element is null and this 28.47/8.66 * set does not permit null elements (optional) 28.47/8.66 */ 28.47/8.66 boolean contains(Object o); 28.47/8.66 28.47/8.66 /** 28.47/8.66 * Returns an iterator over the elements in this set. The elements are 28.47/8.66 * returned in no particular order (unless this set is an instance of some 28.47/8.66 * class that provides a guarantee). 28.47/8.66 * 28.47/8.66 * @return an iterator over the elements in this set 28.47/8.66 */ 28.47/8.66 Iterator iterator(); 28.47/8.66 28.47/8.66 /** 28.47/8.66 * Returns an array containing all of the elements in this set. 28.47/8.66 * If this set makes any guarantees as to what order its elements 28.47/8.66 * are returned by its iterator, this method must return the 28.47/8.66 * elements in the same order. 28.47/8.66 * 28.47/8.66 *

The returned array will be "safe" in that no references to it 28.47/8.66 * are maintained by this set. (In other words, this method must 28.47/8.66 * allocate a new array even if this set is backed by an array). 28.47/8.66 * The caller is thus free to modify the returned array. 28.47/8.66 * 28.47/8.66 *

This method acts as bridge between array-based and collection-based 28.47/8.66 * APIs. 28.47/8.66 * 28.47/8.66 * @return an array containing all the elements in this set 28.47/8.66 */ 28.47/8.66 Object[] toArray(); 28.47/8.66 28.47/8.66 /** 28.47/8.66 * Returns an array containing all of the elements in this set; the 28.47/8.66 * runtime type of the returned array is that of the specified array. 28.47/8.66 * If the set fits in the specified array, it is returned therein. 28.47/8.66 * Otherwise, a new array is allocated with the runtime type of the 28.47/8.66 * specified array and the size of this set. 28.47/8.66 * 28.47/8.66 *

If this set fits in the specified array with room to spare 28.47/8.66 * (i.e., the array has more elements than this set), the element in 28.47/8.66 * the array immediately following the end of the set is set to 28.47/8.66 * null. (This is useful in determining the length of this 28.47/8.66 * set only if the caller knows that this set does not contain 28.47/8.66 * any null elements.) 28.47/8.66 * 28.47/8.66 *

If this set makes any guarantees as to what order its elements 28.47/8.66 * are returned by its iterator, this method must return the elements 28.47/8.66 * in the same order. 28.47/8.66 * 28.47/8.66 *

Like the {@link #toArray()} method, this method acts as bridge between 28.47/8.66 * array-based and collection-based APIs. Further, this method allows 28.47/8.66 * precise control over the runtime type of the output array, and may, 28.47/8.66 * under certain circumstances, be used to save allocation costs. 28.47/8.66 * 28.47/8.66 *

Suppose x is a set known to contain only strings. 28.47/8.66 * The following code can be used to dump the set into a newly allocated 28.47/8.66 * array of String: 28.47/8.66 * 28.47/8.66 *

28.47/8.66	     *     String[] y = x.toArray(new String[0]);
28.47/8.66 * 28.47/8.66 * Note that toArray(new Object[0]) is identical in function to 28.47/8.66 * toArray(). 28.47/8.66 * 28.47/8.66 * @param a the array into which the elements of this set are to be 28.47/8.66 * stored, if it is big enough; otherwise, a new array of the same 28.47/8.66 * runtime type is allocated for this purpose. 28.47/8.66 * @return an array containing all the elements in this set 28.47/8.66 * @throws ArrayStoreException if the runtime type of the specified array 28.47/8.66 * is not a supertype of the runtime type of every element in this 28.47/8.66 * set 28.47/8.66 * @throws NullPointerException if the specified array is null 28.47/8.66 */ 28.47/8.66 T[] toArray(T[] a); 28.47/8.66 28.47/8.66 28.47/8.66 // Modification Operations 28.47/8.66 28.47/8.66 /** 28.47/8.66 * Adds the specified element to this set if it is not already present 28.47/8.66 * (optional operation). More formally, adds the specified element 28.47/8.66 * e to this set if the set contains no element e2 28.47/8.66 * such that 28.47/8.66 * (e==null ? e2==null : e.equals(e2)). 28.47/8.66 * If this set already contains the element, the call leaves the set 28.47/8.66 * unchanged and returns false. In combination with the 28.47/8.66 * restriction on constructors, this ensures that sets never contain 28.47/8.66 * duplicate elements. 28.47/8.66 * 28.47/8.66 *

The stipulation above does not imply that sets must accept all 28.47/8.66 * elements; sets may refuse to add any particular element, including 28.47/8.66 * null, and throw an exception, as described in the 28.47/8.66 * specification for {@link Collection#add Collection.add}. 28.47/8.66 * Individual set implementations should clearly document any 28.47/8.66 * restrictions on the elements that they may contain. 28.47/8.66 * 28.47/8.66 * @param e element to be added to this set 28.47/8.66 * @return true if this set did not already contain the specified 28.47/8.66 * element 28.47/8.66 * @throws UnsupportedOperationException if the add operation 28.47/8.66 * is not supported by this set 28.47/8.66 * @throws ClassCastException if the class of the specified element 28.47/8.66 * prevents it from being added to this set 28.47/8.66 * @throws NullPointerException if the specified element is null and this 28.47/8.66 * set does not permit null elements 28.47/8.66 * @throws IllegalArgumentException if some property of the specified element 28.47/8.66 * prevents it from being added to this set 28.47/8.66 */ 28.47/8.66 boolean add(E e); 28.47/8.66 28.47/8.66 28.47/8.66 /** 28.47/8.66 * Removes the specified element from this set if it is present 28.47/8.66 * (optional operation). More formally, removes an element e 28.47/8.66 * such that 28.47/8.66 * (o==null ? e==null : o.equals(e)), if 28.47/8.66 * this set contains such an element. Returns true if this set 28.47/8.66 * contained the element (or equivalently, if this set changed as a 28.47/8.66 * result of the call). (This set will not contain the element once the 28.47/8.66 * call returns.) 28.47/8.66 * 28.47/8.66 * @param o object to be removed from this set, if present 28.47/8.66 * @return true if this set contained the specified element 28.47/8.66 * @throws ClassCastException if the type of the specified element 28.47/8.66 * is incompatible with this set (optional) 28.47/8.66 * @throws NullPointerException if the specified element is null and this 28.47/8.66 * set does not permit null elements (optional) 28.47/8.66 * @throws UnsupportedOperationException if the remove operation 28.47/8.66 * is not supported by this set 28.47/8.66 */ 28.47/8.66 boolean remove(Object o); 28.47/8.66 28.47/8.66 28.47/8.66 // Bulk Operations 28.47/8.66 28.47/8.66 /** 28.47/8.66 * Returns true if this set contains all of the elements of the 28.47/8.66 * specified collection. If the specified collection is also a set, this 28.47/8.66 * method returns true if it is a subset of this set. 28.47/8.66 * 28.47/8.66 * @param c collection to be checked for containment in this set 28.47/8.66 * @return true if this set contains all of the elements of the 28.47/8.66 * specified collection 28.47/8.66 * @throws ClassCastException if the types of one or more elements 28.47/8.66 * in the specified collection are incompatible with this 28.47/8.66 * set (optional) 28.47/8.66 * @throws NullPointerException if the specified collection contains one 28.47/8.66 * or more null elements and this set does not permit null 28.47/8.66 * elements (optional), or if the specified collection is null 28.47/8.66 * @see #contains(Object) 28.47/8.66 */ 28.47/8.66 boolean containsAll(Collection c); 28.47/8.66 28.47/8.66 /** 28.47/8.66 * Adds all of the elements in the specified collection to this set if 28.47/8.66 * they're not already present (optional operation). If the specified 28.47/8.66 * collection is also a set, the addAll operation effectively 28.47/8.66 * modifies this set so that its value is the union of the two 28.47/8.66 * sets. The behavior of this operation is undefined if the specified 28.47/8.66 * collection is modified while the operation is in progress. 28.47/8.66 * 28.47/8.66 * @param c collection containing elements to be added to this set 28.47/8.66 * @return true if this set changed as a result of the call 28.47/8.66 * 28.47/8.66 * @throws UnsupportedOperationException if the addAll operation 28.47/8.66 * is not supported by this set 28.47/8.66 * @throws ClassCastException if the class of an element of the 28.47/8.66 * specified collection prevents it from being added to this set 28.47/8.66 * @throws NullPointerException if the specified collection contains one 28.47/8.66 * or more null elements and this set does not permit null 28.47/8.66 * elements, or if the specified collection is null 28.47/8.66 * @throws IllegalArgumentException if some property of an element of the 28.47/8.66 * specified collection prevents it from being added to this set 28.47/8.66 * @see #add(Object) 28.47/8.66 */ 28.47/8.66 boolean addAll(Collection c); 28.47/8.66 28.47/8.66 /** 28.47/8.66 * Retains only the elements in this set that are contained in the 28.47/8.66 * specified collection (optional operation). In other words, removes 28.47/8.66 * from this set all of its elements that are not contained in the 28.47/8.66 * specified collection. If the specified collection is also a set, this 28.47/8.66 * operation effectively modifies this set so that its value is the 28.47/8.66 * intersection of the two sets. 28.47/8.66 * 28.47/8.66 * @param c collection containing elements to be retained in this set 28.47/8.66 * @return true if this set changed as a result of the call 28.47/8.66 * @throws UnsupportedOperationException if the retainAll operation 28.47/8.66 * is not supported by this set 28.47/8.66 * @throws ClassCastException if the class of an element of this set 28.47/8.66 * is incompatible with the specified collection (optional) 28.47/8.66 * @throws NullPointerException if this set contains a null element and the 28.47/8.66 * specified collection does not permit null elements (optional), 28.47/8.66 * or if the specified collection is null 28.47/8.66 * @see #remove(Object) 28.47/8.66 */ 28.47/8.66 boolean retainAll(Collection c); 28.47/8.66 28.47/8.66 /** 28.47/8.66 * Removes from this set all of its elements that are contained in the 28.47/8.66 * specified collection (optional operation). If the specified 28.47/8.66 * collection is also a set, this operation effectively modifies this 28.47/8.66 * set so that its value is the asymmetric set difference of 28.47/8.66 * the two sets. 28.47/8.66 * 28.47/8.66 * @param c collection containing elements to be removed from this set 28.47/8.66 * @return true if this set changed as a result of the call 28.47/8.66 * @throws UnsupportedOperationException if the removeAll operation 28.47/8.66 * is not supported by this set 28.47/8.66 * @throws ClassCastException if the class of an element of this set 28.47/8.66 * is incompatible with the specified collection (optional) 28.47/8.66 * @throws NullPointerException if this set contains a null element and the 28.47/8.66 * specified collection does not permit null elements (optional), 28.47/8.66 * or if the specified collection is null 28.47/8.66 * @see #remove(Object) 28.47/8.66 * @see #contains(Object) 28.47/8.66 */ 28.47/8.66 boolean removeAll(Collection c); 28.47/8.66 28.47/8.66 /** 28.47/8.66 * Removes all of the elements from this set (optional operation). 28.47/8.66 * The set will be empty after this call returns. 28.47/8.66 * 28.47/8.66 * @throws UnsupportedOperationException if the clear method 28.47/8.66 * is not supported by this set 28.47/8.66 */ 28.47/8.66 void clear(); 28.47/8.66 28.47/8.66 28.47/8.66 // Comparison and hashing 28.47/8.66 28.47/8.66 /** 28.47/8.66 * Compares the specified object with this set for equality. Returns 28.47/8.66 * true if the specified object is also a set, the two sets 28.47/8.66 * have the same size, and every member of the specified set is 28.47/8.66 * contained in this set (or equivalently, every member of this set is 28.47/8.66 * contained in the specified set). This definition ensures that the 28.47/8.66 * equals method works properly across different implementations of the 28.47/8.66 * set interface. 28.47/8.66 * 28.47/8.66 * @param o object to be compared for equality with this set 28.47/8.66 * @return true if the specified object is equal to this set 28.47/8.66 */ 28.47/8.66 boolean equals(Object o); 28.47/8.66 28.47/8.66 /** 28.47/8.66 * Returns the hash code value for this set. The hash code of a set is 28.47/8.66 * defined to be the sum of the hash codes of the elements in the set, 28.47/8.66 * where the hash code of a null element is defined to be zero. 28.47/8.66 * This ensures that s1.equals(s2) implies that 28.47/8.66 * s1.hashCode()==s2.hashCode() for any two sets s1 28.47/8.66 * and s2, as required by the general contract of 28.47/8.66 * {@link Object#hashCode}. 28.47/8.66 * 28.47/8.66 * @return the hash code value for this set 28.47/8.66 * @see Object#equals(Object) 28.47/8.66 * @see Set#equals(Object) 28.47/8.66 */ 28.47/8.66 int hashCode(); 28.47/8.66 } 28.47/8.66 28.47/8.66 28.47/8.66 /* 28.47/8.66 * Copyright 1997-2006 Sun Microsystems, Inc. All Rights Reserved. 28.47/8.66 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 28.47/8.66 * 28.47/8.66 * This code is free software; you can redistribute it and/or modify it 28.47/8.66 * under the terms of the GNU General Public License version 2 only, as 28.47/8.66 * published by the Free Software Foundation. Sun designates this 28.47/8.66 * particular file as subject to the "Classpath" exception as provided 28.47/8.66 * by Sun in the LICENSE file that accompanied this code. 28.47/8.66 * 28.47/8.66 * This code is distributed in the hope that it will be useful, but WITHOUT 28.47/8.66 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 28.47/8.66 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 28.47/8.66 * version 2 for more details (a copy is included in the LICENSE file that 28.47/8.66 * accompanied this code). 28.47/8.66 * 28.47/8.66 * You should have received a copy of the GNU General Public License version 28.47/8.66 * 2 along with this work; if not, write to the Free Software Foundation, 28.47/8.66 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 28.47/8.66 * 28.47/8.66 * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, 28.47/8.66 * CA 95054 USA or visit www.sun.com if you need additional information or 28.47/8.66 * have any questions. 28.47/8.66 */ 28.47/8.66 28.47/8.66 package javaUtilEx; 28.47/8.66 28.47/8.66 /** 28.47/8.66 * Thrown to indicate that the requested operation is not supported.

28.47/8.66 * 28.47/8.66 * This class is a member of the 28.47/8.66 * 28.47/8.66 * Java Collections Framework. 28.47/8.66 * 28.47/8.66 * @author Josh Bloch 28.47/8.66 * @since 1.2 28.47/8.66 */ 28.47/8.66 public class UnsupportedOperationException extends RuntimeException { 28.47/8.66 /** 28.47/8.66 * Constructs an UnsupportedOperationException with no detail message. 28.47/8.66 */ 28.47/8.66 public UnsupportedOperationException() { 28.47/8.66 } 28.47/8.66 28.47/8.66 /** 28.47/8.66 * Constructs an UnsupportedOperationException with the specified 28.47/8.66 * detail message. 28.47/8.66 * 28.47/8.66 * @param message the detail message 28.47/8.66 */ 28.47/8.66 public UnsupportedOperationException(String message) { 28.47/8.66 super(message); 28.47/8.66 } 28.47/8.66 28.47/8.66 /** 28.47/8.66 * Constructs a new exception with the specified detail message and 28.47/8.66 * cause. 28.47/8.66 * 28.47/8.66 *

Note that the detail message associated with cause is 28.47/8.66 * not automatically incorporated in this exception's detail 28.47/8.66 * message. 28.47/8.66 * 28.47/8.66 * @param message the detail message (which is saved for later retrieval 28.47/8.66 * by the {@link Throwable#getMessage()} method). 28.47/8.66 * @param cause the cause (which is saved for later retrieval by the 28.47/8.66 * {@link Throwable#getCause()} method). (A null value 28.47/8.66 * is permitted, and indicates that the cause is nonexistent or 28.47/8.66 * unknown.) 28.47/8.66 * @since 1.5 28.47/8.66 */ 28.47/8.66 public UnsupportedOperationException(String message, Throwable cause) { 28.47/8.66 super(message, cause); 28.47/8.66 } 28.47/8.66 28.47/8.66 /** 28.47/8.66 * Constructs a new exception with the specified cause and a detail 28.47/8.66 * message of (cause==null ? null : cause.toString()) (which 28.47/8.66 * typically contains the class and detail message of cause). 28.47/8.66 * This constructor is useful for exceptions that are little more than 28.47/8.66 * wrappers for other throwables (for example, {@link 28.47/8.66 * java.security.PrivilegedActionException}). 28.47/8.66 * 28.47/8.66 * @param cause the cause (which is saved for later retrieval by the 28.47/8.66 * {@link Throwable#getCause()} method). (A null value is 28.47/8.66 * permitted, and indicates that the cause is nonexistent or 28.47/8.66 * unknown.) 28.47/8.66 * @since 1.5 28.47/8.66 */ 28.47/8.66 public UnsupportedOperationException(Throwable cause) { 28.47/8.66 super(cause); 28.47/8.66 } 28.47/8.66 28.47/8.66 static final long serialVersionUID = -1242599979055084673L; 28.47/8.66 } 28.47/8.66 28.47/8.66 28.47/8.66 28.47/8.66 ---------------------------------------- 28.47/8.66 28.47/8.66 (1) BareJBCToJBCProof (EQUIVALENT) 28.47/8.66 initialized classpath 28.47/8.66 ---------------------------------------- 28.47/8.66 28.47/8.66 (2) 28.47/8.66 Obligation: 28.47/8.66 need to prove termination of the following program: 28.47/8.66 /* 28.47/8.66 * Copyright 1997-2006 Sun Microsystems, Inc. All Rights Reserved. 28.47/8.66 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 28.47/8.66 * 28.47/8.66 * This code is free software; you can redistribute it and/or modify it 28.47/8.66 * under the terms of the GNU General Public License version 2 only, as 28.47/8.66 * published by the Free Software Foundation. Sun designates this 28.47/8.66 * particular file as subject to the "Classpath" exception as provided 28.47/8.66 * by Sun in the LICENSE file that accompanied this code. 28.47/8.66 * 28.47/8.66 * This code is distributed in the hope that it will be useful, but WITHOUT 28.47/8.66 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 28.47/8.66 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 28.47/8.66 * version 2 for more details (a copy is included in the LICENSE file that 28.47/8.66 * accompanied this code). 28.47/8.66 * 28.47/8.66 * You should have received a copy of the GNU General Public License version 28.47/8.66 * 2 along with this work; if not, write to the Free Software Foundation, 28.47/8.66 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 28.47/8.66 * 28.47/8.66 * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, 28.47/8.66 * CA 95054 USA or visit www.sun.com if you need additional information or 28.47/8.66 * have any questions. 28.47/8.66 */ 28.47/8.66 28.47/8.66 package javaUtilEx; 28.47/8.66 28.47/8.66 /** 28.47/8.66 * This class provides a skeletal implementation of the Collection 28.47/8.66 * interface, to minimize the effort required to implement this interface.

28.47/8.66 * 28.47/8.66 * To implement an unmodifiable collection, the programmer needs only to 28.47/8.66 * extend this class and provide implementations for the iterator and 28.47/8.66 * size methods. (The iterator returned by the iterator 28.47/8.66 * method must implement hasNext and next.)

28.47/8.66 * 28.47/8.66 * To implement a modifiable collection, the programmer must additionally 28.47/8.66 * override this class's add method (which otherwise throws an 28.47/8.66 * UnsupportedOperationException), and the iterator returned by the 28.47/8.66 * iterator method must additionally implement its remove 28.47/8.66 * method.

28.47/8.66 * 28.47/8.66 * The programmer should generally provide a void (no argument) and 28.47/8.66 * Collection constructor, as per the recommendation in the 28.47/8.66 * Collection interface specification.

28.47/8.66 * 28.47/8.66 * The documentation for each non-abstract method in this class describes its 28.47/8.66 * implementation in detail. Each of these methods may be overridden if 28.47/8.66 * the collection being implemented admits a more efficient implementation.

28.47/8.66 * 28.47/8.66 * This class is a member of the 28.47/8.66 * 28.47/8.66 * Java Collections Framework. 28.47/8.66 * 28.47/8.66 * @author Josh Bloch 28.47/8.66 * @author Neal Gafter 28.47/8.66 * @see Collection 28.47/8.66 * @since 1.2 28.47/8.66 */ 28.47/8.66 28.47/8.66 public abstract class AbstractCollection implements Collection { 28.47/8.66 /** 28.47/8.66 * Sole constructor. (For invocation by subclass constructors, typically 28.47/8.66 * implicit.) 28.47/8.66 */ 28.47/8.66 protected AbstractCollection() { 28.47/8.66 } 28.47/8.66 28.47/8.66 // Query Operations 28.47/8.66 28.47/8.66 /** 28.47/8.66 * Returns an iterator over the elements contained in this collection. 28.47/8.66 * 28.47/8.66 * @return an iterator over the elements contained in this collection 28.47/8.66 */ 28.47/8.66 public abstract Iterator iterator(); 28.47/8.66 28.47/8.66 public abstract int size(); 28.47/8.66 28.47/8.66 /** 28.47/8.66 * {@inheritDoc} 28.47/8.66 * 28.47/8.66 *

This implementation returns size() == 0. 28.47/8.66 */ 28.47/8.66 public boolean isEmpty() { 28.47/8.66 return size() == 0; 28.47/8.66 } 28.47/8.66 28.47/8.66 /** 28.47/8.66 * {@inheritDoc} 28.47/8.66 * 28.47/8.66 *

This implementation iterates over the elements in the collection, 28.47/8.66 * checking each element in turn for equality with the specified element. 28.47/8.66 * 28.47/8.66 * @throws ClassCastException {@inheritDoc} 28.47/8.66 * @throws NullPointerException {@inheritDoc} 28.47/8.66 */ 28.47/8.66 public boolean contains(Object o) { 28.47/8.66 Iterator e = iterator(); 28.47/8.66 if (o==null) { 28.47/8.66 while (e.hasNext()) 28.47/8.66 if (e.next()==null) 28.47/8.66 return true; 28.47/8.66 } else { 28.47/8.66 while (e.hasNext()) 28.47/8.66 if (o.equals(e.next())) 28.47/8.66 return true; 28.47/8.66 } 28.47/8.66 return false; 28.47/8.66 } 28.47/8.66 28.47/8.66 // Modification Operations 28.47/8.66 28.47/8.66 /** 28.47/8.66 * {@inheritDoc} 28.47/8.66 * 28.47/8.66 *

This implementation always throws an 28.47/8.66 * UnsupportedOperationException. 28.47/8.66 * 28.47/8.66 * @throws UnsupportedOperationException {@inheritDoc} 28.47/8.66 * @throws ClassCastException {@inheritDoc} 28.47/8.66 * @throws NullPointerException {@inheritDoc} 28.47/8.66 * @throws IllegalArgumentException {@inheritDoc} 28.47/8.66 * @throws IllegalStateException {@inheritDoc} 28.47/8.66 */ 28.47/8.66 public boolean add(E e) { 28.47/8.66 throw new UnsupportedOperationException(); 28.47/8.66 } 28.47/8.66 28.47/8.66 /** 28.47/8.66 * {@inheritDoc} 28.47/8.66 * 28.47/8.66 *

This implementation iterates over the collection looking for the 28.47/8.66 * specified element. If it finds the element, it removes the element 28.47/8.66 * from the collection using the iterator's remove method. 28.47/8.66 * 28.47/8.66 *

Note that this implementation throws an 28.47/8.66 * UnsupportedOperationException if the iterator returned by this 28.47/8.66 * collection's iterator method does not implement the remove 28.47/8.66 * method and this collection contains the specified object. 28.47/8.66 * 28.47/8.66 * @throws UnsupportedOperationException {@inheritDoc} 28.47/8.66 * @throws ClassCastException {@inheritDoc} 28.47/8.66 * @throws NullPointerException {@inheritDoc} 28.47/8.66 */ 28.47/8.66 public boolean remove(Object o) { 28.47/8.66 Iterator e = iterator(); 28.47/8.66 if (o==null) { 28.47/8.66 while (e.hasNext()) { 28.47/8.66 if (e.next()==null) { 28.47/8.66 e.remove(); 28.47/8.66 return true; 28.47/8.66 } 28.47/8.66 } 28.47/8.66 } else { 28.47/8.66 while (e.hasNext()) { 28.47/8.66 if (o.equals(e.next())) { 28.47/8.66 e.remove(); 28.47/8.66 return true; 28.47/8.66 } 28.47/8.66 } 28.47/8.66 } 28.47/8.66 return false; 28.47/8.66 } 28.47/8.66 28.47/8.66 28.47/8.66 // Bulk Operations 28.47/8.66 28.47/8.66 /** 28.47/8.66 * {@inheritDoc} 28.47/8.66 * 28.47/8.66 *

This implementation iterates over the specified collection, 28.47/8.66 * checking each element returned by the iterator in turn to see 28.47/8.66 * if it's contained in this collection. If all elements are so 28.47/8.66 * contained true is returned, otherwise false. 28.47/8.66 * 28.47/8.66 * @throws ClassCastException {@inheritDoc} 28.47/8.66 * @throws NullPointerException {@inheritDoc} 28.47/8.66 * @see #contains(Object) 28.47/8.66 */ 28.47/8.66 public boolean containsAll(Collection c) { 28.47/8.66 Iterator e = c.iterator(); 28.47/8.66 while (e.hasNext()) 28.47/8.66 if (!contains(e.next())) 28.47/8.66 return false; 28.47/8.66 return true; 28.47/8.66 } 28.47/8.66 28.47/8.66 /** 28.47/8.66 * {@inheritDoc} 28.47/8.66 * 28.47/8.66 *

This implementation iterates over the specified collection, and adds 28.47/8.66 * each object returned by the iterator to this collection, in turn. 28.47/8.66 * 28.47/8.66 *

Note that this implementation will throw an 28.47/8.66 * UnsupportedOperationException unless add is 28.47/8.66 * overridden (assuming the specified collection is non-empty). 28.47/8.66 * 28.47/8.66 * @throws UnsupportedOperationException {@inheritDoc} 28.47/8.66 * @throws ClassCastException {@inheritDoc} 28.47/8.66 * @throws NullPointerException {@inheritDoc} 28.47/8.66 * @throws IllegalArgumentException {@inheritDoc} 28.47/8.66 * @throws IllegalStateException {@inheritDoc} 28.47/8.66 * 28.47/8.66 * @see #add(Object) 28.47/8.66 */ 28.47/8.66 public boolean addAll(Collection c) { 28.47/8.66 boolean modified = false; 28.47/8.66 Iterator e = c.iterator(); 28.47/8.66 while (e.hasNext()) { 28.47/8.66 if (add(e.next())) 28.47/8.66 modified = true; 28.47/8.66 } 28.47/8.66 return modified; 28.47/8.66 } 28.47/8.66 28.47/8.66 /** 28.47/8.66 * {@inheritDoc} 28.47/8.66 * 28.47/8.66 *

This implementation iterates over this collection, checking each 28.47/8.66 * element returned by the iterator in turn to see if it's contained 28.47/8.66 * in the specified collection. If it's so contained, it's removed from 28.47/8.66 * this collection with the iterator's remove method. 28.47/8.66 * 28.47/8.66 *

Note that this implementation will throw an 28.47/8.66 * UnsupportedOperationException if the iterator returned by the 28.47/8.66 * iterator method does not implement the remove method 28.47/8.66 * and this collection contains one or more elements in common with the 28.47/8.66 * specified collection. 28.47/8.66 * 28.47/8.66 * @throws UnsupportedOperationException {@inheritDoc} 28.47/8.66 * @throws ClassCastException {@inheritDoc} 28.47/8.66 * @throws NullPointerException {@inheritDoc} 28.47/8.66 * 28.47/8.66 * @see #remove(Object) 28.47/8.66 * @see #contains(Object) 28.47/8.66 */ 28.47/8.66 public boolean removeAll(Collection c) { 28.47/8.66 boolean modified = false; 28.47/8.66 Iterator e = iterator(); 28.47/8.66 while (e.hasNext()) { 28.47/8.66 if (c.contains(e.next())) { 28.47/8.66 e.remove(); 28.47/8.66 modified = true; 28.47/8.66 } 28.47/8.66 } 28.47/8.66 return modified; 28.47/8.66 } 28.47/8.66 28.47/8.66 /** 28.47/8.66 * {@inheritDoc} 28.47/8.66 * 28.47/8.66 *

This implementation iterates over this collection, checking each 28.47/8.66 * element returned by the iterator in turn to see if it's contained 28.47/8.66 * in the specified collection. If it's not so contained, it's removed 28.47/8.66 * from this collection with the iterator's remove method. 28.47/8.66 * 28.47/8.66 *

Note that this implementation will throw an 28.47/8.66 * UnsupportedOperationException if the iterator returned by the 28.47/8.66 * iterator method does not implement the remove method 28.47/8.66 * and this collection contains one or more elements not present in the 28.47/8.66 * specified collection. 28.47/8.66 * 28.47/8.66 * @throws UnsupportedOperationException {@inheritDoc} 28.47/8.66 * @throws ClassCastException {@inheritDoc} 28.47/8.66 * @throws NullPointerException {@inheritDoc} 28.47/8.66 * 28.47/8.66 * @see #remove(Object) 28.47/8.66 * @see #contains(Object) 28.47/8.66 */ 28.47/8.66 public boolean retainAll(Collection c) { 28.47/8.66 boolean modified = false; 28.47/8.66 Iterator e = iterator(); 28.47/8.66 while (e.hasNext()) { 28.47/8.66 if (!c.contains(e.next())) { 28.47/8.66 e.remove(); 28.47/8.66 modified = true; 28.47/8.66 } 28.47/8.66 } 28.47/8.66 return modified; 28.47/8.66 } 28.47/8.66 28.47/8.66 /** 28.47/8.66 * {@inheritDoc} 28.47/8.66 * 28.47/8.66 *

This implementation iterates over this collection, removing each 28.47/8.66 * element using the Iterator.remove operation. Most 28.47/8.66 * implementations will probably choose to override this method for 28.47/8.66 * efficiency. 28.47/8.66 * 28.47/8.66 *

Note that this implementation will throw an 28.47/8.66 * UnsupportedOperationException if the iterator returned by this 28.47/8.66 * collection's iterator method does not implement the 28.47/8.66 * remove method and this collection is non-empty. 28.47/8.66 * 28.47/8.66 * @throws UnsupportedOperationException {@inheritDoc} 28.47/8.66 */ 28.47/8.66 public void clear() { 28.47/8.66 Iterator e = iterator(); 28.47/8.66 while (e.hasNext()) { 28.47/8.66 e.next(); 28.47/8.66 e.remove(); 28.47/8.66 } 28.47/8.66 } 28.47/8.66 28.47/8.66 28.47/8.66 // String conversion 28.47/8.66 28.47/8.66 /** 28.47/8.66 * Returns a string representation of this collection. The string 28.47/8.66 * representation consists of a list of the collection's elements in the 28.47/8.66 * order they are returned by its iterator, enclosed in square brackets 28.47/8.66 * ("[]"). Adjacent elements are separated by the characters 28.47/8.66 * ", " (comma and space). Elements are converted to strings as 28.47/8.66 * by {@link String#valueOf(Object)}. 28.47/8.66 * 28.47/8.66 * @return a string representation of this collection 28.47/8.66 */ 28.47/8.66 public String toString() { 28.47/8.66 Iterator i = iterator(); 28.47/8.66 if (! i.hasNext()) 28.47/8.66 return "[]"; 28.47/8.66 28.47/8.66 String sb = ""; 28.47/8.66 sb = sb + "["; 28.47/8.66 for (;;) { 28.47/8.66 E e = i.next(); 28.47/8.66 sb = sb + (e == this ? "(this Collection)" : e); 28.47/8.66 if (! i.hasNext()) { 28.47/8.66 sb = sb + "]"; 28.47/8.66 return sb; 28.47/8.66 } 28.47/8.66 sb = sb + ", "; 28.47/8.66 } 28.47/8.66 } 28.47/8.66 28.47/8.66 } 28.47/8.66 28.47/8.66 28.47/8.66 /* 28.47/8.66 * Copyright 1997-2007 Sun Microsystems, Inc. All Rights Reserved. 28.47/8.66 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 28.47/8.66 * 28.47/8.66 * This code is free software; you can redistribute it and/or modify it 28.47/8.66 * under the terms of the GNU General Public License version 2 only, as 28.47/8.66 * published by the Free Software Foundation. Sun designates this 28.47/8.66 * particular file as subject to the "Classpath" exception as provided 28.47/8.66 * by Sun in the LICENSE file that accompanied this code. 28.47/8.66 * 28.47/8.66 * This code is distributed in the hope that it will be useful, but WITHOUT 28.47/8.66 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 28.47/8.66 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 28.47/8.66 * version 2 for more details (a copy is included in the LICENSE file that 28.47/8.66 * accompanied this code). 28.47/8.66 * 28.47/8.66 * You should have received a copy of the GNU General Public License version 28.47/8.66 * 2 along with this work; if not, write to the Free Software Foundation, 28.47/8.66 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 28.47/8.66 * 28.47/8.66 * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, 28.47/8.66 * CA 95054 USA or visit www.sun.com if you need additional information or 28.47/8.66 * have any questions. 28.47/8.66 */ 28.47/8.66 28.47/8.66 package javaUtilEx; 28.47/8.66 import javaUtilEx.Map.Entry; 28.47/8.66 28.47/8.66 /** 28.47/8.66 * This class provides a skeletal implementation of the Map 28.47/8.66 * interface, to minimize the effort required to implement this interface. 28.47/8.66 * 28.47/8.66 *

To implement an unmodifiable map, the programmer needs only to extend this 28.47/8.66 * class and provide an implementation for the entrySet method, which 28.47/8.66 * returns a set-view of the map's mappings. Typically, the returned set 28.47/8.66 * will, in turn, be implemented atop AbstractSet. This set should 28.47/8.66 * not support the add or remove methods, and its iterator 28.47/8.66 * should not support the remove method. 28.47/8.66 * 28.47/8.66 *

To implement a modifiable map, the programmer must additionally override 28.47/8.66 * this class's put method (which otherwise throws an 28.47/8.66 * UnsupportedOperationException), and the iterator returned by 28.47/8.66 * entrySet().iterator() must additionally implement its 28.47/8.66 * remove method. 28.47/8.66 * 28.47/8.66 *

The programmer should generally provide a void (no argument) and map 28.47/8.66 * constructor, as per the recommendation in the Map interface 28.47/8.66 * specification. 28.47/8.66 * 28.47/8.66 *

The documentation for each non-abstract method in this class describes its 28.47/8.66 * implementation in detail. Each of these methods may be overridden if the 28.47/8.66 * map being implemented admits a more efficient implementation. 28.47/8.66 * 28.47/8.66 *

This class is a member of the 28.47/8.66 * 28.47/8.66 * Java Collections Framework. 28.47/8.66 * 28.47/8.66 * @param the type of keys maintained by this map 28.47/8.66 * @param the type of mapped values 28.47/8.66 * 28.47/8.66 * @author Josh Bloch 28.47/8.66 * @author Neal Gafter 28.47/8.66 * @see Map 28.47/8.66 * @see Collection 28.47/8.66 * @since 1.2 28.47/8.66 */ 28.47/8.66 28.47/8.66 public abstract class AbstractMap implements Map { 28.47/8.66 /** 28.47/8.66 * Sole constructor. (For invocation by subclass constructors, typically 28.47/8.66 * implicit.) 28.47/8.66 */ 28.47/8.66 protected AbstractMap() { 28.47/8.66 } 28.47/8.66 28.47/8.66 // Query Operations 28.47/8.66 28.47/8.66 /** 28.47/8.66 * {@inheritDoc} 28.47/8.66 * 28.47/8.66 *

This implementation returns entrySet().size(). 28.47/8.66 */ 28.47/8.66 public int size() { 28.47/8.66 return entrySet().size(); 28.47/8.66 } 28.47/8.66 28.47/8.66 /** 28.47/8.66 * {@inheritDoc} 28.47/8.66 * 28.47/8.66 *

This implementation returns size() == 0. 28.47/8.66 */ 28.47/8.66 public boolean isEmpty() { 28.47/8.66 return size() == 0; 28.47/8.66 } 28.47/8.66 28.47/8.66 /** 28.47/8.66 * {@inheritDoc} 28.47/8.66 * 28.47/8.66 *

This implementation iterates over entrySet() searching 28.47/8.66 * for an entry with the specified value. If such an entry is found, 28.47/8.66 * true is returned. If the iteration terminates without 28.47/8.66 * finding such an entry, false is returned. Note that this 28.47/8.66 * implementation requires linear time in the size of the map. 28.47/8.66 * 28.47/8.66 * @throws ClassCastException {@inheritDoc} 28.47/8.66 * @throws NullPointerException {@inheritDoc} 28.47/8.66 */ 28.47/8.66 public boolean containsValue(Object value) { 28.47/8.66 Iterator> i = entrySet().iterator(); 28.47/8.66 if (value==null) { 28.47/8.66 while (i.hasNext()) { 28.47/8.66 Entry e = i.next(); 28.47/8.66 if (e.getValue()==null) 28.47/8.66 return true; 28.47/8.66 } 28.47/8.66 } else { 28.47/8.66 while (i.hasNext()) { 28.47/8.66 Entry e = i.next(); 28.47/8.66 if (value.equals(e.getValue())) 28.47/8.66 return true; 28.47/8.66 } 28.47/8.66 } 28.47/8.66 return false; 28.47/8.66 } 28.47/8.66 28.47/8.66 /** 28.47/8.66 * {@inheritDoc} 28.47/8.66 * 28.47/8.66 *

This implementation iterates over entrySet() searching 28.47/8.66 * for an entry with the specified key. If such an entry is found, 28.47/8.66 * true is returned. If the iteration terminates without 28.47/8.66 * finding such an entry, false is returned. Note that this 28.47/8.66 * implementation requires linear time in the size of the map; many 28.47/8.66 * implementations will override this method. 28.47/8.66 * 28.47/8.66 * @throws ClassCastException {@inheritDoc} 28.47/8.66 * @throws NullPointerException {@inheritDoc} 28.47/8.66 */ 28.47/8.66 public boolean containsKey(Object key) { 28.47/8.66 Iterator> i = entrySet().iterator(); 28.47/8.66 if (key==null) { 28.47/8.66 while (i.hasNext()) { 28.47/8.66 Entry e = i.next(); 28.47/8.66 if (e.getKey()==null) 28.47/8.66 return true; 28.47/8.66 } 28.47/8.66 } else { 28.47/8.66 while (i.hasNext()) { 28.47/8.66 Entry e = i.next(); 28.47/8.66 if (key.equals(e.getKey())) 28.47/8.66 return true; 28.47/8.66 } 28.47/8.66 } 28.47/8.66 return false; 28.47/8.66 } 28.47/8.66 28.47/8.66 /** 28.47/8.66 * {@inheritDoc} 28.47/8.66 * 28.47/8.66 *

This implementation iterates over entrySet() searching 28.47/8.66 * for an entry with the specified key. If such an entry is found, 28.47/8.66 * the entry's value is returned. If the iteration terminates without 28.47/8.66 * finding such an entry, null is returned. Note that this 28.47/8.66 * implementation requires linear time in the size of the map; many 28.47/8.66 * implementations will override this method. 28.47/8.66 * 28.47/8.66 * @throws ClassCastException {@inheritDoc} 28.47/8.66 * @throws NullPointerException {@inheritDoc} 28.47/8.66 */ 28.47/8.66 public V get(Object key) { 28.47/8.66 Iterator> i = entrySet().iterator(); 28.47/8.66 if (key==null) { 28.47/8.66 while (i.hasNext()) { 28.47/8.66 Entry e = i.next(); 28.47/8.66 if (e.getKey()==null) 28.47/8.66 return e.getValue(); 28.47/8.66 } 28.47/8.66 } else { 28.47/8.66 while (i.hasNext()) { 28.47/8.66 Entry e = i.next(); 28.47/8.66 if (key.equals(e.getKey())) 28.47/8.66 return e.getValue(); 28.47/8.66 } 28.47/8.66 } 28.47/8.66 return null; 28.47/8.66 } 28.47/8.66 28.47/8.66 28.47/8.66 // Modification Operations 28.47/8.66 28.47/8.66 /** 28.47/8.66 * {@inheritDoc} 28.47/8.66 * 28.47/8.66 *

This implementation always throws an 28.47/8.66 * UnsupportedOperationException. 28.47/8.66 * 28.47/8.66 * @throws UnsupportedOperationException {@inheritDoc} 28.47/8.66 * @throws ClassCastException {@inheritDoc} 28.47/8.66 * @throws NullPointerException {@inheritDoc} 28.47/8.66 * @throws IllegalArgumentException {@inheritDoc} 28.47/8.66 */ 28.47/8.66 public V put(K key, V value) { 28.47/8.66 throw new UnsupportedOperationException(); 28.47/8.66 } 28.47/8.66 28.47/8.66 /** 28.47/8.66 * {@inheritDoc} 28.47/8.66 * 28.47/8.66 *

This implementation iterates over entrySet() searching for an 28.47/8.66 * entry with the specified key. If such an entry is found, its value is 28.47/8.66 * obtained with its getValue operation, the entry is removed 28.47/8.66 * from the collection (and the backing map) with the iterator's 28.47/8.66 * remove operation, and the saved value is returned. If the 28.47/8.66 * iteration terminates without finding such an entry, null is 28.47/8.66 * returned. Note that this implementation requires linear time in the 28.47/8.66 * size of the map; many implementations will override this method. 28.47/8.66 * 28.47/8.66 *

Note that this implementation throws an 28.47/8.66 * UnsupportedOperationException if the entrySet 28.47/8.66 * iterator does not support the remove method and this map 28.47/8.66 * contains a mapping for the specified key. 28.47/8.66 * 28.47/8.66 * @throws UnsupportedOperationException {@inheritDoc} 28.47/8.66 * @throws ClassCastException {@inheritDoc} 28.47/8.66 * @throws NullPointerException {@inheritDoc} 28.47/8.66 */ 28.47/8.66 public V remove(Object key) { 28.47/8.66 Iterator> i = entrySet().iterator(); 28.47/8.66 Entry correctEntry = null; 28.47/8.66 if (key==null) { 28.47/8.66 while (correctEntry==null && i.hasNext()) { 28.47/8.66 Entry e = i.next(); 28.47/8.66 if (e.getKey()==null) 28.47/8.66 correctEntry = e; 28.47/8.66 } 28.47/8.66 } else { 28.47/8.66 while (correctEntry==null && i.hasNext()) { 28.47/8.66 Entry e = i.next(); 28.47/8.66 if (key.equals(e.getKey())) 28.47/8.66 correctEntry = e; 28.47/8.66 } 28.47/8.66 } 28.47/8.66 28.47/8.66 V oldValue = null; 28.47/8.66 if (correctEntry !=null) { 28.47/8.66 oldValue = correctEntry.getValue(); 28.47/8.66 i.remove(); 28.47/8.66 } 28.47/8.66 return oldValue; 28.47/8.66 } 28.47/8.66 28.47/8.66 28.47/8.66 // Bulk Operations 28.47/8.66 28.47/8.66 /** 28.47/8.66 * {@inheritDoc} 28.47/8.66 * 28.47/8.66 *

This implementation iterates over the specified map's 28.47/8.66 * entrySet() collection, and calls this map's put 28.47/8.66 * operation once for each entry returned by the iteration. 28.47/8.66 * 28.47/8.66 *

Note that this implementation throws an 28.47/8.66 * UnsupportedOperationException if this map does not support 28.47/8.66 * the put operation and the specified map is nonempty. 28.47/8.66 * 28.47/8.66 * @throws UnsupportedOperationException {@inheritDoc} 28.47/8.66 * @throws ClassCastException {@inheritDoc} 28.47/8.66 * @throws NullPointerException {@inheritDoc} 28.47/8.66 * @throws IllegalArgumentException {@inheritDoc} 28.47/8.66 */ 28.47/8.66 public void putAll(Map m) { 28.47/8.66 Iterator it = m.entrySet().iterator(); 28.47/8.66 while (it.hasNext()) { 28.47/8.66 Map.Entry e = (Map.Entry) it.next(); 28.47/8.66 put((K) e.getKey(), (V) e.getValue()); 28.47/8.66 } 28.47/8.66 } 28.47/8.66 28.47/8.66 /** 28.47/8.66 * {@inheritDoc} 28.47/8.66 * 28.47/8.66 *

This implementation calls entrySet().clear(). 28.47/8.66 * 28.47/8.66 *

Note that this implementation throws an 28.47/8.66 * UnsupportedOperationException if the entrySet 28.47/8.66 * does not support the clear operation. 28.47/8.66 * 28.47/8.66 * @throws UnsupportedOperationException {@inheritDoc} 28.47/8.66 */ 28.47/8.66 public void clear() { 28.47/8.66 entrySet().clear(); 28.47/8.66 } 28.47/8.66 28.47/8.66 28.47/8.66 // Views 28.47/8.66 28.47/8.66 /** 28.47/8.66 * Each of these fields are initialized to contain an instance of the 28.47/8.66 * appropriate view the first time this view is requested. The views are 28.47/8.66 * stateless, so there's no reason to create more than one of each. 28.47/8.66 */ 28.47/8.66 transient volatile Set keySet = null; 28.47/8.66 transient volatile Collection values = null; 28.47/8.66 28.47/8.66 /** 28.47/8.66 * {@inheritDoc} 28.47/8.66 * 28.47/8.66 *

This implementation returns a set that subclasses {@link AbstractSet}. 28.47/8.66 * The subclass's iterator method returns a "wrapper object" over this 28.47/8.66 * map's entrySet() iterator. The size method 28.47/8.66 * delegates to this map's size method and the 28.47/8.66 * contains method delegates to this map's 28.47/8.66 * containsKey method. 28.47/8.66 * 28.47/8.66 *

The set is created the first time this method is called, 28.47/8.66 * and returned in response to all subsequent calls. No synchronization 28.47/8.66 * is performed, so there is a slight chance that multiple calls to this 28.47/8.66 * method will not all return the same set. 28.47/8.66 */ 28.47/8.66 public Set keySet() { 28.47/8.66 if (keySet == null) { 28.47/8.66 keySet = new AbstractSet() { 28.47/8.66 public Iterator iterator() { 28.47/8.66 return new Iterator() { 28.47/8.66 private Iterator> i = entrySet().iterator(); 28.47/8.66 28.47/8.66 public boolean hasNext() { 28.47/8.66 return i.hasNext(); 28.47/8.66 } 28.47/8.66 28.47/8.66 public K next() { 28.47/8.66 return i.next().getKey(); 28.47/8.66 } 28.47/8.66 28.47/8.66 public void remove() { 28.47/8.66 i.remove(); 28.47/8.66 } 28.47/8.66 }; 28.47/8.66 } 28.47/8.66 28.47/8.66 public int size() { 28.47/8.66 return AbstractMap.this.size(); 28.47/8.66 } 28.47/8.66 28.47/8.66 public boolean isEmpty() { 28.47/8.66 return AbstractMap.this.isEmpty(); 28.47/8.66 } 28.47/8.66 28.47/8.66 public void clear() { 28.47/8.66 AbstractMap.this.clear(); 28.47/8.66 } 28.47/8.66 28.47/8.66 public boolean contains(Object k) { 28.47/8.66 return AbstractMap.this.containsKey(k); 28.47/8.66 } 28.47/8.66 28.47/8.66 public Object[] toArray() { 28.47/8.66 Object[] res = new Object[AbstractMap.this.size()]; 28.47/8.66 Iterator> it = entrySet().iterator(); 28.47/8.66 int i = 0; 28.47/8.66 while (it.hasNext()) 28.47/8.66 res[i++] = it.next().getKey(); 28.47/8.66 return res; 28.47/8.66 } 28.47/8.66 28.47/8.66 public T[] toArray(T[] a) { 28.47/8.66 a = (T[])java.lang.reflect.Array.newInstance( 28.47/8.66 a.getClass().getComponentType(), AbstractMap.this.size()); 28.47/8.66 Object[] res = a; 28.47/8.66 Iterator> it = entrySet().iterator(); 28.47/8.66 int i = 0; 28.47/8.66 while (it.hasNext()) 28.47/8.66 res[i++] = it.next().getKey(); 28.47/8.66 return a; 28.47/8.66 } 28.47/8.66 }; 28.47/8.66 } 28.47/8.66 return keySet; 28.47/8.66 } 28.47/8.66 28.47/8.66 /** 28.47/8.66 * {@inheritDoc} 28.47/8.66 * 28.47/8.66 *

This implementation returns a collection that subclasses {@link 28.47/8.67 * AbstractCollection}. The subclass's iterator method returns a 28.47/8.67 * "wrapper object" over this map's entrySet() iterator. 28.47/8.67 * The size method delegates to this map's size 28.47/8.67 * method and the contains method delegates to this map's 28.47/8.67 * containsValue method. 28.47/8.67 * 28.47/8.67 *

The collection is created the first time this method is called, and 28.47/8.67 * returned in response to all subsequent calls. No synchronization is 28.47/8.67 * performed, so there is a slight chance that multiple calls to this 28.47/8.67 * method will not all return the same collection. 28.47/8.67 */ 28.47/8.67 public Collection values() { 28.47/8.67 if (values == null) { 28.47/8.67 values = new AbstractCollection() { 28.47/8.67 public Iterator iterator() { 28.47/8.67 return new Iterator() { 28.47/8.67 private Iterator> i = entrySet().iterator(); 28.47/8.67 28.47/8.67 public boolean hasNext() { 28.47/8.67 return i.hasNext(); 28.47/8.67 } 28.47/8.67 28.47/8.67 public V next() { 28.47/8.67 return i.next().getValue(); 28.47/8.67 } 28.47/8.67 28.47/8.67 public void remove() { 28.47/8.67 i.remove(); 28.47/8.67 } 28.47/8.67 }; 28.47/8.67 } 28.47/8.67 28.47/8.67 public int size() { 28.47/8.67 return AbstractMap.this.size(); 28.47/8.67 } 28.47/8.67 28.47/8.67 public boolean isEmpty() { 28.47/8.67 return AbstractMap.this.isEmpty(); 28.47/8.67 } 28.47/8.67 28.47/8.67 public void clear() { 28.47/8.67 AbstractMap.this.clear(); 28.47/8.67 } 28.47/8.67 28.47/8.67 public boolean contains(Object v) { 28.47/8.67 return AbstractMap.this.containsValue(v); 28.47/8.67 } 28.47/8.67 }; 28.47/8.67 } 28.47/8.67 return values; 28.47/8.67 } 28.47/8.67 28.47/8.67 public abstract Set> entrySet(); 28.47/8.67 28.47/8.67 28.47/8.67 // Comparison and hashing 28.47/8.67 28.47/8.67 /** 28.47/8.67 * Compares the specified object with this map for equality. Returns 28.47/8.67 * true if the given object is also a map and the two maps 28.47/8.67 * represent the same mappings. More formally, two maps m1 and 28.47/8.67 * m2 represent the same mappings if 28.47/8.67 * m1.entrySet().equals(m2.entrySet()). This ensures that the 28.47/8.67 * equals method works properly across different implementations 28.47/8.67 * of the Map interface. 28.47/8.67 * 28.47/8.67 *

This implementation first checks if the specified object is this map; 28.47/8.67 * if so it returns true. Then, it checks if the specified 28.47/8.67 * object is a map whose size is identical to the size of this map; if 28.47/8.67 * not, it returns false. If so, it iterates over this map's 28.47/8.67 * entrySet collection, and checks that the specified map 28.47/8.67 * contains each mapping that this map contains. If the specified map 28.47/8.67 * fails to contain such a mapping, false is returned. If the 28.47/8.67 * iteration completes, true is returned. 28.47/8.67 * 28.47/8.67 * @param o object to be compared for equality with this map 28.47/8.67 * @return true if the specified object is equal to this map 28.47/8.67 */ 28.47/8.67 public boolean equals(Object o) { 28.47/8.67 if (o == this) 28.47/8.67 return true; 28.47/8.67 28.47/8.67 if (!(o instanceof Map)) 28.47/8.67 return false; 28.47/8.67 Map m = (Map) o; 28.47/8.67 if (m.size() != size()) 28.47/8.67 return false; 28.47/8.67 28.47/8.67 try { 28.47/8.67 Iterator> i = entrySet().iterator(); 28.47/8.67 while (i.hasNext()) { 28.47/8.67 Entry e = i.next(); 28.47/8.67 K key = e.getKey(); 28.47/8.67 V value = e.getValue(); 28.47/8.67 if (value == null) { 28.47/8.67 if (!(m.get(key)==null && m.containsKey(key))) 28.47/8.67 return false; 28.47/8.67 } else { 28.47/8.67 if (!value.equals(m.get(key))) 28.47/8.67 return false; 28.47/8.67 } 28.47/8.67 } 28.47/8.67 } catch (ClassCastException unused) { 28.47/8.67 return false; 28.47/8.67 } catch (NullPointerException unused) { 28.47/8.67 return false; 28.47/8.67 } 28.47/8.67 28.47/8.67 return true; 28.47/8.67 } 28.47/8.67 28.47/8.67 /** 28.47/8.67 * Returns the hash code value for this map. The hash code of a map is 28.47/8.67 * defined to be the sum of the hash codes of each entry in the map's 28.47/8.67 * entrySet() view. This ensures that m1.equals(m2) 28.47/8.67 * implies that m1.hashCode()==m2.hashCode() for any two maps 28.47/8.67 * m1 and m2, as required by the general contract of 28.47/8.67 * {@link Object#hashCode}. 28.47/8.67 * 28.47/8.67 *

This implementation iterates over entrySet(), calling 28.47/8.67 * {@link Map.Entry#hashCode hashCode()} on each element (entry) in the 28.47/8.67 * set, and adding up the results. 28.47/8.67 * 28.47/8.67 * @return the hash code value for this map 28.47/8.67 * @see Map.Entry#hashCode() 28.47/8.67 * @see Object#equals(Object) 28.47/8.67 * @see Set#equals(Object) 28.47/8.67 */ 28.47/8.67 public int hashCode() { 28.47/8.67 int h = 0; 28.47/8.67 Iterator> i = entrySet().iterator(); 28.47/8.67 while (i.hasNext()) 28.47/8.67 h += i.next().hashCode(); 28.47/8.67 return h; 28.47/8.67 } 28.47/8.67 28.47/8.67 /** 28.47/8.67 * Returns a string representation of this map. The string representation 28.47/8.67 * consists of a list of key-value mappings in the order returned by the 28.47/8.67 * map's entrySet view's iterator, enclosed in braces 28.47/8.67 * ("{}"). Adjacent mappings are separated by the characters 28.47/8.67 * ", " (comma and space). Each key-value mapping is rendered as 28.47/8.67 * the key followed by an equals sign ("=") followed by the 28.47/8.67 * associated value. Keys and values are converted to strings as by 28.47/8.67 * {@link String#valueOf(Object)}. 28.47/8.67 * 28.47/8.67 * @return a string representation of this map 28.47/8.67 */ 28.47/8.67 public String toString() { 28.47/8.67 Iterator> i = entrySet().iterator(); 28.47/8.67 if (! i.hasNext()) 28.47/8.67 return "{}"; 28.47/8.67 28.47/8.67 StringBuilder sb = new StringBuilder(); 28.47/8.67 sb.append('{'); 28.47/8.67 for (;;) { 28.47/8.67 Entry e = i.next(); 28.47/8.67 K key = e.getKey(); 28.47/8.67 V value = e.getValue(); 28.47/8.67 sb.append(key == this ? "(this Map)" : key); 28.47/8.67 sb.append('='); 28.47/8.67 sb.append(value == this ? "(this Map)" : value); 28.47/8.67 if (! i.hasNext()) 28.47/8.67 return sb.append('}').toString(); 28.47/8.67 sb.append(", "); 28.47/8.67 } 28.47/8.67 } 28.47/8.67 28.47/8.67 /** 28.47/8.67 * Returns a shallow copy of this AbstractMap instance: the keys 28.47/8.67 * and values themselves are not cloned. 28.47/8.67 * 28.47/8.67 * @return a shallow copy of this map 28.47/8.67 */ 28.47/8.67 protected Object clone() throws CloneNotSupportedException { 28.47/8.67 AbstractMap result = (AbstractMap)super.clone(); 28.47/8.67 result.keySet = null; 28.47/8.67 result.values = null; 28.47/8.67 return result; 28.47/8.67 } 28.47/8.67 28.47/8.67 /** 28.47/8.67 * Utility method for SimpleEntry and SimpleImmutableEntry. 28.47/8.67 * Test for equality, checking for nulls. 28.47/8.67 */ 28.47/8.67 private static boolean eq(Object o1, Object o2) { 28.47/8.67 return o1 == null ? o2 == null : o1.equals(o2); 28.47/8.67 } 28.47/8.67 28.47/8.67 // Implementation Note: SimpleEntry and SimpleImmutableEntry 28.47/8.67 // are distinct unrelated classes, even though they share 28.47/8.67 // some code. Since you can't add or subtract final-ness 28.47/8.67 // of a field in a subclass, they can't share representations, 28.47/8.67 // and the amount of duplicated code is too small to warrant 28.47/8.67 // exposing a common abstract class. 28.47/8.67 28.47/8.67 28.47/8.67 /** 28.47/8.67 * An Entry maintaining a key and a value. The value may be 28.47/8.67 * changed using the setValue method. This class 28.47/8.67 * facilitates the process of building custom map 28.47/8.67 * implementations. For example, it may be convenient to return 28.47/8.67 * arrays of SimpleEntry instances in method 28.47/8.67 * Map.entrySet().toArray. 28.47/8.67 * 28.47/8.67 * @since 1.6 28.47/8.67 */ 28.47/8.67 public static class SimpleEntry 28.47/8.67 implements Entry, java.io.Serializable 28.47/8.67 { 28.47/8.67 private static final long serialVersionUID = -8499721149061103585L; 28.47/8.67 28.47/8.67 private final K key; 28.47/8.67 private V value; 28.47/8.67 28.47/8.67 /** 28.47/8.67 * Creates an entry representing a mapping from the specified 28.47/8.67 * key to the specified value. 28.47/8.67 * 28.47/8.67 * @param key the key represented by this entry 28.47/8.67 * @param value the value represented by this entry 28.47/8.67 */ 28.47/8.67 public SimpleEntry(K key, V value) { 28.47/8.67 this.key = key; 28.47/8.67 this.value = value; 28.47/8.67 } 28.47/8.67 28.47/8.67 /** 28.47/8.67 * Creates an entry representing the same mapping as the 28.47/8.67 * specified entry. 28.47/8.67 * 28.47/8.67 * @param entry the entry to copy 28.47/8.67 */ 28.47/8.67 public SimpleEntry(Entry entry) { 28.47/8.67 this.key = entry.getKey(); 28.47/8.67 this.value = entry.getValue(); 28.47/8.67 } 28.47/8.67 28.47/8.67 /** 28.47/8.67 * Returns the key corresponding to this entry. 28.47/8.67 * 28.47/8.67 * @return the key corresponding to this entry 28.47/8.67 */ 28.47/8.67 public K getKey() { 28.47/8.67 return key; 28.47/8.67 } 28.47/8.67 28.47/8.67 /** 28.47/8.67 * Returns the value corresponding to this entry. 28.47/8.67 * 28.47/8.67 * @return the value corresponding to this entry 28.47/8.67 */ 28.47/8.67 public V getValue() { 28.47/8.67 return value; 28.47/8.67 } 28.47/8.67 28.47/8.67 /** 28.47/8.67 * Replaces the value corresponding to this entry with the specified 28.47/8.67 * value. 28.47/8.67 * 28.47/8.67 * @param value new value to be stored in this entry 28.47/8.67 * @return the old value corresponding to the entry 28.47/8.67 */ 28.47/8.67 public V setValue(V value) { 28.47/8.67 V oldValue = this.value; 28.47/8.67 this.value = value; 28.47/8.67 return oldValue; 28.47/8.67 } 28.47/8.67 28.47/8.67 /** 28.47/8.67 * Compares the specified object with this entry for equality. 28.47/8.67 * Returns {@code true} if the given object is also a map entry and 28.47/8.67 * the two entries represent the same mapping. More formally, two 28.47/8.67 * entries {@code e1} and {@code e2} represent the same mapping 28.47/8.67 * if

28.47/8.67	         *   (e1.getKey()==null ?
28.47/8.67	         *    e2.getKey()==null :
28.47/8.67	         *    e1.getKey().equals(e2.getKey()))
28.47/8.67	         *   &&
28.47/8.67	         *   (e1.getValue()==null ?
28.47/8.67	         *    e2.getValue()==null :
28.47/8.67	         *    e1.getValue().equals(e2.getValue()))
28.47/8.67 * This ensures that the {@code equals} method works properly across 28.47/8.67 * different implementations of the {@code Map.Entry} interface. 28.47/8.67 * 28.47/8.67 * @param o object to be compared for equality with this map entry 28.47/8.67 * @return {@code true} if the specified object is equal to this map 28.47/8.67 * entry 28.47/8.67 * @see #hashCode 28.47/8.67 */ 28.47/8.67 public boolean equals(Object o) { 28.47/8.67 if (!(o instanceof Map.Entry)) 28.47/8.67 return false; 28.47/8.67 Map.Entry e = (Map.Entry)o; 28.47/8.67 return eq(key, e.getKey()) && eq(value, e.getValue()); 28.47/8.67 } 28.47/8.67 28.47/8.67 /** 28.47/8.67 * Returns the hash code value for this map entry. The hash code 28.47/8.67 * of a map entry {@code e} is defined to be:
28.47/8.67	         *   (e.getKey()==null   ? 0 : e.getKey().hashCode()) ^
28.47/8.67	         *   (e.getValue()==null ? 0 : e.getValue().hashCode())
28.47/8.67 * This ensures that {@code e1.equals(e2)} implies that 28.47/8.67 * {@code e1.hashCode()==e2.hashCode()} for any two Entries 28.47/8.67 * {@code e1} and {@code e2}, as required by the general 28.47/8.67 * contract of {@link Object#hashCode}. 28.47/8.67 * 28.47/8.67 * @return the hash code value for this map entry 28.47/8.67 * @see #equals 28.47/8.67 */ 28.47/8.67 public int hashCode() { 28.47/8.67 return (key == null ? 0 : key.hashCode()) ^ 28.47/8.67 (value == null ? 0 : value.hashCode()); 28.47/8.67 } 28.47/8.67 28.47/8.67 /** 28.47/8.67 * Returns a String representation of this map entry. This 28.47/8.67 * implementation returns the string representation of this 28.47/8.67 * entry's key followed by the equals character ("=") 28.47/8.67 * followed by the string representation of this entry's value. 28.47/8.67 * 28.47/8.67 * @return a String representation of this map entry 28.47/8.67 */ 28.47/8.67 public String toString() { 28.47/8.67 return key + "=" + value; 28.47/8.67 } 28.47/8.67 28.47/8.67 } 28.47/8.67 28.47/8.67 /** 28.47/8.67 * An Entry maintaining an immutable key and value. This class 28.47/8.67 * does not support method setValue. This class may be 28.47/8.67 * convenient in methods that return thread-safe snapshots of 28.47/8.67 * key-value mappings. 28.47/8.67 * 28.47/8.67 * @since 1.6 28.47/8.67 */ 28.47/8.67 public static class SimpleImmutableEntry 28.47/8.67 implements Entry, java.io.Serializable 28.47/8.67 { 28.47/8.67 private static final long serialVersionUID = 7138329143949025153L; 28.47/8.67 28.47/8.67 private final K key; 28.47/8.67 private final V value; 28.47/8.67 28.47/8.67 /** 28.47/8.67 * Creates an entry representing a mapping from the specified 28.47/8.67 * key to the specified value. 28.47/8.67 * 28.47/8.67 * @param key the key represented by this entry 28.47/8.67 * @param value the value represented by this entry 28.47/8.67 */ 28.47/8.67 public SimpleImmutableEntry(K key, V value) { 28.47/8.67 this.key = key; 28.47/8.67 this.value = value; 28.47/8.67 } 28.47/8.67 28.47/8.67 /** 28.47/8.67 * Creates an entry representing the same mapping as the 28.47/8.67 * specified entry. 28.47/8.67 * 28.47/8.67 * @param entry the entry to copy 28.47/8.67 */ 28.47/8.67 public SimpleImmutableEntry(Entry entry) { 28.47/8.67 this.key = entry.getKey(); 28.47/8.67 this.value = entry.getValue(); 28.47/8.67 } 28.47/8.67 28.47/8.67 /** 28.47/8.67 * Returns the key corresponding to this entry. 28.47/8.67 * 28.47/8.67 * @return the key corresponding to this entry 28.47/8.67 */ 28.47/8.67 public K getKey() { 28.47/8.67 return key; 28.47/8.67 } 28.47/8.67 28.47/8.67 /** 28.47/8.67 * Returns the value corresponding to this entry. 28.47/8.67 * 28.47/8.67 * @return the value corresponding to this entry 28.47/8.67 */ 28.47/8.67 public V getValue() { 28.47/8.67 return value; 28.47/8.67 } 28.47/8.67 28.47/8.67 /** 28.47/8.67 * Replaces the value corresponding to this entry with the specified 28.47/8.67 * value (optional operation). This implementation simply throws 28.47/8.67 * UnsupportedOperationException, as this class implements 28.47/8.67 * an immutable map entry. 28.47/8.67 * 28.47/8.67 * @param value new value to be stored in this entry 28.47/8.67 * @return (Does not return) 28.47/8.67 * @throws UnsupportedOperationException always 28.47/8.67 */ 28.47/8.67 public V setValue(V value) { 28.47/8.67 throw new UnsupportedOperationException(); 28.47/8.67 } 28.47/8.67 28.47/8.67 /** 28.47/8.67 * Compares the specified object with this entry for equality. 28.47/8.67 * Returns {@code true} if the given object is also a map entry and 28.47/8.67 * the two entries represent the same mapping. More formally, two 28.47/8.67 * entries {@code e1} and {@code e2} represent the same mapping 28.47/8.67 * if
28.47/8.67	         *   (e1.getKey()==null ?
28.47/8.67	         *    e2.getKey()==null :
28.47/8.67	         *    e1.getKey().equals(e2.getKey()))
28.47/8.67	         *   &&
28.47/8.67	         *   (e1.getValue()==null ?
28.47/8.67	         *    e2.getValue()==null :
28.47/8.67	         *    e1.getValue().equals(e2.getValue()))
28.47/8.67 * This ensures that the {@code equals} method works properly across 28.47/8.67 * different implementations of the {@code Map.Entry} interface. 28.47/8.67 * 28.47/8.67 * @param o object to be compared for equality with this map entry 28.47/8.67 * @return {@code true} if the specified object is equal to this map 28.47/8.67 * entry 28.47/8.67 * @see #hashCode 28.47/8.67 */ 28.47/8.67 public boolean equals(Object o) { 28.47/8.67 if (!(o instanceof Map.Entry)) 28.47/8.67 return false; 28.47/8.67 Map.Entry e = (Map.Entry)o; 28.47/8.67 return eq(key, e.getKey()) && eq(value, e.getValue()); 28.47/8.67 } 28.47/8.67 28.47/8.67 /** 28.47/8.67 * Returns the hash code value for this map entry. The hash code 28.47/8.67 * of a map entry {@code e} is defined to be:
28.47/8.67	         *   (e.getKey()==null   ? 0 : e.getKey().hashCode()) ^
28.47/8.67	         *   (e.getValue()==null ? 0 : e.getValue().hashCode())
28.47/8.67 * This ensures that {@code e1.equals(e2)} implies that 28.47/8.67 * {@code e1.hashCode()==e2.hashCode()} for any two Entries 28.47/8.67 * {@code e1} and {@code e2}, as required by the general 28.47/8.67 * contract of {@link Object#hashCode}. 28.47/8.67 * 28.47/8.67 * @return the hash code value for this map entry 28.47/8.67 * @see #equals 28.47/8.67 */ 28.47/8.67 public int hashCode() { 28.47/8.67 return (key == null ? 0 : key.hashCode()) ^ 28.47/8.67 (value == null ? 0 : value.hashCode()); 28.47/8.67 } 28.47/8.67 28.47/8.67 /** 28.47/8.67 * Returns a String representation of this map entry. This 28.47/8.67 * implementation returns the string representation of this 28.47/8.67 * entry's key followed by the equals character ("=") 28.47/8.67 * followed by the string representation of this entry's value. 28.47/8.67 * 28.47/8.67 * @return a String representation of this map entry 28.47/8.67 */ 28.47/8.67 public String toString() { 28.47/8.67 return key + "=" + value; 28.47/8.67 } 28.47/8.67 28.47/8.67 } 28.47/8.67 28.47/8.67 } 28.47/8.67 28.47/8.67 28.47/8.67 /* 28.47/8.67 * Copyright 1997-2006 Sun Microsystems, Inc. All Rights Reserved. 28.47/8.67 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 28.47/8.67 * 28.47/8.67 * This code is free software; you can redistribute it and/or modify it 28.47/8.67 * under the terms of the GNU General Public License version 2 only, as 28.47/8.67 * published by the Free Software Foundation. Sun designates this 28.47/8.67 * particular file as subject to the "Classpath" exception as provided 28.47/8.67 * by Sun in the LICENSE file that accompanied this code. 28.47/8.67 * 28.47/8.67 * This code is distributed in the hope that it will be useful, but WITHOUT 28.47/8.67 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 28.47/8.67 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 28.47/8.67 * version 2 for more details (a copy is included in the LICENSE file that 28.47/8.67 * accompanied this code). 28.47/8.67 * 28.47/8.67 * You should have received a copy of the GNU General Public License version 28.47/8.67 * 2 along with this work; if not, write to the Free Software Foundation, 28.47/8.67 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 28.47/8.67 * 28.47/8.67 * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, 28.47/8.67 * CA 95054 USA or visit www.sun.com if you need additional information or 28.47/8.67 * have any questions. 28.47/8.67 */ 28.47/8.67 28.47/8.67 package javaUtilEx; 28.47/8.67 28.47/8.67 /** 28.47/8.67 * This class provides a skeletal implementation of the Set 28.47/8.67 * interface to minimize the effort required to implement this 28.47/8.67 * interface.

28.47/8.67 * 28.47/8.67 * The process of implementing a set by extending this class is identical 28.47/8.67 * to that of implementing a Collection by extending AbstractCollection, 28.47/8.67 * except that all of the methods and constructors in subclasses of this 28.47/8.67 * class must obey the additional constraints imposed by the Set 28.47/8.67 * interface (for instance, the add method must not permit addition of 28.47/8.67 * multiple instances of an object to a set).

28.47/8.67 * 28.47/8.67 * Note that this class does not override any of the implementations from 28.47/8.67 * the AbstractCollection class. It merely adds implementations 28.47/8.67 * for equals and hashCode.

28.47/8.67 * 28.47/8.67 * This class is a member of the 28.47/8.67 * 28.47/8.67 * Java Collections Framework. 28.47/8.67 * 28.47/8.67 * @param the type of elements maintained by this set 28.47/8.67 * 28.47/8.67 * @author Josh Bloch 28.47/8.67 * @author Neal Gafter 28.47/8.67 * @see Collection 28.47/8.67 * @see AbstractCollection 28.47/8.67 * @see Set 28.47/8.67 * @since 1.2 28.47/8.67 */ 28.47/8.67 28.47/8.67 public abstract class AbstractSet extends AbstractCollection implements Set { 28.47/8.67 /** 28.47/8.67 * Sole constructor. (For invocation by subclass constructors, typically 28.47/8.67 * implicit.) 28.47/8.67 */ 28.47/8.67 protected AbstractSet() { 28.47/8.67 } 28.47/8.67 28.47/8.67 // Comparison and hashing 28.47/8.67 28.47/8.67 /** 28.47/8.67 * Compares the specified object with this set for equality. Returns 28.47/8.67 * true if the given object is also a set, the two sets have 28.47/8.67 * the same size, and every member of the given set is contained in 28.47/8.67 * this set. This ensures that the equals method works 28.47/8.67 * properly across different implementations of the Set 28.47/8.67 * interface.

28.47/8.67 * 28.47/8.67 * This implementation first checks if the specified object is this 28.47/8.67 * set; if so it returns true. Then, it checks if the 28.47/8.67 * specified object is a set whose size is identical to the size of 28.47/8.67 * this set; if not, it returns false. If so, it returns 28.47/8.67 * containsAll((Collection) o). 28.47/8.67 * 28.47/8.67 * @param o object to be compared for equality with this set 28.47/8.67 * @return true if the specified object is equal to this set 28.47/8.67 */ 28.47/8.67 public boolean equals(Object o) { 28.47/8.67 if (o == this) 28.47/8.67 return true; 28.47/8.67 28.47/8.67 if (!(o instanceof Set)) 28.47/8.67 return false; 28.47/8.67 Collection c = (Collection) o; 28.47/8.67 if (c.size() != size()) 28.47/8.67 return false; 28.47/8.67 try { 28.47/8.67 return containsAll(c); 28.47/8.67 } catch (ClassCastException unused) { 28.47/8.67 return false; 28.47/8.67 } catch (NullPointerException unused) { 28.47/8.67 return false; 28.47/8.67 } 28.47/8.67 } 28.47/8.67 28.47/8.67 /** 28.47/8.67 * Returns the hash code value for this set. The hash code of a set is 28.47/8.67 * defined to be the sum of the hash codes of the elements in the set, 28.47/8.67 * where the hash code of a null element is defined to be zero. 28.47/8.67 * This ensures that s1.equals(s2) implies that 28.47/8.67 * s1.hashCode()==s2.hashCode() for any two sets s1 28.47/8.67 * and s2, as required by the general contract of 28.47/8.67 * {@link Object#hashCode}. 28.47/8.67 * 28.47/8.67 *

This implementation iterates over the set, calling the 28.47/8.67 * hashCode method on each element in the set, and adding up 28.47/8.67 * the results. 28.47/8.67 * 28.47/8.67 * @return the hash code value for this set 28.47/8.67 * @see Object#equals(Object) 28.47/8.67 * @see Set#equals(Object) 28.47/8.67 */ 28.47/8.67 public int hashCode() { 28.47/8.67 int h = 0; 28.47/8.67 Iterator i = iterator(); 28.47/8.67 while (i.hasNext()) { 28.47/8.67 E obj = i.next(); 28.47/8.67 if (obj != null) 28.47/8.67 h += obj.hashCode(); 28.47/8.67 } 28.47/8.67 return h; 28.47/8.67 } 28.47/8.67 28.47/8.67 /** 28.47/8.67 * Removes from this set all of its elements that are contained in the 28.47/8.67 * specified collection (optional operation). If the specified 28.47/8.67 * collection is also a set, this operation effectively modifies this 28.47/8.67 * set so that its value is the asymmetric set difference of 28.47/8.67 * the two sets. 28.47/8.67 * 28.47/8.67 *

This implementation determines which is the smaller of this set 28.47/8.67 * and the specified collection, by invoking the size 28.47/8.67 * method on each. If this set has fewer elements, then the 28.47/8.67 * implementation iterates over this set, checking each element 28.47/8.67 * returned by the iterator in turn to see if it is contained in 28.47/8.67 * the specified collection. If it is so contained, it is removed 28.47/8.67 * from this set with the iterator's remove method. If 28.47/8.67 * the specified collection has fewer elements, then the 28.47/8.67 * implementation iterates over the specified collection, removing 28.47/8.67 * from this set each element returned by the iterator, using this 28.47/8.67 * set's remove method. 28.47/8.67 * 28.47/8.67 *

Note that this implementation will throw an 28.47/8.67 * UnsupportedOperationException if the iterator returned by the 28.47/8.67 * iterator method does not implement the remove method. 28.47/8.67 * 28.47/8.67 * @param c collection containing elements to be removed from this set 28.47/8.67 * @return true if this set changed as a result of the call 28.47/8.67 * @throws UnsupportedOperationException if the removeAll operation 28.47/8.67 * is not supported by this set 28.47/8.67 * @throws ClassCastException if the class of an element of this set 28.47/8.67 * is incompatible with the specified collection (optional) 28.47/8.67 * @throws NullPointerException if this set contains a null element and the 28.47/8.67 * specified collection does not permit null elements (optional), 28.47/8.67 * or if the specified collection is null 28.47/8.67 * @see #remove(Object) 28.47/8.67 * @see #contains(Object) 28.47/8.67 */ 28.47/8.67 public boolean removeAll(Collection c) { 28.47/8.67 boolean modified = false; 28.47/8.67 28.47/8.67 if (size() > c.size()) { 28.47/8.67 for (Iterator i = c.iterator(); i.hasNext(); ) 28.47/8.67 modified |= remove(i.next()); 28.47/8.67 } else { 28.47/8.67 for (Iterator i = iterator(); i.hasNext(); ) { 28.47/8.67 if (c.contains(i.next())) { 28.47/8.67 i.remove(); 28.47/8.67 modified = true; 28.47/8.67 } 28.47/8.67 } 28.47/8.67 } 28.47/8.67 return modified; 28.47/8.67 } 28.47/8.67 28.47/8.67 } 28.47/8.67 28.47/8.67 28.47/8.67 /* 28.47/8.67 * Copyright 1997-2006 Sun Microsystems, Inc. All Rights Reserved. 28.47/8.67 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 28.47/8.67 * 28.47/8.67 * This code is free software; you can redistribute it and/or modify it 28.47/8.67 * under the terms of the GNU General Public License version 2 only, as 28.47/8.67 * published by the Free Software Foundation. Sun designates this 28.47/8.67 * particular file as subject to the "Classpath" exception as provided 28.47/8.67 * by Sun in the LICENSE file that accompanied this code. 28.47/8.67 * 28.47/8.67 * This code is distributed in the hope that it will be useful, but WITHOUT 28.47/8.67 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 28.47/8.67 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 28.47/8.67 * version 2 for more details (a copy is included in the LICENSE file that 28.47/8.67 * accompanied this code). 28.47/8.67 * 28.47/8.67 * You should have received a copy of the GNU General Public License version 28.47/8.67 * 2 along with this work; if not, write to the Free Software Foundation, 28.47/8.67 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 28.47/8.67 * 28.47/8.67 * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, 28.47/8.67 * CA 95054 USA or visit www.sun.com if you need additional information or 28.47/8.67 * have any questions. 28.47/8.67 */ 28.47/8.67 28.47/8.67 package javaUtilEx; 28.47/8.67 28.47/8.67 /** 28.47/8.67 * The root interface in the collection hierarchy. A collection 28.47/8.67 * represents a group of objects, known as its elements. Some 28.47/8.67 * collections allow duplicate elements and others do not. Some are ordered 28.47/8.67 * and others unordered. The JDK does not provide any direct 28.47/8.67 * implementations of this interface: it provides implementations of more 28.47/8.67 * specific subinterfaces like Set and List. This interface 28.47/8.67 * is typically used to pass collections around and manipulate them where 28.47/8.67 * maximum generality is desired. 28.47/8.67 * 28.47/8.67 *

Bags or multisets (unordered collections that may contain 28.47/8.67 * duplicate elements) should implement this interface directly. 28.47/8.67 * 28.47/8.67 *

All general-purpose Collection implementation classes (which 28.47/8.67 * typically implement Collection indirectly through one of its 28.47/8.67 * subinterfaces) should provide two "standard" constructors: a void (no 28.47/8.67 * arguments) constructor, which creates an empty collection, and a 28.47/8.67 * constructor with a single argument of type Collection, which 28.47/8.67 * creates a new collection with the same elements as its argument. In 28.47/8.67 * effect, the latter constructor allows the user to copy any collection, 28.47/8.67 * producing an equivalent collection of the desired implementation type. 28.47/8.67 * There is no way to enforce this convention (as interfaces cannot contain 28.47/8.67 * constructors) but all of the general-purpose Collection 28.47/8.67 * implementations in the Java platform libraries comply. 28.47/8.67 * 28.47/8.67 *

The "destructive" methods contained in this interface, that is, the 28.47/8.67 * methods that modify the collection on which they operate, are specified to 28.47/8.67 * throw UnsupportedOperationException if this collection does not 28.47/8.67 * support the operation. If this is the case, these methods may, but are not 28.47/8.67 * required to, throw an UnsupportedOperationException if the 28.47/8.67 * invocation would have no effect on the collection. For example, invoking 28.47/8.67 * the {@link #addAll(Collection)} method on an unmodifiable collection may, 28.47/8.67 * but is not required to, throw the exception if the collection to be added 28.47/8.67 * is empty. 28.47/8.67 * 28.47/8.67 *

Some collection implementations have restrictions on the elements that 28.47/8.67 * they may contain. For example, some implementations prohibit null elements, 28.47/8.67 * and some have restrictions on the types of their elements. Attempting to 28.47/8.67 * add an ineligible element throws an unchecked exception, typically 28.47/8.67 * NullPointerException or ClassCastException. Attempting 28.47/8.67 * to query the presence of an ineligible element may throw an exception, 28.47/8.67 * or it may simply return false; some implementations will exhibit the former 28.47/8.67 * behavior and some will exhibit the latter. More generally, attempting an 28.47/8.67 * operation on an ineligible element whose completion would not result in 28.47/8.67 * the insertion of an ineligible element into the collection may throw an 28.47/8.67 * exception or it may succeed, at the option of the implementation. 28.47/8.67 * Such exceptions are marked as "optional" in the specification for this 28.47/8.67 * interface. 28.47/8.67 * 28.47/8.67 *

It is up to each collection to determine its own synchronization 28.47/8.67 * policy. In the absence of a stronger guarantee by the 28.47/8.67 * implementation, undefined behavior may result from the invocation 28.47/8.67 * of any method on a collection that is being mutated by another 28.47/8.67 * thread; this includes direct invocations, passing the collection to 28.47/8.67 * a method that might perform invocations, and using an existing 28.47/8.67 * iterator to examine the collection. 28.47/8.67 * 28.47/8.67 *

Many methods in Collections Framework interfaces are defined in 28.47/8.67 * terms of the {@link Object#equals(Object) equals} method. For example, 28.47/8.67 * the specification for the {@link #contains(Object) contains(Object o)} 28.47/8.67 * method says: "returns true if and only if this collection 28.47/8.67 * contains at least one element e such that 28.47/8.67 * (o==null ? e==null : o.equals(e))." This specification should 28.47/8.67 * not be construed to imply that invoking Collection.contains 28.47/8.67 * with a non-null argument o will cause o.equals(e) to be 28.47/8.67 * invoked for any element e. Implementations are free to implement 28.47/8.67 * optimizations whereby the equals invocation is avoided, for 28.47/8.67 * example, by first comparing the hash codes of the two elements. (The 28.47/8.67 * {@link Object#hashCode()} specification guarantees that two objects with 28.47/8.67 * unequal hash codes cannot be equal.) More generally, implementations of 28.47/8.67 * the various Collections Framework interfaces are free to take advantage of 28.47/8.67 * the specified behavior of underlying {@link Object} methods wherever the 28.47/8.67 * implementor deems it appropriate. 28.47/8.67 * 28.47/8.67 *

This interface is a member of the 28.47/8.67 * 28.47/8.67 * Java Collections Framework. 28.47/8.67 * 28.47/8.67 * @author Josh Bloch 28.47/8.67 * @author Neal Gafter 28.47/8.67 * @see Set 28.47/8.67 * @see List 28.47/8.67 * @see Map 28.47/8.67 * @see SortedSet 28.47/8.67 * @see SortedMap 28.47/8.67 * @see HashSet 28.47/8.67 * @see TreeSet 28.47/8.67 * @see ArrayList 28.47/8.67 * @see LinkedList 28.47/8.67 * @see Vector 28.47/8.67 * @see Collections 28.47/8.67 * @see Arrays 28.47/8.67 * @see AbstractCollection 28.47/8.67 * @since 1.2 28.47/8.67 */ 28.47/8.67 28.47/8.67 public interface Collection { 28.47/8.67 // Query Operations 28.47/8.67 28.47/8.67 /** 28.47/8.67 * Returns the number of elements in this collection. If this collection 28.47/8.67 * contains more than Integer.MAX_VALUE elements, returns 28.47/8.67 * Integer.MAX_VALUE. 28.47/8.67 * 28.47/8.67 * @return the number of elements in this collection 28.47/8.67 */ 28.47/8.67 int size(); 28.47/8.67 28.47/8.67 /** 28.47/8.67 * Returns true if this collection contains no elements. 28.47/8.67 * 28.47/8.67 * @return true if this collection contains no elements 28.47/8.67 */ 28.47/8.67 boolean isEmpty(); 28.47/8.67 28.47/8.67 /** 28.47/8.67 * Returns true if this collection contains the specified element. 28.47/8.67 * More formally, returns true if and only if this collection 28.47/8.67 * contains at least one element e such that 28.47/8.67 * (o==null ? e==null : o.equals(e)). 28.47/8.67 * 28.47/8.67 * @param o element whose presence in this collection is to be tested 28.47/8.67 * @return true if this collection contains the specified 28.47/8.67 * element 28.47/8.67 * @throws ClassCastException if the type of the specified element 28.47/8.67 * is incompatible with this collection (optional) 28.47/8.67 * @throws NullPointerException if the specified element is null and this 28.47/8.67 * collection does not permit null elements (optional) 28.47/8.67 */ 28.47/8.67 boolean contains(Object o); 28.47/8.67 28.47/8.67 /** 28.47/8.67 * Returns an iterator over the elements in this collection. There are no 28.47/8.67 * guarantees concerning the order in which the elements are returned 28.47/8.67 * (unless this collection is an instance of some class that provides a 28.47/8.67 * guarantee). 28.47/8.67 * 28.47/8.67 * @return an Iterator over the elements in this collection 28.47/8.67 */ 28.47/8.67 Iterator iterator(); 28.47/8.67 28.47/8.67 // Modification Operations 28.47/8.67 28.47/8.67 /** 28.47/8.67 * Ensures that this collection contains the specified element (optional 28.47/8.67 * operation). Returns true if this collection changed as a 28.47/8.67 * result of the call. (Returns false if this collection does 28.47/8.67 * not permit duplicates and already contains the specified element.)

28.47/8.67 * 28.47/8.67 * Collections that support this operation may place limitations on what 28.47/8.67 * elements may be added to this collection. In particular, some 28.47/8.67 * collections will refuse to add null elements, and others will 28.47/8.67 * impose restrictions on the type of elements that may be added. 28.47/8.67 * Collection classes should clearly specify in their documentation any 28.47/8.67 * restrictions on what elements may be added.

28.47/8.67 * 28.47/8.67 * If a collection refuses to add a particular element for any reason 28.47/8.67 * other than that it already contains the element, it must throw 28.47/8.67 * an exception (rather than returning false). This preserves 28.47/8.67 * the invariant that a collection always contains the specified element 28.47/8.67 * after this call returns. 28.47/8.67 * 28.47/8.67 * @param e element whose presence in this collection is to be ensured 28.47/8.67 * @return true if this collection changed as a result of the 28.47/8.67 * call 28.47/8.67 * @throws UnsupportedOperationException if the add operation 28.47/8.67 * is not supported by this collection 28.47/8.67 * @throws ClassCastException if the class of the specified element 28.47/8.67 * prevents it from being added to this collection 28.47/8.67 * @throws NullPointerException if the specified element is null and this 28.47/8.67 * collection does not permit null elements 28.47/8.67 * @throws IllegalArgumentException if some property of the element 28.47/8.67 * prevents it from being added to this collection 28.47/8.67 * @throws IllegalStateException if the element cannot be added at this 28.47/8.67 * time due to insertion restrictions 28.47/8.67 */ 28.47/8.67 boolean add(E e); 28.47/8.67 28.47/8.67 /** 28.47/8.67 * Removes a single instance of the specified element from this 28.47/8.67 * collection, if it is present (optional operation). More formally, 28.47/8.67 * removes an element e such that 28.47/8.67 * (o==null ? e==null : o.equals(e)), if 28.47/8.67 * this collection contains one or more such elements. Returns 28.47/8.67 * true if this collection contained the specified element (or 28.47/8.67 * equivalently, if this collection changed as a result of the call). 28.47/8.67 * 28.47/8.67 * @param o element to be removed from this collection, if present 28.47/8.67 * @return true if an element was removed as a result of this call 28.47/8.67 * @throws ClassCastException if the type of the specified element 28.47/8.67 * is incompatible with this collection (optional) 28.47/8.67 * @throws NullPointerException if the specified element is null and this 28.47/8.67 * collection does not permit null elements (optional) 28.47/8.67 * @throws UnsupportedOperationException if the remove operation 28.47/8.67 * is not supported by this collection 28.47/8.67 */ 28.47/8.67 boolean remove(Object o); 28.47/8.67 28.47/8.67 28.47/8.67 // Bulk Operations 28.47/8.67 28.47/8.67 /** 28.47/8.67 * Returns true if this collection contains all of the elements 28.47/8.67 * in the specified collection. 28.47/8.67 * 28.47/8.67 * @param c collection to be checked for containment in this collection 28.47/8.67 * @return true if this collection contains all of the elements 28.47/8.67 * in the specified collection 28.47/8.67 * @throws ClassCastException if the types of one or more elements 28.47/8.67 * in the specified collection are incompatible with this 28.47/8.67 * collection (optional) 28.47/8.67 * @throws NullPointerException if the specified collection contains one 28.47/8.67 * or more null elements and this collection does not permit null 28.47/8.67 * elements (optional), or if the specified collection is null 28.47/8.67 * @see #contains(Object) 28.47/8.67 */ 28.47/8.67 boolean containsAll(Collection c); 28.47/8.67 28.47/8.67 /** 28.47/8.67 * Adds all of the elements in the specified collection to this collection 28.47/8.67 * (optional operation). The behavior of this operation is undefined if 28.47/8.67 * the specified collection is modified while the operation is in progress. 28.47/8.67 * (This implies that the behavior of this call is undefined if the 28.47/8.67 * specified collection is this collection, and this collection is 28.47/8.67 * nonempty.) 28.47/8.67 * 28.47/8.67 * @param c collection containing elements to be added to this collection 28.47/8.67 * @return true if this collection changed as a result of the call 28.47/8.67 * @throws UnsupportedOperationException if the addAll operation 28.47/8.67 * is not supported by this collection 28.47/8.67 * @throws ClassCastException if the class of an element of the specified 28.47/8.67 * collection prevents it from being added to this collection 28.47/8.67 * @throws NullPointerException if the specified collection contains a 28.47/8.67 * null element and this collection does not permit null elements, 28.47/8.67 * or if the specified collection is null 28.47/8.67 * @throws IllegalArgumentException if some property of an element of the 28.47/8.67 * specified collection prevents it from being added to this 28.47/8.67 * collection 28.47/8.67 * @throws IllegalStateException if not all the elements can be added at 28.47/8.67 * this time due to insertion restrictions 28.47/8.67 * @see #add(Object) 28.47/8.67 */ 28.47/8.67 boolean addAll(Collection c); 28.47/8.67 28.47/8.67 /** 28.47/8.67 * Removes all of this collection's elements that are also contained in the 28.47/8.67 * specified collection (optional operation). After this call returns, 28.47/8.67 * this collection will contain no elements in common with the specified 28.47/8.67 * collection. 28.47/8.67 * 28.47/8.67 * @param c collection containing elements to be removed from this collection 28.47/8.67 * @return true if this collection changed as a result of the 28.47/8.67 * call 28.47/8.67 * @throws UnsupportedOperationException if the removeAll method 28.47/8.67 * is not supported by this collection 28.47/8.67 * @throws ClassCastException if the types of one or more elements 28.47/8.67 * in this collection are incompatible with the specified 28.47/8.67 * collection (optional) 28.47/8.67 * @throws NullPointerException if this collection contains one or more 28.47/8.67 * null elements and the specified collection does not support 28.47/8.67 * null elements (optional), or if the specified collection is null 28.47/8.67 * @see #remove(Object) 28.47/8.67 * @see #contains(Object) 28.47/8.67 */ 28.47/8.67 boolean removeAll(Collection c); 28.47/8.67 28.47/8.67 /** 28.47/8.67 * Retains only the elements in this collection that are contained in the 28.47/8.67 * specified collection (optional operation). In other words, removes from 28.47/8.67 * this collection all of its elements that are not contained in the 28.47/8.67 * specified collection. 28.47/8.67 * 28.47/8.67 * @param c collection containing elements to be retained in this collection 28.47/8.67 * @return true if this collection changed as a result of the call 28.47/8.67 * @throws UnsupportedOperationException if the retainAll operation 28.47/8.67 * is not supported by this collection 28.47/8.67 * @throws ClassCastException if the types of one or more elements 28.47/8.67 * in this collection are incompatible with the specified 28.47/8.67 * collection (optional) 28.47/8.67 * @throws NullPointerException if this collection contains one or more 28.47/8.67 * null elements and the specified collection does not permit null 28.47/8.67 * elements (optional), or if the specified collection is null 28.47/8.67 * @see #remove(Object) 28.47/8.67 * @see #contains(Object) 28.47/8.67 */ 28.47/8.67 boolean retainAll(Collection c); 28.47/8.67 28.47/8.67 /** 28.47/8.67 * Removes all of the elements from this collection (optional operation). 28.47/8.67 * The collection will be empty after this method returns. 28.47/8.67 * 28.47/8.67 * @throws UnsupportedOperationException if the clear operation 28.47/8.67 * is not supported by this collection 28.47/8.67 */ 28.47/8.67 void clear(); 28.47/8.67 28.47/8.67 28.47/8.67 // Comparison and hashing 28.47/8.67 28.47/8.67 /** 28.47/8.67 * Compares the specified object with this collection for equality.

28.47/8.67 * 28.47/8.67 * While the Collection interface adds no stipulations to the 28.47/8.67 * general contract for the Object.equals, programmers who 28.47/8.67 * implement the Collection interface "directly" (in other words, 28.47/8.67 * create a class that is a Collection but is not a Set 28.47/8.67 * or a List) must exercise care if they choose to override the 28.47/8.67 * Object.equals. It is not necessary to do so, and the simplest 28.47/8.67 * course of action is to rely on Object's implementation, but 28.47/8.67 * the implementor may wish to implement a "value comparison" in place of 28.47/8.67 * the default "reference comparison." (The List and 28.47/8.67 * Set interfaces mandate such value comparisons.)

28.47/8.67 * 28.47/8.67 * The general contract for the Object.equals method states that 28.47/8.67 * equals must be symmetric (in other words, a.equals(b) if and 28.47/8.67 * only if b.equals(a)). The contracts for List.equals 28.47/8.67 * and Set.equals state that lists are only equal to other lists, 28.47/8.67 * and sets to other sets. Thus, a custom equals method for a 28.47/8.67 * collection class that implements neither the List nor 28.47/8.67 * Set interface must return false when this collection 28.47/8.67 * is compared to any list or set. (By the same logic, it is not possible 28.47/8.67 * to write a class that correctly implements both the Set and 28.47/8.67 * List interfaces.) 28.47/8.67 * 28.47/8.67 * @param o object to be compared for equality with this collection 28.47/8.67 * @return true if the specified object is equal to this 28.47/8.67 * collection 28.47/8.67 * 28.47/8.67 * @see Object#equals(Object) 28.47/8.67 * @see Set#equals(Object) 28.47/8.67 * @see List#equals(Object) 28.47/8.67 */ 28.47/8.67 boolean equals(Object o); 28.47/8.67 28.47/8.67 /** 28.47/8.67 * Returns the hash code value for this collection. While the 28.47/8.67 * Collection interface adds no stipulations to the general 28.47/8.67 * contract for the Object.hashCode method, programmers should 28.47/8.67 * take note that any class that overrides the Object.equals 28.47/8.67 * method must also override the Object.hashCode method in order 28.47/8.67 * to satisfy the general contract for the Object.hashCodemethod. 28.47/8.67 * In particular, c1.equals(c2) implies that 28.47/8.67 * c1.hashCode()==c2.hashCode(). 28.47/8.67 * 28.47/8.67 * @return the hash code value for this collection 28.47/8.67 * 28.47/8.67 * @see Object#hashCode() 28.47/8.67 * @see Object#equals(Object) 28.47/8.67 */ 28.47/8.67 int hashCode(); 28.47/8.67 } 28.47/8.67 28.47/8.67 28.47/8.67 /* 28.47/8.67 * Copyright 1997-2006 Sun Microsystems, Inc. All Rights Reserved. 28.47/8.67 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 28.47/8.67 * 28.47/8.67 * This code is free software; you can redistribute it and/or modify it 28.47/8.67 * under the terms of the GNU General Public License version 2 only, as 28.47/8.67 * published by the Free Software Foundation. Sun designates this 28.47/8.67 * particular file as subject to the "Classpath" exception as provided 28.47/8.67 * by Sun in the LICENSE file that accompanied this code. 28.47/8.67 * 28.47/8.67 * This code is distributed in the hope that it will be useful, but WITHOUT 28.47/8.67 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 28.47/8.67 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 28.47/8.67 * version 2 for more details (a copy is included in the LICENSE file that 28.47/8.67 * accompanied this code). 28.47/8.67 * 28.47/8.67 * You should have received a copy of the GNU General Public License version 28.47/8.67 * 2 along with this work; if not, write to the Free Software Foundation, 28.47/8.67 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 28.47/8.67 * 28.47/8.67 * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, 28.47/8.67 * CA 95054 USA or visit www.sun.com if you need additional information or 28.47/8.67 * have any questions. 28.47/8.67 */ 28.47/8.67 28.47/8.67 package javaUtilEx; 28.47/8.67 28.47/8.67 /** 28.47/8.67 * This exception may be thrown by methods that have detected concurrent 28.47/8.67 * modification of an object when such modification is not permissible. 28.47/8.67 *

28.47/8.67 * For example, it is not generally permissible for one thread to modify a Collection 28.47/8.67 * while another thread is iterating over it. In general, the results of the 28.47/8.67 * iteration are undefined under these circumstances. Some Iterator 28.47/8.67 * implementations (including those of all the general purpose collection implementations 28.47/8.67 * provided by the JRE) may choose to throw this exception if this behavior is 28.47/8.67 * detected. Iterators that do this are known as fail-fast iterators, 28.47/8.67 * as they fail quickly and cleanly, rather that risking arbitrary, 28.47/8.67 * non-deterministic behavior at an undetermined time in the future. 28.47/8.67 *

28.47/8.67 * Note that this exception does not always indicate that an object has 28.47/8.67 * been concurrently modified by a different thread. If a single 28.47/8.67 * thread issues a sequence of method invocations that violates the 28.47/8.67 * contract of an object, the object may throw this exception. For 28.47/8.67 * example, if a thread modifies a collection directly while it is 28.47/8.67 * iterating over the collection with a fail-fast iterator, the iterator 28.47/8.67 * will throw this exception. 28.47/8.67 * 28.47/8.67 *

Note that fail-fast behavior cannot be guaranteed as it is, generally 28.47/8.67 * speaking, impossible to make any hard guarantees in the presence of 28.47/8.67 * unsynchronized concurrent modification. Fail-fast operations 28.47/8.67 * throw ConcurrentModificationException on a best-effort basis. 28.47/8.67 * Therefore, it would be wrong to write a program that depended on this 28.47/8.67 * exception for its correctness: ConcurrentModificationException 28.47/8.67 * should be used only to detect bugs. 28.47/8.67 * 28.47/8.67 * @author Josh Bloch 28.47/8.67 * @see Collection 28.47/8.67 * @see Iterator 28.47/8.67 * @see ListIterator 28.47/8.67 * @see Vector 28.47/8.67 * @see LinkedList 28.47/8.67 * @see HashSet 28.47/8.67 * @see Hashtable 28.47/8.67 * @see TreeMap 28.47/8.67 * @see AbstractList 28.47/8.67 * @since 1.2 28.47/8.67 */ 28.47/8.67 public class ConcurrentModificationException extends RuntimeException { 28.47/8.67 /** 28.47/8.67 * Constructs a ConcurrentModificationException with no 28.47/8.67 * detail message. 28.47/8.67 */ 28.47/8.67 public ConcurrentModificationException() { 28.47/8.67 } 28.47/8.67 28.47/8.67 /** 28.47/8.67 * Constructs a ConcurrentModificationException with the 28.47/8.67 * specified detail message. 28.47/8.67 * 28.47/8.67 * @param message the detail message pertaining to this exception. 28.47/8.67 */ 28.47/8.67 public ConcurrentModificationException(String message) { 28.47/8.67 super(message); 28.47/8.67 } 28.47/8.67 } 28.47/8.67 28.47/8.67 28.47/8.67 /* 28.47/8.67 * Copyright 1997-2007 Sun Microsystems, Inc. All Rights Reserved. 28.47/8.67 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 28.47/8.67 * 28.47/8.67 * This code is free software; you can redistribute it and/or modify it 28.47/8.67 * under the terms of the GNU General Public License version 2 only, as 28.47/8.67 * published by the Free Software Foundation. Sun designates this 28.47/8.67 * particular file as subject to the "Classpath" exception as provided 28.47/8.67 * by Sun in the LICENSE file that accompanied this code. 28.47/8.67 * 28.47/8.67 * This code is distributed in the hope that it will be useful, but WITHOUT 28.47/8.67 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 28.47/8.67 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 28.47/8.67 * version 2 for more details (a copy is included in the LICENSE file that 28.47/8.67 * accompanied this code). 28.47/8.67 * 28.47/8.67 * You should have received a copy of the GNU General Public License version 28.47/8.67 * 2 along with this work; if not, write to the Free Software Foundation, 28.47/8.67 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 28.47/8.67 * 28.47/8.67 * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, 28.47/8.67 * CA 95054 USA or visit www.sun.com if you need additional information or 28.47/8.67 * have any questions. 28.47/8.67 */ 28.47/8.67 28.47/8.67 package javaUtilEx; 28.47/8.67 28.47/8.67 /** 28.47/8.67 * Hash table based implementation of the Map interface. This 28.47/8.67 * implementation provides all of the optional map operations, and permits 28.47/8.67 * null values and the null key. (The HashMap 28.47/8.67 * class is roughly equivalent to Hashtable, except that it is 28.47/8.67 * unsynchronized and permits nulls.) This class makes no guarantees as to 28.47/8.67 * the order of the map; in particular, it does not guarantee that the order 28.47/8.67 * will remain constant over time. 28.47/8.67 * 28.47/8.67 *

This implementation provides constant-time performance for the basic 28.47/8.67 * operations (get and put), assuming the hash function 28.47/8.67 * disperses the elements properly among the buckets. Iteration over 28.47/8.67 * collection views requires time proportional to the "capacity" of the 28.47/8.67 * HashMap instance (the number of buckets) plus its size (the number 28.47/8.67 * of key-value mappings). Thus, it's very important not to set the initial 28.47/8.67 * capacity too high (or the load factor too low) if iteration performance is 28.47/8.67 * important. 28.47/8.67 * 28.47/8.67 *

An instance of HashMap has two parameters that affect its 28.47/8.67 * performance: initial capacity and load factor. The 28.47/8.67 * capacity is the number of buckets in the hash table, and the initial 28.47/8.67 * capacity is simply the capacity at the time the hash table is created. The 28.47/8.67 * load factor is a measure of how full the hash table is allowed to 28.47/8.67 * get before its capacity is automatically increased. When the number of 28.47/8.67 * entries in the hash table exceeds the product of the load factor and the 28.47/8.67 * current capacity, the hash table is rehashed (that is, internal data 28.47/8.67 * structures are rebuilt) so that the hash table has approximately twice the 28.47/8.67 * number of buckets. 28.47/8.67 * 28.47/8.67 *

As a general rule, the default load factor (.75) offers a good tradeoff 28.47/8.67 * between time and space costs. Higher values decrease the space overhead 28.47/8.67 * but increase the lookup cost (reflected in most of the operations of the 28.47/8.67 * HashMap class, including get and put). The 28.47/8.67 * expected number of entries in the map and its load factor should be taken 28.47/8.67 * into account when setting its initial capacity, so as to minimize the 28.47/8.67 * number of rehash operations. If the initial capacity is greater 28.47/8.67 * than the maximum number of entries divided by the load factor, no 28.47/8.67 * rehash operations will ever occur. 28.47/8.67 * 28.47/8.67 *

If many mappings are to be stored in a HashMap instance, 28.47/8.67 * creating it with a sufficiently large capacity will allow the mappings to 28.47/8.67 * be stored more efficiently than letting it perform automatic rehashing as 28.47/8.67 * needed to grow the table. 28.47/8.67 * 28.47/8.67 *

Note that this implementation is not synchronized. 28.47/8.67 * If multiple threads access a hash map concurrently, and at least one of 28.47/8.67 * the threads modifies the map structurally, it must be 28.47/8.67 * synchronized externally. (A structural modification is any operation 28.47/8.67 * that adds or deletes one or more mappings; merely changing the value 28.47/8.67 * associated with a key that an instance already contains is not a 28.47/8.67 * structural modification.) This is typically accomplished by 28.47/8.67 * synchronizing on some object that naturally encapsulates the map. 28.47/8.67 * 28.47/8.67 * If no such object exists, the map should be "wrapped" using the 28.47/8.67 * {@link Collections#synchronizedMap Collections.synchronizedMap} 28.47/8.67 * method. This is best done at creation time, to prevent accidental 28.47/8.67 * unsynchronized access to the map:

28.47/8.67	 *   Map m = Collections.synchronizedMap(new HashMap(...));
28.47/8.67 * 28.47/8.67 *

The iterators returned by all of this class's "collection view methods" 28.47/8.67 * are fail-fast: if the map is structurally modified at any time after 28.47/8.67 * the iterator is created, in any way except through the iterator's own 28.47/8.67 * remove method, the iterator will throw a 28.47/8.67 * {@link ConcurrentModificationException}. Thus, in the face of concurrent 28.47/8.67 * modification, the iterator fails quickly and cleanly, rather than risking 28.47/8.67 * arbitrary, non-deterministic behavior at an undetermined time in the 28.47/8.67 * future. 28.47/8.67 * 28.47/8.67 *

Note that the fail-fast behavior of an iterator cannot be guaranteed 28.47/8.67 * as it is, generally speaking, impossible to make any hard guarantees in the 28.47/8.67 * presence of unsynchronized concurrent modification. Fail-fast iterators 28.47/8.67 * throw ConcurrentModificationException on a best-effort basis. 28.47/8.67 * Therefore, it would be wrong to write a program that depended on this 28.47/8.67 * exception for its correctness: the fail-fast behavior of iterators 28.47/8.67 * should be used only to detect bugs. 28.47/8.67 * 28.47/8.67 *

This class is a member of the 28.47/8.67 * 28.47/8.67 * Java Collections Framework. 28.47/8.67 * 28.47/8.67 * @param the type of keys maintained by this map 28.47/8.67 * @param the type of mapped values 28.47/8.67 * 28.47/8.67 * @author Doug Lea 28.47/8.67 * @author Josh Bloch 28.47/8.67 * @author Arthur van Hoff 28.47/8.67 * @author Neal Gafter 28.47/8.67 * @see Object#hashCode() 28.47/8.67 * @see Collection 28.47/8.67 * @see Map 28.47/8.67 * @see TreeMap 28.47/8.67 * @see Hashtable 28.47/8.67 * @since 1.2 28.47/8.67 */ 28.47/8.67 28.47/8.67 public class HashMap 28.47/8.67 extends AbstractMap 28.47/8.67 implements Map, Cloneable 28.47/8.67 { 28.47/8.67 28.47/8.67 /** 28.47/8.67 * The default initial capacity - MUST be a power of two. 28.47/8.67 */ 28.47/8.67 static final int DEFAULT_INITIAL_CAPACITY = 16; 28.47/8.67 28.47/8.67 /** 28.47/8.67 * The maximum capacity, used if a higher value is implicitly specified 28.47/8.67 * by either of the constructors with arguments. 28.47/8.67 * MUST be a power of two <= 1<<30. 28.47/8.67 */ 28.47/8.67 static final int MAXIMUM_CAPACITY = 1 << 30; 28.47/8.67 28.47/8.67 /** 28.47/8.67 * The load factor used when none specified in constructor. 28.47/8.67 */ 28.47/8.67 static final float DEFAULT_LOAD_FACTOR = 0.75f; 28.47/8.67 28.47/8.67 /** 28.47/8.67 * The table, resized as necessary. Length MUST Always be a power of two. 28.47/8.67 */ 28.47/8.67 transient Entry[] table; 28.47/8.67 28.47/8.67 /** 28.47/8.67 * The number of key-value mappings contained in this map. 28.47/8.67 */ 28.47/8.67 transient int size; 28.47/8.67 28.47/8.67 /** 28.47/8.67 * The next size value at which to resize (capacity * load factor). 28.47/8.67 * @serial 28.47/8.67 */ 28.47/8.67 int threshold; 28.47/8.67 28.47/8.67 /** 28.47/8.67 * The load factor for the hash table. 28.47/8.67 * 28.47/8.67 * @serial 28.47/8.67 */ 28.47/8.67 final float loadFactor; 28.47/8.67 28.47/8.67 /** 28.47/8.67 * The number of times this HashMap has been structurally modified 28.47/8.67 * Structural modifications are those that change the number of mappings in 28.47/8.67 * the HashMap or otherwise modify its internal structure (e.g., 28.47/8.67 * rehash). This field is used to make iterators on Collection-views of 28.47/8.67 * the HashMap fail-fast. (See ConcurrentModificationException). 28.47/8.67 */ 28.47/8.67 transient volatile int modCount; 28.47/8.67 28.47/8.67 /** 28.47/8.67 * Constructs an empty HashMap with the specified initial 28.47/8.67 * capacity and load factor. 28.47/8.67 * 28.47/8.67 * @param initialCapacity the initial capacity 28.47/8.67 * @param loadFactor the load factor 28.47/8.67 * @throws IllegalArgumentException if the initial capacity is negative 28.47/8.67 * or the load factor is nonpositive 28.47/8.67 */ 28.47/8.67 public HashMap(int initialCapacity, float loadFactor) { 28.47/8.67 if (initialCapacity < 0) 28.47/8.67 throw new IllegalArgumentException("Illegal initial capacity: " + 28.47/8.67 initialCapacity); 28.47/8.67 if (initialCapacity > MAXIMUM_CAPACITY) 28.47/8.67 initialCapacity = MAXIMUM_CAPACITY; 28.47/8.67 if (loadFactor <= 0 || Float.isNaN(loadFactor)) 28.47/8.67 throw new IllegalArgumentException("Illegal load factor: " + 28.47/8.67 loadFactor); 28.47/8.67 28.47/8.67 // Find a power of 2 >= initialCapacity 28.47/8.67 int capacity = 1; 28.47/8.67 while (capacity < initialCapacity) 28.47/8.67 capacity <<= 1; 28.47/8.67 28.47/8.67 this.loadFactor = loadFactor; 28.47/8.67 threshold = (int)(capacity * loadFactor); 28.47/8.67 table = new Entry[capacity]; 28.47/8.67 init(); 28.47/8.67 } 28.47/8.67 28.47/8.67 /** 28.47/8.67 * Constructs an empty HashMap with the specified initial 28.47/8.67 * capacity and the default load factor (0.75). 28.47/8.67 * 28.47/8.67 * @param initialCapacity the initial capacity. 28.47/8.67 * @throws IllegalArgumentException if the initial capacity is negative. 28.47/8.67 */ 28.47/8.67 public HashMap(int initialCapacity) { 28.47/8.67 this(initialCapacity, DEFAULT_LOAD_FACTOR); 28.47/8.67 } 28.47/8.67 28.47/8.67 /** 28.47/8.67 * Constructs an empty HashMap with the default initial capacity 28.47/8.67 * (16) and the default load factor (0.75). 28.47/8.67 */ 28.47/8.67 public HashMap() { 28.47/8.67 this.loadFactor = DEFAULT_LOAD_FACTOR; 28.47/8.67 threshold = (int)(DEFAULT_INITIAL_CAPACITY * DEFAULT_LOAD_FACTOR); 28.47/8.67 table = new Entry[DEFAULT_INITIAL_CAPACITY]; 28.47/8.67 init(); 28.47/8.67 } 28.47/8.67 28.47/8.67 /** 28.47/8.67 * Constructs a new HashMap with the same mappings as the 28.47/8.67 * specified Map. The HashMap is created with 28.47/8.67 * default load factor (0.75) and an initial capacity sufficient to 28.47/8.67 * hold the mappings in the specified Map. 28.47/8.67 * 28.47/8.67 * @param m the map whose mappings are to be placed in this map 28.47/8.67 * @throws NullPointerException if the specified map is null 28.47/8.67 */ 28.47/8.67 public HashMap(Map m) { 28.47/8.67 this(Math.max((int) (m.size() / DEFAULT_LOAD_FACTOR) + 1, 28.47/8.67 DEFAULT_INITIAL_CAPACITY), DEFAULT_LOAD_FACTOR); 28.47/8.67 putAllForCreate(m); 28.47/8.67 } 28.47/8.67 28.47/8.67 // internal utilities 28.47/8.67 28.47/8.67 /** 28.47/8.67 * Initialization hook for subclasses. This method is called 28.47/8.67 * in all constructors and pseudo-constructors (clone, readObject) 28.47/8.67 * after HashMap has been initialized but before any entries have 28.47/8.67 * been inserted. (In the absence of this method, readObject would 28.47/8.67 * require explicit knowledge of subclasses.) 28.47/8.67 */ 28.47/8.67 void init() { 28.47/8.67 } 28.47/8.67 28.47/8.67 /** 28.47/8.67 * Applies a supplemental hash function to a given hashCode, which 28.47/8.67 * defends against poor quality hash functions. This is critical 28.47/8.67 * because HashMap uses power-of-two length hash tables, that 28.47/8.67 * otherwise encounter collisions for hashCodes that do not differ 28.47/8.67 * in lower bits. Note: Null keys always map to hash 0, thus index 0. 28.47/8.67 */ 28.47/8.67 static int hash(int h) { 28.47/8.67 // This function ensures that hashCodes that differ only by 28.47/8.67 // constant multiples at each bit position have a bounded 28.47/8.67 // number of collisions (approximately 8 at default load factor). 28.47/8.67 h ^= (h >>> 20) ^ (h >>> 12); 28.47/8.67 return h ^ (h >>> 7) ^ (h >>> 4); 28.47/8.67 } 28.47/8.67 28.47/8.67 /** 28.47/8.67 * Returns index for hash code h. 28.47/8.67 */ 28.47/8.67 static int indexFor(int h, int length) { 28.47/8.67 return h & (length-1); 28.47/8.67 } 28.47/8.67 28.47/8.67 /** 28.47/8.67 * Returns the number of key-value mappings in this map. 28.47/8.67 * 28.47/8.67 * @return the number of key-value mappings in this map 28.47/8.67 */ 28.47/8.67 public int size() { 28.47/8.67 return size; 28.47/8.67 } 28.47/8.67 28.47/8.67 /** 28.47/8.67 * Returns true if this map contains no key-value mappings. 28.47/8.67 * 28.47/8.67 * @return true if this map contains no key-value mappings 28.47/8.67 */ 28.47/8.67 public boolean isEmpty() { 28.47/8.67 return size == 0; 28.47/8.67 } 28.47/8.67 28.47/8.67 /** 28.47/8.67 * Returns the value to which the specified key is mapped, 28.47/8.67 * or {@code null} if this map contains no mapping for the key. 28.47/8.67 * 28.47/8.67 *

More formally, if this map contains a mapping from a key 28.47/8.67 * {@code k} to a value {@code v} such that {@code (key==null ? k==null : 28.47/8.67 * key.equals(k))}, then this method returns {@code v}; otherwise 28.47/8.67 * it returns {@code null}. (There can be at most one such mapping.) 28.47/8.67 * 28.47/8.67 *

A return value of {@code null} does not necessarily 28.47/8.67 * indicate that the map contains no mapping for the key; it's also 28.47/8.67 * possible that the map explicitly maps the key to {@code null}. 28.47/8.67 * The {@link #containsKey containsKey} operation may be used to 28.47/8.67 * distinguish these two cases. 28.47/8.67 * 28.47/8.67 * @see #put(Object, Object) 28.47/8.67 */ 28.47/8.67 public V get(Object key) { 28.47/8.67 if (key == null) 28.47/8.67 return getForNullKey(); 28.47/8.67 int hash = hash(key.hashCode()); 28.47/8.67 for (Entry e = table[indexFor(hash, table.length)]; 28.47/8.67 e != null; 28.47/8.67 e = e.next) { 28.47/8.67 Object k; 28.47/8.67 if (e.hash == hash && ((k = e.key) == key || key.equals(k))) 28.47/8.67 return e.value; 28.47/8.67 } 28.47/8.67 return null; 28.47/8.67 } 28.47/8.67 28.47/8.67 /** 28.47/8.67 * Offloaded version of get() to look up null keys. Null keys map 28.47/8.67 * to index 0. This null case is split out into separate methods 28.47/8.67 * for the sake of performance in the two most commonly used 28.47/8.67 * operations (get and put), but incorporated with conditionals in 28.47/8.67 * others. 28.47/8.67 */ 28.47/8.67 private V getForNullKey() { 28.47/8.67 for (Entry e = table[0]; e != null; e = e.next) { 28.47/8.67 if (e.key == null) 28.47/8.67 return e.value; 28.47/8.67 } 28.47/8.67 return null; 28.47/8.67 } 28.47/8.67 28.47/8.67 /** 28.47/8.67 * Returns true if this map contains a mapping for the 28.47/8.67 * specified key. 28.47/8.67 * 28.47/8.67 * @param key The key whose presence in this map is to be tested 28.47/8.67 * @return true if this map contains a mapping for the specified 28.47/8.67 * key. 28.47/8.67 */ 28.47/8.67 public boolean containsKey(Object key) { 28.47/8.67 return getEntry(key) != null; 28.47/8.67 } 28.47/8.67 28.47/8.67 /** 28.47/8.67 * Returns the entry associated with the specified key in the 28.47/8.67 * HashMap. Returns null if the HashMap contains no mapping 28.47/8.67 * for the key. 28.47/8.67 */ 28.47/8.67 final Entry getEntry(Object key) { 28.47/8.67 int hash = (key == null) ? 0 : hash(key.hashCode()); 28.47/8.67 for (Entry e = table[indexFor(hash, table.length)]; 28.47/8.67 e != null; 28.47/8.67 e = e.next) { 28.47/8.67 Object k; 28.47/8.67 if (e.hash == hash && 28.47/8.67 ((k = e.key) == key || (key != null && key.equals(k)))) 28.47/8.67 return e; 28.47/8.67 } 28.47/8.67 return null; 28.47/8.67 } 28.47/8.67 28.47/8.67 28.47/8.67 /** 28.47/8.67 * Associates the specified value with the specified key in this map. 28.47/8.67 * If the map previously contained a mapping for the key, the old 28.47/8.67 * value is replaced. 28.47/8.67 * 28.47/8.67 * @param key key with which the specified value is to be associated 28.47/8.67 * @param value value to be associated with the specified key 28.47/8.67 * @return the previous value associated with key, or 28.47/8.67 * null if there was no mapping for key. 28.47/8.67 * (A null return can also indicate that the map 28.47/8.67 * previously associated null with key.) 28.47/8.67 */ 28.47/8.67 public V put(K key, V value) { 28.47/8.67 if (key == null) 28.47/8.67 return putForNullKey(value); 28.47/8.67 int hash = hash(key.hashCode()); 28.47/8.67 int i = indexFor(hash, table.length); 28.47/8.67 for (Entry e = table[i]; e != null; e = e.next) { 28.47/8.67 Object k; 28.47/8.67 if (e.hash == hash && ((k = e.key) == key || key.equals(k))) { 28.47/8.67 V oldValue = e.value; 28.47/8.67 e.value = value; 28.47/8.67 e.recordAccess(this); 28.47/8.67 return oldValue; 28.47/8.67 } 28.47/8.67 } 28.47/8.67 28.47/8.67 modCount++; 28.47/8.67 addEntry(hash, key, value, i); 28.47/8.67 return null; 28.47/8.67 } 28.47/8.67 28.47/8.67 /** 28.47/8.67 * Offloaded version of put for null keys 28.47/8.67 */ 28.47/8.67 private V putForNullKey(V value) { 28.47/8.67 for (Entry e = table[0]; e != null; e = e.next) { 28.47/8.67 if (e.key == null) { 28.47/8.67 V oldValue = e.value; 28.47/8.67 e.value = value; 28.47/8.67 e.recordAccess(this); 28.47/8.67 return oldValue; 28.47/8.67 } 28.47/8.67 } 28.47/8.67 modCount++; 28.47/8.67 addEntry(0, null, value, 0); 28.47/8.67 return null; 28.47/8.67 } 28.47/8.67 28.47/8.67 /** 28.47/8.67 * This method is used instead of put by constructors and 28.47/8.67 * pseudoconstructors (clone, readObject). It does not resize the table, 28.47/8.67 * check for comodification, etc. It calls createEntry rather than 28.47/8.67 * addEntry. 28.47/8.67 */ 28.47/8.67 private void putForCreate(K key, V value) { 28.47/8.67 int hash = (key == null) ? 0 : hash(key.hashCode()); 28.47/8.67 int i = indexFor(hash, table.length); 28.47/8.67 28.47/8.67 /** 28.47/8.67 * Look for preexisting entry for key. This will never happen for 28.47/8.67 * clone or deserialize. It will only happen for construction if the 28.47/8.67 * input Map is a sorted map whose ordering is inconsistent w/ equals. 28.47/8.67 */ 28.47/8.67 for (Entry e = table[i]; e != null; e = e.next) { 28.47/8.67 Object k; 28.47/8.67 if (e.hash == hash && 28.47/8.67 ((k = e.key) == key || (key != null && key.equals(k)))) { 28.47/8.67 e.value = value; 28.47/8.67 return; 28.47/8.67 } 28.47/8.67 } 28.47/8.67 28.47/8.67 createEntry(hash, key, value, i); 28.47/8.67 } 28.47/8.67 28.47/8.67 private void putAllForCreate(Map m) { 28.47/8.67 for (Iterator> i = m.entrySet().iterator(); i.hasNext(); ) { 28.47/8.67 Map.Entry e = i.next(); 28.47/8.67 putForCreate(e.getKey(), e.getValue()); 28.47/8.67 } 28.47/8.67 } 28.47/8.67 28.47/8.67 /** 28.47/8.67 * Rehashes the contents of this map into a new array with a 28.47/8.67 * larger capacity. This method is called automatically when the 28.47/8.67 * number of keys in this map reaches its threshold. 28.47/8.67 * 28.47/8.67 * If current capacity is MAXIMUM_CAPACITY, this method does not 28.47/8.67 * resize the map, but sets threshold to Integer.MAX_VALUE. 28.47/8.67 * This has the effect of preventing future calls. 28.47/8.67 * 28.47/8.67 * @param newCapacity the new capacity, MUST be a power of two; 28.47/8.67 * must be greater than current capacity unless current 28.47/8.67 * capacity is MAXIMUM_CAPACITY (in which case value 28.47/8.67 * is irrelevant). 28.47/8.67 */ 28.47/8.67 void resize(int newCapacity) { 28.47/8.67 Entry[] oldTable = table; 28.47/8.67 int oldCapacity = oldTable.length; 28.47/8.67 if (oldCapacity == MAXIMUM_CAPACITY) { 28.47/8.67 threshold = Integer.MAX_VALUE; 28.47/8.67 return; 28.47/8.67 } 28.47/8.67 28.47/8.67 Entry[] newTable = new Entry[newCapacity]; 28.47/8.67 transfer(newTable); 28.47/8.67 table = newTable; 28.47/8.67 threshold = (int)(newCapacity * loadFactor); 28.47/8.67 } 28.47/8.67 28.47/8.67 /** 28.47/8.67 * Transfers all entries from current table to newTable. 28.47/8.67 */ 28.47/8.67 void transfer(Entry[] newTable) { 28.47/8.67 Entry[] src = table; 28.47/8.67 int newCapacity = newTable.length; 28.47/8.67 for (int j = 0; j < src.length; j++) { 28.47/8.67 Entry e = src[j]; 28.47/8.67 if (e != null) { 28.47/8.67 src[j] = null; 28.47/8.67 do { 28.47/8.67 Entry next = e.next; 28.47/8.67 int i = indexFor(e.hash, newCapacity); 28.47/8.67 e.next = newTable[i]; 28.47/8.67 newTable[i] = e; 28.47/8.67 e = next; 28.47/8.67 } while (e != null); 28.47/8.67 } 28.47/8.67 } 28.47/8.67 } 28.47/8.67 28.47/8.67 /** 28.47/8.67 * Copies all of the mappings from the specified map to this map. 28.47/8.67 * These mappings will replace any mappings that this map had for 28.47/8.67 * any of the keys currently in the specified map. 28.47/8.67 * 28.47/8.67 * @param m mappings to be stored in this map 28.47/8.67 * @throws NullPointerException if the specified map is null 28.47/8.67 */ 28.47/8.67 public void putAll(Map m) { 28.47/8.67 int numKeysToBeAdded = m.size(); 28.47/8.67 if (numKeysToBeAdded == 0) 28.47/8.67 return; 28.47/8.67 28.47/8.67 /* 28.47/8.67 * Expand the map if the map if the number of mappings to be added 28.47/8.67 * is greater than or equal to threshold. This is conservative; the 28.47/8.67 * obvious condition is (m.size() + size) >= threshold, but this 28.47/8.67 * condition could result in a map with twice the appropriate capacity, 28.47/8.67 * if the keys to be added overlap with the keys already in this map. 28.47/8.67 * By using the conservative calculation, we subject ourself 28.47/8.67 * to at most one extra resize. 28.47/8.67 */ 28.47/8.67 if (numKeysToBeAdded > threshold) { 28.47/8.67 int targetCapacity = (int)(numKeysToBeAdded / loadFactor + 1); 28.47/8.67 if (targetCapacity > MAXIMUM_CAPACITY) 28.47/8.67 targetCapacity = MAXIMUM_CAPACITY; 28.47/8.67 int newCapacity = table.length; 28.47/8.67 while (newCapacity < targetCapacity) 28.47/8.67 newCapacity <<= 1; 28.47/8.67 if (newCapacity > table.length) 28.47/8.67 resize(newCapacity); 28.47/8.67 } 28.47/8.67 28.47/8.67 for (Iterator> i = m.entrySet().iterator(); i.hasNext(); ) { 28.47/8.67 Map.Entry e = i.next(); 28.47/8.67 put(e.getKey(), e.getValue()); 28.47/8.67 } 28.47/8.67 } 28.47/8.67 28.47/8.67 /** 28.47/8.67 * Removes the mapping for the specified key from this map if present. 28.47/8.67 * 28.47/8.67 * @param key key whose mapping is to be removed from the map 28.47/8.67 * @return the previous value associated with key, or 28.47/8.67 * null if there was no mapping for key. 28.47/8.67 * (A null return can also indicate that the map 28.47/8.67 * previously associated null with key.) 28.47/8.67 */ 28.47/8.67 public V remove(Object key) { 28.47/8.67 Entry e = removeEntryForKey(key); 28.47/8.67 return (e == null ? null : e.value); 28.47/8.67 } 28.47/8.67 28.47/8.67 /** 28.47/8.67 * Removes and returns the entry associated with the specified key 28.47/8.67 * in the HashMap. Returns null if the HashMap contains no mapping 28.47/8.67 * for this key. 28.47/8.67 */ 28.47/8.67 final Entry removeEntryForKey(Object key) { 28.47/8.67 int hash = (key == null) ? 0 : hash(key.hashCode()); 28.47/8.67 int i = indexFor(hash, table.length); 28.47/8.67 Entry prev = table[i]; 28.47/8.67 Entry e = prev; 28.47/8.67 28.47/8.67 while (e != null) { 28.47/8.67 Entry next = e.next; 28.47/8.67 Object k; 28.47/8.67 if (e.hash == hash && 28.47/8.67 ((k = e.key) == key || (key != null && key.equals(k)))) { 28.47/8.67 modCount++; 28.47/8.67 size--; 28.47/8.67 if (prev == e) 28.47/8.67 table[i] = next; 28.47/8.67 else 28.47/8.67 prev.next = next; 28.47/8.67 e.recordRemoval(this); 28.47/8.67 return e; 28.47/8.67 } 28.47/8.67 prev = e; 28.47/8.67 e = next; 28.47/8.67 } 28.47/8.67 28.47/8.67 return e; 28.47/8.67 } 28.47/8.67 28.47/8.67 /** 28.47/8.67 * Special version of remove for EntrySet. 28.47/8.67 */ 28.47/8.67 final Entry removeMapping(Object o) { 28.47/8.67 if (!(o instanceof Map.Entry)) 28.47/8.67 return null; 28.47/8.67 28.47/8.67 Map.Entry entry = (Map.Entry) o; 28.47/8.67 Object key = entry.getKey(); 28.47/8.67 int hash = (key == null) ? 0 : hash(key.hashCode()); 28.47/8.67 int i = indexFor(hash, table.length); 28.47/8.67 Entry prev = table[i]; 28.47/8.67 Entry e = prev; 28.47/8.67 28.47/8.67 while (e != null) { 28.47/8.67 Entry next = e.next; 28.47/8.67 if (e.hash == hash && e.equals(entry)) { 28.47/8.67 modCount++; 28.47/8.67 size--; 28.47/8.67 if (prev == e) 28.47/8.67 table[i] = next; 28.47/8.67 else 28.47/8.67 prev.next = next; 28.47/8.67 e.recordRemoval(this); 28.47/8.67 return e; 28.47/8.67 } 28.47/8.67 prev = e; 28.47/8.67 e = next; 28.47/8.67 } 28.47/8.67 28.47/8.67 return e; 28.47/8.67 } 28.47/8.67 28.47/8.67 /** 28.47/8.67 * Removes all of the mappings from this map. 28.47/8.67 * The map will be empty after this call returns. 28.47/8.67 */ 28.47/8.67 public void clear() { 28.47/8.67 modCount++; 28.47/8.67 Entry[] tab = table; 28.47/8.67 for (int i = 0; i < tab.length; i++) 28.47/8.67 tab[i] = null; 28.47/8.67 size = 0; 28.47/8.67 } 28.47/8.67 28.47/8.67 /** 28.47/8.67 * Returns true if this map maps one or more keys to the 28.47/8.67 * specified value. 28.47/8.67 * 28.47/8.67 * @param value value whose presence in this map is to be tested 28.47/8.67 * @return true if this map maps one or more keys to the 28.47/8.67 * specified value 28.47/8.67 */ 28.47/8.67 public boolean containsValue(Object value) { 28.47/8.67 if (value == null) 28.47/8.67 return containsNullValue(); 28.47/8.67 28.47/8.67 Entry[] tab = table; 28.47/8.67 for (int i = 0; i < tab.length ; i++) 28.47/8.67 for (Entry e = tab[i] ; e != null ; e = e.next) 28.47/8.67 if (value.equals(e.value)) 28.47/8.67 return true; 28.47/8.67 return false; 28.47/8.67 } 28.47/8.67 28.47/8.67 /** 28.47/8.67 * Special-case code for containsValue with null argument 28.47/8.67 */ 28.47/8.67 private boolean containsNullValue() { 28.47/8.67 Entry[] tab = table; 28.47/8.67 for (int i = 0; i < tab.length ; i++) 28.47/8.67 for (Entry e = tab[i] ; e != null ; e = e.next) 28.47/8.67 if (e.value == null) 28.47/8.67 return true; 28.47/8.67 return false; 28.47/8.67 } 28.47/8.67 28.47/8.67 /** 28.47/8.67 * Returns a shallow copy of this HashMap instance: the keys and 28.47/8.67 * values themselves are not cloned. 28.47/8.67 * 28.47/8.67 * @return a shallow copy of this map 28.47/8.67 */ 28.47/8.67 public Object clone() { 28.47/8.67 HashMap result = null; 28.47/8.67 try { 28.47/8.67 result = (HashMap)super.clone(); 28.47/8.67 } catch (CloneNotSupportedException e) { 28.47/8.67 // assert false; 28.47/8.67 } 28.47/8.67 result.table = new Entry[table.length]; 28.47/8.67 result.entrySet = null; 28.47/8.67 result.modCount = 0; 28.47/8.67 result.size = 0; 28.47/8.67 result.init(); 28.47/8.67 result.putAllForCreate(this); 28.47/8.67 28.47/8.67 return result; 28.47/8.67 } 28.47/8.67 28.47/8.67 static class Entry implements Map.Entry { 28.47/8.67 final K key; 28.47/8.67 V value; 28.47/8.67 Entry next; 28.47/8.67 final int hash; 28.47/8.67 28.47/8.67 /** 28.47/8.67 * Creates new entry. 28.47/8.67 */ 28.47/8.67 Entry(int h, K k, V v, Entry n) { 28.47/8.67 value = v; 28.47/8.67 next = n; 28.47/8.67 key = k; 28.47/8.67 hash = h; 28.47/8.67 } 28.47/8.67 28.47/8.67 public final K getKey() { 28.47/8.67 return key; 28.47/8.67 } 28.47/8.67 28.47/8.67 public final V getValue() { 28.47/8.67 return value; 28.47/8.67 } 28.47/8.67 28.47/8.67 public final V setValue(V newValue) { 28.47/8.67 V oldValue = value; 28.47/8.67 value = newValue; 28.47/8.67 return oldValue; 28.47/8.67 } 28.47/8.67 28.47/8.67 public final boolean equals(Object o) { 28.47/8.67 if (!(o instanceof Map.Entry)) 28.47/8.67 return false; 28.47/8.67 Map.Entry e = (Map.Entry)o; 28.47/8.67 Object k1 = getKey(); 28.47/8.67 Object k2 = e.getKey(); 28.47/8.67 if (k1 == k2 || (k1 != null && k1.equals(k2))) { 28.47/8.67 Object v1 = getValue(); 28.47/8.67 Object v2 = e.getValue(); 28.47/8.67 if (v1 == v2 || (v1 != null && v1.equals(v2))) 28.47/8.67 return true; 28.47/8.67 } 28.47/8.67 return false; 28.47/8.67 } 28.47/8.67 28.47/8.67 public final int hashCode() { 28.47/8.67 return (key==null ? 0 : key.hashCode()) ^ 28.47/8.67 (value==null ? 0 : value.hashCode()); 28.47/8.67 } 28.47/8.67 28.47/8.67 public final String toString() { 28.47/8.67 return getKey() + "=" + getValue(); 28.47/8.67 } 28.47/8.67 28.47/8.67 /** 28.47/8.67 * This method is invoked whenever the value in an entry is 28.47/8.67 * overwritten by an invocation of put(k,v) for a key k that's already 28.47/8.67 * in the HashMap. 28.47/8.67 */ 28.47/8.67 void recordAccess(HashMap m) { 28.47/8.67 } 28.47/8.67 28.47/8.67 /** 28.47/8.67 * This method is invoked whenever the entry is 28.47/8.67 * removed from the table. 28.47/8.67 */ 28.47/8.67 void recordRemoval(HashMap m) { 28.47/8.67 } 28.47/8.67 } 28.47/8.67 28.47/8.67 /** 28.47/8.67 * Adds a new entry with the specified key, value and hash code to 28.47/8.67 * the specified bucket. It is the responsibility of this 28.47/8.67 * method to resize the table if appropriate. 28.47/8.67 * 28.47/8.67 * Subclass overrides this to alter the behavior of put method. 28.47/8.67 */ 28.47/8.67 void addEntry(int hash, K key, V value, int bucketIndex) { 28.47/8.67 Entry e = table[bucketIndex]; 28.47/8.67 table[bucketIndex] = new Entry(hash, key, value, e); 28.47/8.67 if (size++ >= threshold) 28.47/8.67 resize(2 * table.length); 28.47/8.67 } 28.47/8.67 28.47/8.67 /** 28.47/8.67 * Like addEntry except that this version is used when creating entries 28.47/8.67 * as part of Map construction or "pseudo-construction" (cloning, 28.47/8.67 * deserialization). This version needn't worry about resizing the table. 28.47/8.67 * 28.47/8.67 * Subclass overrides this to alter the behavior of HashMap(Map), 28.47/8.67 * clone, and readObject. 28.47/8.67 */ 28.47/8.67 void createEntry(int hash, K key, V value, int bucketIndex) { 28.47/8.67 Entry e = table[bucketIndex]; 28.47/8.67 table[bucketIndex] = new Entry(hash, key, value, e); 28.47/8.67 size++; 28.47/8.67 } 28.47/8.67 28.47/8.67 private abstract class HashIterator implements Iterator { 28.47/8.67 Entry next; // next entry to return 28.47/8.67 int expectedModCount; // For fast-fail 28.47/8.67 int index; // current slot 28.47/8.67 Entry current; // current entry 28.47/8.67 28.47/8.67 HashIterator() { 28.47/8.67 expectedModCount = modCount; 28.47/8.67 if (size > 0) { // advance to first entry 28.47/8.67 Entry[] t = table; 28.47/8.67 while (index < t.length && (next = t[index++]) == null) 28.47/8.67 ; 28.47/8.67 } 28.47/8.67 } 28.47/8.67 28.47/8.67 public final boolean hasNext() { 28.47/8.67 return next != null; 28.47/8.67 } 28.47/8.67 28.47/8.67 final Entry nextEntry() { 28.47/8.67 if (modCount != expectedModCount) 28.47/8.67 throw new ConcurrentModificationException(); 28.47/8.67 Entry e = next; 28.47/8.67 if (e == null) 28.47/8.67 throw new NoSuchElementException(); 28.47/8.67 28.47/8.67 if ((next = e.next) == null) { 28.47/8.67 Entry[] t = table; 28.47/8.67 while (index < t.length && (next = t[index++]) == null) 28.47/8.67 ; 28.47/8.67 } 28.47/8.67 current = e; 28.47/8.67 return e; 28.47/8.67 } 28.47/8.67 28.47/8.67 public void remove() { 28.47/8.67 if (current == null) 28.47/8.67 throw new IllegalStateException(); 28.47/8.67 if (modCount != expectedModCount) 28.47/8.67 throw new ConcurrentModificationException(); 28.47/8.67 Object k = current.key; 28.47/8.67 current = null; 28.47/8.67 HashMap.this.removeEntryForKey(k); 28.47/8.67 expectedModCount = modCount; 28.47/8.67 } 28.47/8.67 28.47/8.67 } 28.47/8.67 28.47/8.67 private final class ValueIterator extends HashIterator { 28.47/8.67 public V next() { 28.47/8.67 return nextEntry().value; 28.47/8.67 } 28.47/8.67 } 28.47/8.67 28.47/8.67 private final class KeyIterator extends HashIterator { 28.47/8.67 public K next() { 28.47/8.67 return nextEntry().getKey(); 28.47/8.67 } 28.47/8.67 } 28.47/8.67 28.47/8.67 private final class EntryIterator extends HashIterator> { 28.47/8.67 public Map.Entry next() { 28.47/8.67 return nextEntry(); 28.47/8.67 } 28.47/8.67 } 28.47/8.67 28.47/8.67 // Subclass overrides these to alter behavior of views' iterator() method 28.47/8.67 Iterator newKeyIterator() { 28.47/8.67 return new KeyIterator(); 28.47/8.67 } 28.47/8.67 Iterator newValueIterator() { 28.47/8.67 return new ValueIterator(); 28.47/8.67 } 28.47/8.67 Iterator> newEntryIterator() { 28.47/8.67 return new EntryIterator(); 28.47/8.67 } 28.47/8.67 28.47/8.67 28.47/8.67 // Views 28.47/8.67 28.47/8.67 private transient Set> entrySet = null; 28.47/8.67 28.47/8.67 /** 28.47/8.67 * Returns a {@link Set} view of the keys contained in this map. 28.47/8.68 * The set is backed by the map, so changes to the map are 28.47/8.68 * reflected in the set, and vice-versa. If the map is modified 28.47/8.68 * while an iteration over the set is in progress (except through 28.47/8.68 * the iterator's own remove operation), the results of 28.47/8.68 * the iteration are undefined. The set supports element removal, 28.47/8.68 * which removes the corresponding mapping from the map, via the 28.47/8.68 * Iterator.remove, Set.remove, 28.47/8.68 * removeAll, retainAll, and clear 28.47/8.68 * operations. It does not support the add or addAll 28.47/8.68 * operations. 28.47/8.68 */ 28.47/8.68 public Set keySet() { 28.47/8.68 Set ks = keySet; 28.47/8.68 return (ks != null ? ks : (keySet = new KeySet())); 28.47/8.68 } 28.47/8.68 28.47/8.68 private final class KeySet extends AbstractSet { 28.47/8.68 public Iterator iterator() { 28.47/8.68 return newKeyIterator(); 28.47/8.68 } 28.47/8.68 public int size() { 28.47/8.68 return size; 28.47/8.68 } 28.47/8.68 public boolean contains(Object o) { 28.47/8.68 return containsKey(o); 28.47/8.68 } 28.47/8.68 public boolean remove(Object o) { 28.47/8.68 return HashMap.this.removeEntryForKey(o) != null; 28.47/8.68 } 28.47/8.68 public void clear() { 28.47/8.68 HashMap.this.clear(); 28.47/8.68 } 28.47/8.68 public Object[] toArray() { 28.47/8.68 Object[] res = new Object[size]; 28.47/8.68 Iterator it = iterator(); 28.47/8.68 int i = 0; 28.47/8.68 while (it.hasNext()) 28.47/8.68 res[i++] = it.next(); 28.47/8.68 return res; 28.47/8.68 } 28.47/8.68 public T[] toArray(T[] a) { 28.47/8.68 a = (T[])java.lang.reflect.Array.newInstance( 28.47/8.68 a.getClass().getComponentType(), size); 28.47/8.68 Object[] res = a; 28.47/8.68 Iterator it = iterator(); 28.47/8.68 int i = 0; 28.47/8.68 while (it.hasNext()) 28.47/8.68 res[i++] = it.next(); 28.47/8.68 return a; 28.47/8.68 } 28.47/8.68 } 28.47/8.68 28.47/8.68 /** 28.47/8.68 * Returns a {@link Collection} view of the values contained in this map. 28.47/8.68 * The collection is backed by the map, so changes to the map are 28.47/8.68 * reflected in the collection, and vice-versa. If the map is 28.47/8.68 * modified while an iteration over the collection is in progress 28.47/8.68 * (except through the iterator's own remove operation), 28.47/8.68 * the results of the iteration are undefined. The collection 28.47/8.68 * supports element removal, which removes the corresponding 28.47/8.68 * mapping from the map, via the Iterator.remove, 28.47/8.68 * Collection.remove, removeAll, 28.47/8.68 * retainAll and clear operations. It does not 28.47/8.68 * support the add or addAll operations. 28.47/8.68 */ 28.47/8.68 public Collection values() { 28.47/8.68 Collection vs = values; 28.47/8.68 return (vs != null ? vs : (values = new Values())); 28.47/8.68 } 28.47/8.68 28.47/8.68 private final class Values extends AbstractCollection { 28.47/8.68 public Iterator iterator() { 28.47/8.68 return newValueIterator(); 28.47/8.68 } 28.47/8.68 public int size() { 28.47/8.68 return size; 28.47/8.68 } 28.47/8.68 public boolean contains(Object o) { 28.47/8.68 return containsValue(o); 28.47/8.68 } 28.47/8.68 public void clear() { 28.47/8.68 HashMap.this.clear(); 28.47/8.68 } 28.47/8.68 } 28.47/8.68 28.47/8.68 /** 28.47/8.68 * Returns a {@link Set} view of the mappings contained in this map. 28.47/8.68 * The set is backed by the map, so changes to the map are 28.47/8.68 * reflected in the set, and vice-versa. If the map is modified 28.47/8.68 * while an iteration over the set is in progress (except through 28.47/8.68 * the iterator's own remove operation, or through the 28.47/8.68 * setValue operation on a map entry returned by the 28.47/8.68 * iterator) the results of the iteration are undefined. The set 28.47/8.68 * supports element removal, which removes the corresponding 28.47/8.68 * mapping from the map, via the Iterator.remove, 28.47/8.68 * Set.remove, removeAll, retainAll and 28.47/8.68 * clear operations. It does not support the 28.47/8.68 * add or addAll operations. 28.47/8.68 * 28.47/8.68 * @return a set view of the mappings contained in this map 28.47/8.68 */ 28.47/8.68 public Set> entrySet() { 28.47/8.68 return entrySet0(); 28.47/8.68 } 28.47/8.68 28.47/8.68 private Set> entrySet0() { 28.47/8.68 Set> es = entrySet; 28.47/8.68 return es != null ? es : (entrySet = new EntrySet()); 28.47/8.68 } 28.47/8.68 28.47/8.68 private final class EntrySet extends AbstractSet> { 28.47/8.68 public Iterator> iterator() { 28.47/8.68 return newEntryIterator(); 28.47/8.68 } 28.47/8.68 public boolean contains(Object o) { 28.47/8.68 if (!(o instanceof Map.Entry)) 28.47/8.68 return false; 28.47/8.68 Map.Entry e = (Map.Entry) o; 28.47/8.68 Entry candidate = getEntry(e.getKey()); 28.47/8.68 return candidate != null && candidate.equals(e); 28.47/8.68 } 28.47/8.68 public boolean remove(Object o) { 28.47/8.68 return removeMapping(o) != null; 28.47/8.68 } 28.47/8.68 public int size() { 28.47/8.68 return size; 28.47/8.68 } 28.47/8.68 public void clear() { 28.47/8.68 HashMap.this.clear(); 28.47/8.68 } 28.47/8.68 public Object[] toArray() { 28.47/8.68 Object[] res = new Object[size]; 28.47/8.68 Iterator> it = iterator(); 28.47/8.68 int i = 0; 28.47/8.68 while (it.hasNext()) 28.47/8.68 res[i++] = it.next(); 28.47/8.68 return res; 28.47/8.68 } 28.47/8.68 public T[] toArray(T[] a) { 28.47/8.68 a = (T[])java.lang.reflect.Array.newInstance( 28.47/8.68 a.getClass().getComponentType(), size); 28.47/8.68 Object[] res = a; 28.47/8.68 Iterator> it = iterator(); 28.47/8.68 int i = 0; 28.47/8.68 while (it.hasNext()) 28.47/8.68 res[i++] = it.next(); 28.47/8.68 return a; 28.47/8.68 } 28.47/8.68 } 28.47/8.68 28.47/8.68 private static final long serialVersionUID = 362498820763181265L; 28.47/8.68 } 28.47/8.68 28.47/8.68 28.47/8.68 /* 28.47/8.68 * Copyright 1994-2003 Sun Microsystems, Inc. All Rights Reserved. 28.47/8.68 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 28.47/8.68 * 28.47/8.68 * This code is free software; you can redistribute it and/or modify it 28.47/8.68 * under the terms of the GNU General Public License version 2 only, as 28.47/8.68 * published by the Free Software Foundation. Sun designates this 28.47/8.68 * particular file as subject to the "Classpath" exception as provided 28.47/8.68 * by Sun in the LICENSE file that accompanied this code. 28.47/8.68 * 28.47/8.68 * This code is distributed in the hope that it will be useful, but WITHOUT 28.47/8.68 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 28.47/8.68 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 28.47/8.68 * version 2 for more details (a copy is included in the LICENSE file that 28.47/8.68 * accompanied this code). 28.47/8.68 * 28.47/8.68 * You should have received a copy of the GNU General Public License version 28.47/8.68 * 2 along with this work; if not, write to the Free Software Foundation, 28.47/8.68 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 28.47/8.68 * 28.47/8.68 * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, 28.47/8.68 * CA 95054 USA or visit www.sun.com if you need additional information or 28.47/8.68 * have any questions. 28.47/8.68 */ 28.47/8.68 28.47/8.68 package javaUtilEx; 28.47/8.68 28.47/8.68 /** 28.47/8.68 * Thrown to indicate that a method has been passed an illegal or 28.47/8.68 * inappropriate argument. 28.47/8.68 * 28.47/8.68 * @author unascribed 28.47/8.68 * @see java.lang.Thread#setPriority(int) 28.47/8.68 * @since JDK1.0 28.47/8.68 */ 28.47/8.68 public 28.47/8.68 class IllegalArgumentException extends RuntimeException { 28.47/8.68 /** 28.47/8.68 * Constructs an IllegalArgumentException with no 28.47/8.68 * detail message. 28.47/8.68 */ 28.47/8.68 public IllegalArgumentException() { 28.47/8.68 super(); 28.47/8.68 } 28.47/8.68 28.47/8.68 /** 28.47/8.68 * Constructs an IllegalArgumentException with the 28.47/8.68 * specified detail message. 28.47/8.68 * 28.47/8.68 * @param s the detail message. 28.47/8.68 */ 28.47/8.68 public IllegalArgumentException(String s) { 28.47/8.68 super(s); 28.47/8.68 } 28.47/8.68 28.47/8.68 /** 28.47/8.68 * Constructs a new exception with the specified detail message and 28.47/8.68 * cause. 28.47/8.68 * 28.47/8.68 *

Note that the detail message associated with cause is 28.47/8.68 * not automatically incorporated in this exception's detail 28.47/8.68 * message. 28.47/8.68 * 28.47/8.68 * @param message the detail message (which is saved for later retrieval 28.47/8.68 * by the {@link Throwable#getMessage()} method). 28.47/8.68 * @param cause the cause (which is saved for later retrieval by the 28.47/8.68 * {@link Throwable#getCause()} method). (A null value 28.47/8.68 * is permitted, and indicates that the cause is nonexistent or 28.47/8.68 * unknown.) 28.47/8.68 * @since 1.5 28.47/8.68 */ 28.47/8.68 public IllegalArgumentException(String message, Throwable cause) { 28.47/8.68 super(message, cause); 28.47/8.68 } 28.47/8.68 28.47/8.68 /** 28.47/8.68 * Constructs a new exception with the specified cause and a detail 28.47/8.68 * message of (cause==null ? null : cause.toString()) (which 28.47/8.68 * typically contains the class and detail message of cause). 28.47/8.68 * This constructor is useful for exceptions that are little more than 28.47/8.68 * wrappers for other throwables (for example, {@link 28.47/8.68 * java.security.PrivilegedActionException}). 28.47/8.68 * 28.47/8.68 * @param cause the cause (which is saved for later retrieval by the 28.47/8.68 * {@link Throwable#getCause()} method). (A null value is 28.47/8.68 * permitted, and indicates that the cause is nonexistent or 28.47/8.68 * unknown.) 28.47/8.68 * @since 1.5 28.47/8.68 */ 28.47/8.68 public IllegalArgumentException(Throwable cause) { 28.47/8.68 super(cause); 28.47/8.68 } 28.47/8.68 28.47/8.68 private static final long serialVersionUID = -5365630128856068164L; 28.47/8.68 } 28.47/8.68 28.47/8.68 28.47/8.68 /* 28.47/8.68 * Copyright 1996-2003 Sun Microsystems, Inc. All Rights Reserved. 28.47/8.68 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 28.47/8.68 * 28.47/8.68 * This code is free software; you can redistribute it and/or modify it 28.47/8.68 * under the terms of the GNU General Public License version 2 only, as 28.47/8.68 * published by the Free Software Foundation. Sun designates this 28.47/8.68 * particular file as subject to the "Classpath" exception as provided 28.47/8.68 * by Sun in the LICENSE file that accompanied this code. 28.47/8.68 * 28.47/8.68 * This code is distributed in the hope that it will be useful, but WITHOUT 28.47/8.68 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 28.47/8.68 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 28.47/8.68 * version 2 for more details (a copy is included in the LICENSE file that 28.47/8.68 * accompanied this code). 28.47/8.68 * 28.47/8.68 * You should have received a copy of the GNU General Public License version 28.47/8.68 * 2 along with this work; if not, write to the Free Software Foundation, 28.47/8.68 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 28.47/8.68 * 28.47/8.68 * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, 28.47/8.68 * CA 95054 USA or visit www.sun.com if you need additional information or 28.47/8.68 * have any questions. 28.47/8.68 */ 28.47/8.68 28.47/8.68 package javaUtilEx; 28.47/8.68 28.47/8.68 /** 28.47/8.68 * Signals that a method has been invoked at an illegal or 28.47/8.68 * inappropriate time. In other words, the Java environment or 28.47/8.68 * Java application is not in an appropriate state for the requested 28.47/8.68 * operation. 28.47/8.68 * 28.47/8.68 * @author Jonni Kanerva 28.47/8.68 * @since JDK1.1 28.47/8.68 */ 28.47/8.68 public 28.47/8.68 class IllegalStateException extends RuntimeException { 28.47/8.68 /** 28.47/8.68 * Constructs an IllegalStateException with no detail message. 28.47/8.68 * A detail message is a String that describes this particular exception. 28.47/8.68 */ 28.47/8.68 public IllegalStateException() { 28.47/8.68 super(); 28.47/8.68 } 28.47/8.68 28.47/8.68 /** 28.47/8.68 * Constructs an IllegalStateException with the specified detail 28.47/8.68 * message. A detail message is a String that describes this particular 28.47/8.68 * exception. 28.47/8.68 * 28.47/8.68 * @param s the String that contains a detailed message 28.47/8.68 */ 28.47/8.68 public IllegalStateException(String s) { 28.47/8.68 super(s); 28.47/8.68 } 28.47/8.68 28.47/8.68 /** 28.47/8.68 * Constructs a new exception with the specified detail message and 28.47/8.68 * cause. 28.47/8.68 * 28.47/8.68 *

Note that the detail message associated with cause is 28.47/8.68 * not automatically incorporated in this exception's detail 28.47/8.68 * message. 28.47/8.68 * 28.47/8.68 * @param message the detail message (which is saved for later retrieval 28.47/8.68 * by the {@link Throwable#getMessage()} method). 28.47/8.68 * @param cause the cause (which is saved for later retrieval by the 28.47/8.68 * {@link Throwable#getCause()} method). (A null value 28.47/8.68 * is permitted, and indicates that the cause is nonexistent or 28.47/8.68 * unknown.) 28.47/8.68 * @since 1.5 28.47/8.68 */ 28.47/8.68 public IllegalStateException(String message, Throwable cause) { 28.47/8.68 super(message, cause); 28.47/8.68 } 28.47/8.68 28.47/8.68 /** 28.47/8.68 * Constructs a new exception with the specified cause and a detail 28.47/8.68 * message of (cause==null ? null : cause.toString()) (which 28.47/8.68 * typically contains the class and detail message of cause). 28.47/8.68 * This constructor is useful for exceptions that are little more than 28.47/8.68 * wrappers for other throwables (for example, {@link 28.47/8.68 * java.security.PrivilegedActionException}). 28.47/8.68 * 28.47/8.68 * @param cause the cause (which is saved for later retrieval by the 28.47/8.68 * {@link Throwable#getCause()} method). (A null value is 28.47/8.68 * permitted, and indicates that the cause is nonexistent or 28.47/8.68 * unknown.) 28.47/8.68 * @since 1.5 28.47/8.68 */ 28.47/8.68 public IllegalStateException(Throwable cause) { 28.47/8.68 super(cause); 28.47/8.68 } 28.47/8.68 28.47/8.68 static final long serialVersionUID = -1848914673093119416L; 28.47/8.68 } 28.47/8.68 28.47/8.68 28.47/8.68 /* 28.47/8.68 * Copyright 1997-2006 Sun Microsystems, Inc. All Rights Reserved. 28.47/8.68 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 28.47/8.68 * 28.47/8.68 * This code is free software; you can redistribute it and/or modify it 28.47/8.68 * under the terms of the GNU General Public License version 2 only, as 28.47/8.68 * published by the Free Software Foundation. Sun designates this 28.47/8.68 * particular file as subject to the "Classpath" exception as provided 28.47/8.68 * by Sun in the LICENSE file that accompanied this code. 28.47/8.68 * 28.47/8.68 * This code is distributed in the hope that it will be useful, but WITHOUT 28.47/8.68 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 28.47/8.68 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 28.47/8.68 * version 2 for more details (a copy is included in the LICENSE file that 28.47/8.68 * accompanied this code). 28.47/8.68 * 28.47/8.68 * You should have received a copy of the GNU General Public License version 28.47/8.68 * 2 along with this work; if not, write to the Free Software Foundation, 28.47/8.68 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 28.47/8.68 * 28.47/8.68 * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, 28.47/8.68 * CA 95054 USA or visit www.sun.com if you need additional information or 28.47/8.68 * have any questions. 28.47/8.68 */ 28.47/8.68 28.47/8.68 package javaUtilEx; 28.47/8.68 28.47/8.68 /** 28.47/8.68 * An iterator over a collection. {@code Iterator} takes the place of 28.47/8.68 * {@link Enumeration} in the Java Collections Framework. Iterators 28.47/8.68 * differ from enumerations in two ways: 28.47/8.68 * 28.47/8.68 *

    28.47/8.68 *
  • Iterators allow the caller to remove elements from the 28.47/8.68 * underlying collection during the iteration with well-defined 28.47/8.68 * semantics. 28.47/8.68 *
  • Method names have been improved. 28.47/8.68 *
28.47/8.68 * 28.47/8.68 *

This interface is a member of the 28.47/8.68 * 28.47/8.68 * Java Collections Framework. 28.47/8.68 * 28.47/8.68 * @author Josh Bloch 28.47/8.68 * @see Collection 28.47/8.68 * @see ListIterator 28.47/8.68 * @see Iterable 28.47/8.68 * @since 1.2 28.47/8.68 */ 28.47/8.68 public interface Iterator { 28.47/8.68 /** 28.47/8.68 * Returns {@code true} if the iteration has more elements. 28.47/8.68 * (In other words, returns {@code true} if {@link #next} would 28.47/8.68 * return an element rather than throwing an exception.) 28.47/8.68 * 28.47/8.68 * @return {@code true} if the iteration has more elements 28.47/8.68 */ 28.47/8.68 boolean hasNext(); 28.47/8.68 28.47/8.68 /** 28.47/8.68 * Returns the next element in the iteration. 28.47/8.68 * 28.47/8.68 * @return the next element in the iteration 28.47/8.68 * @throws NoSuchElementException if the iteration has no more elements 28.47/8.68 */ 28.47/8.68 E next(); 28.47/8.68 28.47/8.68 /** 28.47/8.68 * Removes from the underlying collection the last element returned 28.47/8.68 * by this iterator (optional operation). This method can be called 28.47/8.68 * only once per call to {@link #next}. The behavior of an iterator 28.47/8.68 * is unspecified if the underlying collection is modified while the 28.47/8.68 * iteration is in progress in any way other than by calling this 28.47/8.68 * method. 28.47/8.68 * 28.47/8.68 * @throws UnsupportedOperationException if the {@code remove} 28.47/8.68 * operation is not supported by this iterator 28.47/8.68 * 28.47/8.68 * @throws IllegalStateException if the {@code next} method has not 28.47/8.68 * yet been called, or the {@code remove} method has already 28.47/8.68 * been called after the last call to the {@code next} 28.47/8.68 * method 28.47/8.68 */ 28.47/8.68 void remove(); 28.47/8.68 } 28.47/8.68 28.47/8.68 28.47/8.68 package javaUtilEx; 28.47/8.68 28.47/8.68 public class juHashMapCreateIteratorKeyLoop { 28.47/8.68 public static void main(String[] args) { 28.47/8.68 Random.args = args; 28.47/8.68 28.47/8.68 HashMap m = createMap(Random.random()); 28.47/8.68 28.47/8.68 Iterator it = m.keySet().iterator(); 28.47/8.68 while (it.hasNext()) { 28.47/8.68 it.next(); 28.47/8.68 } 28.47/8.68 } 28.47/8.68 28.47/8.68 public static HashMap createMap(int n) { 28.47/8.68 HashMap m = new HashMap(); 28.47/8.68 while (n > 0) { 28.47/8.68 Content key = new Content(Random.random()); 28.47/8.68 Content val = new Content(Random.random()); 28.47/8.68 m.put(key, val); 28.47/8.68 n--; 28.47/8.68 } 28.47/8.68 return m; 28.47/8.68 } 28.47/8.68 } 28.47/8.68 28.47/8.68 final class Content { 28.47/8.68 int val; 28.47/8.68 28.47/8.68 public Content(int v) { 28.47/8.68 this.val = v; 28.47/8.68 } 28.47/8.68 28.47/8.68 public int hashCode() { 28.47/8.68 return val^31; 28.47/8.68 } 28.47/8.68 28.47/8.68 public boolean equals(Object o) { 28.47/8.68 if (o instanceof Content) { 28.47/8.68 return this.val == ((Content) o).val; 28.47/8.68 } 28.47/8.68 return false; 28.47/8.68 } 28.47/8.68 } 28.47/8.68 28.47/8.68 28.47/8.68 /* 28.47/8.68 * Copyright 1997-2006 Sun Microsystems, Inc. All Rights Reserved. 28.47/8.68 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 28.47/8.68 * 28.47/8.68 * This code is free software; you can redistribute it and/or modify it 28.47/8.68 * under the terms of the GNU General Public License version 2 only, as 28.47/8.68 * published by the Free Software Foundation. Sun designates this 28.47/8.68 * particular file as subject to the "Classpath" exception as provided 28.47/8.68 * by Sun in the LICENSE file that accompanied this code. 28.47/8.68 * 28.47/8.68 * This code is distributed in the hope that it will be useful, but WITHOUT 28.47/8.68 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 28.47/8.68 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 28.47/8.68 * version 2 for more details (a copy is included in the LICENSE file that 28.47/8.68 * accompanied this code). 28.47/8.68 * 28.47/8.68 * You should have received a copy of the GNU General Public License version 28.47/8.68 * 2 along with this work; if not, write to the Free Software Foundation, 28.47/8.68 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 28.47/8.68 * 28.47/8.68 * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, 28.47/8.68 * CA 95054 USA or visit www.sun.com if you need additional information or 28.47/8.68 * have any questions. 28.47/8.68 */ 28.47/8.68 28.47/8.68 package javaUtilEx; 28.47/8.68 28.47/8.68 /** 28.47/8.68 * An object that maps keys to values. A map cannot contain duplicate keys; 28.47/8.68 * each key can map to at most one value. 28.47/8.68 * 28.47/8.68 *

This interface takes the place of the Dictionary class, which 28.47/8.68 * was a totally abstract class rather than an interface. 28.47/8.68 * 28.47/8.68 *

The Map interface provides three collection views, which 28.47/8.68 * allow a map's contents to be viewed as a set of keys, collection of values, 28.47/8.68 * or set of key-value mappings. The order of a map is defined as 28.47/8.68 * the order in which the iterators on the map's collection views return their 28.47/8.68 * elements. Some map implementations, like the TreeMap class, make 28.47/8.68 * specific guarantees as to their order; others, like the HashMap 28.47/8.68 * class, do not. 28.47/8.68 * 28.47/8.68 *

Note: great care must be exercised if mutable objects are used as map 28.47/8.68 * keys. The behavior of a map is not specified if the value of an object is 28.47/8.68 * changed in a manner that affects equals comparisons while the 28.47/8.68 * object is a key in the map. A special case of this prohibition is that it 28.47/8.68 * is not permissible for a map to contain itself as a key. While it is 28.47/8.68 * permissible for a map to contain itself as a value, extreme caution is 28.47/8.68 * advised: the equals and hashCode methods are no longer 28.47/8.68 * well defined on such a map. 28.47/8.68 * 28.47/8.68 *

All general-purpose map implementation classes should provide two 28.47/8.68 * "standard" constructors: a void (no arguments) constructor which creates an 28.47/8.68 * empty map, and a constructor with a single argument of type Map, 28.47/8.68 * which creates a new map with the same key-value mappings as its argument. 28.47/8.68 * In effect, the latter constructor allows the user to copy any map, 28.47/8.68 * producing an equivalent map of the desired class. There is no way to 28.47/8.68 * enforce this recommendation (as interfaces cannot contain constructors) but 28.47/8.68 * all of the general-purpose map implementations in the JDK comply. 28.47/8.68 * 28.47/8.68 *

The "destructive" methods contained in this interface, that is, the 28.47/8.68 * methods that modify the map on which they operate, are specified to throw 28.47/8.68 * UnsupportedOperationException if this map does not support the 28.47/8.68 * operation. If this is the case, these methods may, but are not required 28.47/8.68 * to, throw an UnsupportedOperationException if the invocation would 28.47/8.68 * have no effect on the map. For example, invoking the {@link #putAll(Map)} 28.47/8.68 * method on an unmodifiable map may, but is not required to, throw the 28.47/8.68 * exception if the map whose mappings are to be "superimposed" is empty. 28.47/8.68 * 28.47/8.68 *

Some map implementations have restrictions on the keys and values they 28.47/8.68 * may contain. For example, some implementations prohibit null keys and 28.47/8.68 * values, and some have restrictions on the types of their keys. Attempting 28.47/8.68 * to insert an ineligible key or value throws an unchecked exception, 28.47/8.68 * typically NullPointerException or ClassCastException. 28.47/8.68 * Attempting to query the presence of an ineligible key or value may throw an 28.47/8.68 * exception, or it may simply return false; some implementations will exhibit 28.47/8.68 * the former behavior and some will exhibit the latter. More generally, 28.47/8.68 * attempting an operation on an ineligible key or value whose completion 28.47/8.68 * would not result in the insertion of an ineligible element into the map may 28.47/8.68 * throw an exception or it may succeed, at the option of the implementation. 28.47/8.68 * Such exceptions are marked as "optional" in the specification for this 28.47/8.68 * interface. 28.47/8.68 * 28.47/8.68 *

This interface is a member of the 28.47/8.68 * 28.47/8.68 * Java Collections Framework. 28.47/8.68 * 28.47/8.68 *

Many methods in Collections Framework interfaces are defined 28.47/8.68 * in terms of the {@link Object#equals(Object) equals} method. For 28.47/8.68 * example, the specification for the {@link #containsKey(Object) 28.47/8.68 * containsKey(Object key)} method says: "returns true if and 28.47/8.68 * only if this map contains a mapping for a key k such that 28.47/8.68 * (key==null ? k==null : key.equals(k))." This specification should 28.47/8.68 * not be construed to imply that invoking Map.containsKey 28.47/8.68 * with a non-null argument key will cause key.equals(k) to 28.47/8.68 * be invoked for any key k. Implementations are free to 28.47/8.68 * implement optimizations whereby the equals invocation is avoided, 28.47/8.68 * for example, by first comparing the hash codes of the two keys. (The 28.47/8.68 * {@link Object#hashCode()} specification guarantees that two objects with 28.47/8.68 * unequal hash codes cannot be equal.) More generally, implementations of 28.47/8.68 * the various Collections Framework interfaces are free to take advantage of 28.47/8.68 * the specified behavior of underlying {@link Object} methods wherever the 28.47/8.68 * implementor deems it appropriate. 28.47/8.68 * 28.47/8.68 * @param the type of keys maintained by this map 28.47/8.68 * @param the type of mapped values 28.47/8.68 * 28.47/8.68 * @author Josh Bloch 28.47/8.68 * @see HashMap 28.47/8.68 * @see TreeMap 28.47/8.68 * @see Hashtable 28.47/8.68 * @see SortedMap 28.47/8.68 * @see Collection 28.47/8.68 * @see Set 28.47/8.68 * @since 1.2 28.47/8.68 */ 28.47/8.68 public interface Map { 28.47/8.68 // Query Operations 28.47/8.68 28.47/8.68 /** 28.47/8.68 * Returns the number of key-value mappings in this map. If the 28.47/8.68 * map contains more than Integer.MAX_VALUE elements, returns 28.47/8.68 * Integer.MAX_VALUE. 28.47/8.68 * 28.47/8.68 * @return the number of key-value mappings in this map 28.47/8.68 */ 28.47/8.68 int size(); 28.47/8.68 28.47/8.68 /** 28.47/8.68 * Returns true if this map contains no key-value mappings. 28.47/8.68 * 28.47/8.68 * @return true if this map contains no key-value mappings 28.47/8.68 */ 28.47/8.68 boolean isEmpty(); 28.47/8.68 28.47/8.68 /** 28.47/8.68 * Returns true if this map contains a mapping for the specified 28.47/8.68 * key. More formally, returns true if and only if 28.47/8.68 * this map contains a mapping for a key k such that 28.47/8.68 * (key==null ? k==null : key.equals(k)). (There can be 28.47/8.68 * at most one such mapping.) 28.47/8.68 * 28.47/8.68 * @param key key whose presence in this map is to be tested 28.47/8.68 * @return true if this map contains a mapping for the specified 28.47/8.68 * key 28.47/8.68 * @throws ClassCastException if the key is of an inappropriate type for 28.47/8.68 * this map (optional) 28.47/8.68 * @throws NullPointerException if the specified key is null and this map 28.47/8.68 * does not permit null keys (optional) 28.47/8.68 */ 28.47/8.68 boolean containsKey(Object key); 28.47/8.68 28.47/8.68 /** 28.47/8.68 * Returns true if this map maps one or more keys to the 28.47/8.68 * specified value. More formally, returns true if and only if 28.47/8.68 * this map contains at least one mapping to a value v such that 28.47/8.68 * (value==null ? v==null : value.equals(v)). This operation 28.47/8.68 * will probably require time linear in the map size for most 28.47/8.68 * implementations of the Map interface. 28.47/8.68 * 28.47/8.68 * @param value value whose presence in this map is to be tested 28.47/8.68 * @return true if this map maps one or more keys to the 28.47/8.68 * specified value 28.47/8.68 * @throws ClassCastException if the value is of an inappropriate type for 28.47/8.68 * this map (optional) 28.47/8.68 * @throws NullPointerException if the specified value is null and this 28.47/8.68 * map does not permit null values (optional) 28.47/8.68 */ 28.47/8.68 boolean containsValue(Object value); 28.47/8.68 28.47/8.68 /** 28.47/8.68 * Returns the value to which the specified key is mapped, 28.47/8.68 * or {@code null} if this map contains no mapping for the key. 28.47/8.68 * 28.47/8.68 *

More formally, if this map contains a mapping from a key 28.47/8.68 * {@code k} to a value {@code v} such that {@code (key==null ? k==null : 28.47/8.68 * key.equals(k))}, then this method returns {@code v}; otherwise 28.47/8.68 * it returns {@code null}. (There can be at most one such mapping.) 28.47/8.68 * 28.47/8.68 *

If this map permits null values, then a return value of 28.47/8.68 * {@code null} does not necessarily indicate that the map 28.47/8.68 * contains no mapping for the key; it's also possible that the map 28.47/8.68 * explicitly maps the key to {@code null}. The {@link #containsKey 28.47/8.68 * containsKey} operation may be used to distinguish these two cases. 28.47/8.68 * 28.47/8.68 * @param key the key whose associated value is to be returned 28.47/8.68 * @return the value to which the specified key is mapped, or 28.47/8.68 * {@code null} if this map contains no mapping for the key 28.47/8.68 * @throws ClassCastException if the key is of an inappropriate type for 28.47/8.68 * this map (optional) 28.47/8.68 * @throws NullPointerException if the specified key is null and this map 28.47/8.68 * does not permit null keys (optional) 28.47/8.68 */ 28.47/8.68 V get(Object key); 28.47/8.68 28.47/8.68 // Modification Operations 28.47/8.68 28.47/8.68 /** 28.47/8.68 * Associates the specified value with the specified key in this map 28.47/8.68 * (optional operation). If the map previously contained a mapping for 28.47/8.68 * the key, the old value is replaced by the specified value. (A map 28.47/8.68 * m is said to contain a mapping for a key k if and only 28.47/8.68 * if {@link #containsKey(Object) m.containsKey(k)} would return 28.47/8.68 * true.) 28.47/8.68 * 28.47/8.68 * @param key key with which the specified value is to be associated 28.47/8.68 * @param value value to be associated with the specified key 28.47/8.68 * @return the previous value associated with key, or 28.47/8.68 * null if there was no mapping for key. 28.47/8.68 * (A null return can also indicate that the map 28.47/8.68 * previously associated null with key, 28.47/8.68 * if the implementation supports null values.) 28.68/8.68 * @throws UnsupportedOperationException if the put operation 28.68/8.68 * is not supported by this map 28.68/8.68 * @throws ClassCastException if the class of the specified key or value 28.68/8.68 * prevents it from being stored in this map 28.68/8.68 * @throws NullPointerException if the specified key or value is null 28.68/8.68 * and this map does not permit null keys or values 28.68/8.68 * @throws IllegalArgumentException if some property of the specified key 28.68/8.68 * or value prevents it from being stored in this map 28.68/8.68 */ 28.68/8.68 V put(K key, V value); 28.68/8.68 28.68/8.68 /** 28.68/8.68 * Removes the mapping for a key from this map if it is present 28.68/8.68 * (optional operation). More formally, if this map contains a mapping 28.68/8.68 * from key k to value v such that 28.68/8.68 * (key==null ? k==null : key.equals(k)), that mapping 28.68/8.68 * is removed. (The map can contain at most one such mapping.) 28.68/8.68 * 28.68/8.68 *

Returns the value to which this map previously associated the key, 28.68/8.68 * or null if the map contained no mapping for the key. 28.68/8.68 * 28.68/8.68 *

If this map permits null values, then a return value of 28.68/8.68 * null does not necessarily indicate that the map 28.68/8.68 * contained no mapping for the key; it's also possible that the map 28.68/8.68 * explicitly mapped the key to null. 28.68/8.68 * 28.68/8.68 *

The map will not contain a mapping for the specified key once the 28.68/8.68 * call returns. 28.68/8.68 * 28.68/8.68 * @param key key whose mapping is to be removed from the map 28.68/8.68 * @return the previous value associated with key, or 28.68/8.68 * null if there was no mapping for key. 28.68/8.68 * @throws UnsupportedOperationException if the remove operation 28.68/8.68 * is not supported by this map 28.68/8.68 * @throws ClassCastException if the key is of an inappropriate type for 28.68/8.68 * this map (optional) 28.68/8.68 * @throws NullPointerException if the specified key is null and this 28.68/8.68 * map does not permit null keys (optional) 28.68/8.68 */ 28.68/8.68 V remove(Object key); 28.68/8.68 28.68/8.68 28.68/8.68 // Bulk Operations 28.68/8.68 28.68/8.68 /** 28.68/8.68 * Copies all of the mappings from the specified map to this map 28.68/8.68 * (optional operation). The effect of this call is equivalent to that 28.68/8.68 * of calling {@link #put(Object,Object) put(k, v)} on this map once 28.68/8.68 * for each mapping from key k to value v in the 28.68/8.68 * specified map. The behavior of this operation is undefined if the 28.68/8.68 * specified map is modified while the operation is in progress. 28.68/8.68 * 28.68/8.68 * @param m mappings to be stored in this map 28.68/8.68 * @throws UnsupportedOperationException if the putAll operation 28.68/8.68 * is not supported by this map 28.68/8.68 * @throws ClassCastException if the class of a key or value in the 28.68/8.68 * specified map prevents it from being stored in this map 28.68/8.68 * @throws NullPointerException if the specified map is null, or if 28.68/8.68 * this map does not permit null keys or values, and the 28.68/8.68 * specified map contains null keys or values 28.68/8.68 * @throws IllegalArgumentException if some property of a key or value in 28.68/8.68 * the specified map prevents it from being stored in this map 28.68/8.68 */ 28.68/8.68 void putAll(Map m); 28.68/8.68 28.68/8.68 /** 28.68/8.68 * Removes all of the mappings from this map (optional operation). 28.68/8.68 * The map will be empty after this call returns. 28.68/8.68 * 28.68/8.68 * @throws UnsupportedOperationException if the clear operation 28.68/8.68 * is not supported by this map 28.68/8.68 */ 28.68/8.68 void clear(); 28.68/8.68 28.68/8.68 28.68/8.68 // Views 28.68/8.68 28.68/8.68 /** 28.68/8.68 * Returns a {@link Set} view of the keys contained in this map. 28.68/8.68 * The set is backed by the map, so changes to the map are 28.68/8.68 * reflected in the set, and vice-versa. If the map is modified 28.68/8.68 * while an iteration over the set is in progress (except through 28.68/8.68 * the iterator's own remove operation), the results of 28.68/8.68 * the iteration are undefined. The set supports element removal, 28.68/8.68 * which removes the corresponding mapping from the map, via the 28.68/8.68 * Iterator.remove, Set.remove, 28.68/8.68 * removeAll, retainAll, and clear 28.68/8.68 * operations. It does not support the add or addAll 28.68/8.68 * operations. 28.68/8.68 * 28.68/8.68 * @return a set view of the keys contained in this map 28.68/8.68 */ 28.68/8.68 Set keySet(); 28.68/8.68 28.68/8.68 /** 28.68/8.68 * Returns a {@link Collection} view of the values contained in this map. 28.68/8.68 * The collection is backed by the map, so changes to the map are 28.68/8.68 * reflected in the collection, and vice-versa. If the map is 28.68/8.68 * modified while an iteration over the collection is in progress 28.68/8.68 * (except through the iterator's own remove operation), 28.68/8.68 * the results of the iteration are undefined. The collection 28.68/8.68 * supports element removal, which removes the corresponding 28.68/8.68 * mapping from the map, via the Iterator.remove, 28.68/8.68 * Collection.remove, removeAll, 28.68/8.68 * retainAll and clear operations. It does not 28.68/8.68 * support the add or addAll operations. 28.68/8.68 * 28.68/8.68 * @return a collection view of the values contained in this map 28.68/8.68 */ 28.68/8.68 Collection values(); 28.68/8.68 28.68/8.68 /** 28.68/8.68 * Returns a {@link Set} view of the mappings contained in this map. 28.68/8.68 * The set is backed by the map, so changes to the map are 28.68/8.68 * reflected in the set, and vice-versa. If the map is modified 28.68/8.68 * while an iteration over the set is in progress (except through 28.68/8.68 * the iterator's own remove operation, or through the 28.68/8.68 * setValue operation on a map entry returned by the 28.68/8.68 * iterator) the results of the iteration are undefined. The set 28.68/8.68 * supports element removal, which removes the corresponding 28.68/8.68 * mapping from the map, via the Iterator.remove, 28.68/8.68 * Set.remove, removeAll, retainAll and 28.68/8.68 * clear operations. It does not support the 28.68/8.68 * add or addAll operations. 28.68/8.68 * 28.68/8.68 * @return a set view of the mappings contained in this map 28.68/8.68 */ 28.68/8.68 Set> entrySet(); 28.68/8.68 28.68/8.68 /** 28.68/8.68 * A map entry (key-value pair). The Map.entrySet method returns 28.68/8.68 * a collection-view of the map, whose elements are of this class. The 28.68/8.68 * only way to obtain a reference to a map entry is from the 28.68/8.68 * iterator of this collection-view. These Map.Entry objects are 28.68/8.68 * valid only for the duration of the iteration; more formally, 28.68/8.68 * the behavior of a map entry is undefined if the backing map has been 28.68/8.68 * modified after the entry was returned by the iterator, except through 28.68/8.68 * the setValue operation on the map entry. 28.68/8.68 * 28.68/8.68 * @see Map#entrySet() 28.68/8.68 * @since 1.2 28.68/8.68 */ 28.68/8.68 interface Entry { 28.68/8.68 /** 28.68/8.68 * Returns the key corresponding to this entry. 28.68/8.68 * 28.68/8.68 * @return the key corresponding to this entry 28.68/8.68 * @throws IllegalStateException implementations may, but are not 28.68/8.68 * required to, throw this exception if the entry has been 28.68/8.68 * removed from the backing map. 28.68/8.68 */ 28.68/8.68 K getKey(); 28.68/8.68 28.68/8.68 /** 28.68/8.68 * Returns the value corresponding to this entry. If the mapping 28.68/8.68 * has been removed from the backing map (by the iterator's 28.68/8.68 * remove operation), the results of this call are undefined. 28.68/8.68 * 28.68/8.68 * @return the value corresponding to this entry 28.68/8.68 * @throws IllegalStateException implementations may, but are not 28.68/8.68 * required to, throw this exception if the entry has been 28.68/8.68 * removed from the backing map. 28.68/8.68 */ 28.68/8.68 V getValue(); 28.68/8.68 28.68/8.68 /** 28.68/8.68 * Replaces the value corresponding to this entry with the specified 28.68/8.68 * value (optional operation). (Writes through to the map.) The 28.68/8.68 * behavior of this call is undefined if the mapping has already been 28.68/8.68 * removed from the map (by the iterator's remove operation). 28.68/8.68 * 28.68/8.68 * @param value new value to be stored in this entry 28.68/8.68 * @return old value corresponding to the entry 28.68/8.68 * @throws UnsupportedOperationException if the put operation 28.68/8.68 * is not supported by the backing map 28.68/8.68 * @throws ClassCastException if the class of the specified value 28.68/8.68 * prevents it from being stored in the backing map 28.68/8.68 * @throws NullPointerException if the backing map does not permit 28.68/8.68 * null values, and the specified value is null 28.68/8.68 * @throws IllegalArgumentException if some property of this value 28.68/8.68 * prevents it from being stored in the backing map 28.68/8.68 * @throws IllegalStateException implementations may, but are not 28.68/8.68 * required to, throw this exception if the entry has been 28.68/8.68 * removed from the backing map. 28.68/8.68 */ 28.68/8.68 V setValue(V value); 28.68/8.68 28.68/8.68 /** 28.68/8.68 * Compares the specified object with this entry for equality. 28.68/8.68 * Returns true if the given object is also a map entry and 28.68/8.68 * the two entries represent the same mapping. More formally, two 28.68/8.68 * entries e1 and e2 represent the same mapping 28.68/8.68 * if

28.68/8.68	         *     (e1.getKey()==null ?
28.68/8.68	         *      e2.getKey()==null : e1.getKey().equals(e2.getKey()))  &&
28.68/8.68	         *     (e1.getValue()==null ?
28.68/8.68	         *      e2.getValue()==null : e1.getValue().equals(e2.getValue()))
28.68/8.68	         * 
28.68/8.68 * This ensures that the equals method works properly across 28.68/8.68 * different implementations of the Map.Entry interface. 28.68/8.68 * 28.68/8.68 * @param o object to be compared for equality with this map entry 28.68/8.68 * @return true if the specified object is equal to this map 28.68/8.68 * entry 28.68/8.68 */ 28.68/8.68 boolean equals(Object o); 28.68/8.68 28.68/8.68 /** 28.68/8.68 * Returns the hash code value for this map entry. The hash code 28.68/8.68 * of a map entry e is defined to be:
28.68/8.68	         *     (e.getKey()==null   ? 0 : e.getKey().hashCode()) ^
28.68/8.68	         *     (e.getValue()==null ? 0 : e.getValue().hashCode())
28.68/8.68	         * 
28.68/8.68 * This ensures that e1.equals(e2) implies that 28.68/8.68 * e1.hashCode()==e2.hashCode() for any two Entries 28.68/8.68 * e1 and e2, as required by the general 28.68/8.68 * contract of Object.hashCode. 28.68/8.68 * 28.68/8.68 * @return the hash code value for this map entry 28.68/8.68 * @see Object#hashCode() 28.68/8.68 * @see Object#equals(Object) 28.68/8.68 * @see #equals(Object) 28.68/8.68 */ 28.68/8.68 int hashCode(); 28.68/8.68 } 28.68/8.68 28.68/8.68 // Comparison and hashing 28.68/8.68 28.68/8.68 /** 28.68/8.68 * Compares the specified object with this map for equality. Returns 28.68/8.68 * true if the given object is also a map and the two maps 28.68/8.68 * represent the same mappings. More formally, two maps m1 and 28.68/8.68 * m2 represent the same mappings if 28.68/8.68 * m1.entrySet().equals(m2.entrySet()). This ensures that the 28.68/8.68 * equals method works properly across different implementations 28.68/8.68 * of the Map interface. 28.68/8.68 * 28.68/8.68 * @param o object to be compared for equality with this map 28.68/8.68 * @return true if the specified object is equal to this map 28.68/8.68 */ 28.68/8.68 boolean equals(Object o); 28.68/8.68 28.68/8.68 /** 28.68/8.68 * Returns the hash code value for this map. The hash code of a map is 28.68/8.68 * defined to be the sum of the hash codes of each entry in the map's 28.68/8.68 * entrySet() view. This ensures that m1.equals(m2) 28.68/8.68 * implies that m1.hashCode()==m2.hashCode() for any two maps 28.68/8.68 * m1 and m2, as required by the general contract of 28.68/8.68 * {@link Object#hashCode}. 28.68/8.68 * 28.68/8.68 * @return the hash code value for this map 28.68/8.68 * @see Map.Entry#hashCode() 28.68/8.68 * @see Object#equals(Object) 28.68/8.68 * @see #equals(Object) 28.68/8.68 */ 28.68/8.68 int hashCode(); 28.68/8.68 } 28.68/8.68 28.68/8.68 28.68/8.68 /* 28.68/8.68 * Copyright 1994-1998 Sun Microsystems, Inc. All Rights Reserved. 28.68/8.68 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 28.68/8.68 * 28.68/8.68 * This code is free software; you can redistribute it and/or modify it 28.68/8.68 * under the terms of the GNU General Public License version 2 only, as 28.68/8.68 * published by the Free Software Foundation. Sun designates this 28.68/8.68 * particular file as subject to the "Classpath" exception as provided 28.68/8.68 * by Sun in the LICENSE file that accompanied this code. 28.68/8.68 * 28.68/8.68 * This code is distributed in the hope that it will be useful, but WITHOUT 28.68/8.68 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 28.68/8.68 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 28.68/8.68 * version 2 for more details (a copy is included in the LICENSE file that 28.68/8.68 * accompanied this code). 28.68/8.68 * 28.68/8.68 * You should have received a copy of the GNU General Public License version 28.68/8.68 * 2 along with this work; if not, write to the Free Software Foundation, 28.68/8.68 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 28.68/8.68 * 28.68/8.68 * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, 28.68/8.68 * CA 95054 USA or visit www.sun.com if you need additional information or 28.68/8.68 * have any questions. 28.68/8.68 */ 28.68/8.68 28.68/8.68 package javaUtilEx; 28.68/8.68 28.68/8.68 /** 28.68/8.68 * Thrown by the nextElement method of an 28.68/8.68 * Enumeration to indicate that there are no more 28.68/8.68 * elements in the enumeration. 28.68/8.68 * 28.68/8.68 * @author unascribed 28.68/8.68 * @see java.util.Enumeration 28.68/8.68 * @see java.util.Enumeration#nextElement() 28.68/8.68 * @since JDK1.0 28.68/8.68 */ 28.68/8.68 public 28.68/8.68 class NoSuchElementException extends RuntimeException { 28.68/8.68 /** 28.68/8.68 * Constructs a NoSuchElementException with null 28.68/8.68 * as its error message string. 28.68/8.68 */ 28.68/8.68 public NoSuchElementException() { 28.68/8.68 super(); 28.68/8.68 } 28.68/8.68 28.68/8.68 /** 28.68/8.68 * Constructs a NoSuchElementException, saving a reference 28.68/8.68 * to the error message string s for later retrieval by the 28.68/8.68 * getMessage method. 28.68/8.68 * 28.68/8.68 * @param s the detail message. 28.68/8.68 */ 28.68/8.68 public NoSuchElementException(String s) { 28.68/8.68 super(s); 28.68/8.68 } 28.68/8.68 } 28.68/8.68 28.68/8.68 28.68/8.68 package javaUtilEx; 28.68/8.68 28.68/8.68 public class Random { 28.68/8.68 static String[] args; 28.68/8.68 static int index = 0; 28.68/8.68 28.68/8.68 public static int random() { 28.68/8.68 String string = args[index]; 28.68/8.68 index++; 28.68/8.68 return string.length(); 28.68/8.68 } 28.68/8.68 } 28.68/8.68 28.68/8.68 28.68/8.68 /* 28.68/8.68 * Copyright 1997-2006 Sun Microsystems, Inc. All Rights Reserved. 28.68/8.68 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 28.68/8.68 * 28.68/8.68 * This code is free software; you can redistribute it and/or modify it 28.68/8.68 * under the terms of the GNU General Public License version 2 only, as 28.68/8.68 * published by the Free Software Foundation. Sun designates this 28.68/8.68 * particular file as subject to the "Classpath" exception as provided 28.68/8.68 * by Sun in the LICENSE file that accompanied this code. 28.68/8.68 * 28.68/8.68 * This code is distributed in the hope that it will be useful, but WITHOUT 28.68/8.68 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 28.68/8.68 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 28.68/8.68 * version 2 for more details (a copy is included in the LICENSE file that 28.68/8.68 * accompanied this code). 28.68/8.68 * 28.68/8.68 * You should have received a copy of the GNU General Public License version 28.68/8.68 * 2 along with this work; if not, write to the Free Software Foundation, 28.68/8.68 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 28.68/8.68 * 28.68/8.68 * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, 28.68/8.68 * CA 95054 USA or visit www.sun.com if you need additional information or 28.68/8.68 * have any questions. 28.68/8.68 */ 28.68/8.68 28.68/8.68 package javaUtilEx; 28.68/8.68 28.68/8.68 /** 28.68/8.68 * A collection that contains no duplicate elements. More formally, sets 28.68/8.68 * contain no pair of elements e1 and e2 such that 28.68/8.68 * e1.equals(e2), and at most one null element. As implied by 28.68/8.68 * its name, this interface models the mathematical set abstraction. 28.68/8.68 * 28.68/8.68 *

The Set interface places additional stipulations, beyond those 28.68/8.68 * inherited from the Collection interface, on the contracts of all 28.68/8.68 * constructors and on the contracts of the add, equals and 28.68/8.68 * hashCode methods. Declarations for other inherited methods are 28.68/8.68 * also included here for convenience. (The specifications accompanying these 28.68/8.68 * declarations have been tailored to the Set interface, but they do 28.68/8.68 * not contain any additional stipulations.) 28.68/8.68 * 28.68/8.68 *

The additional stipulation on constructors is, not surprisingly, 28.68/8.68 * that all constructors must create a set that contains no duplicate elements 28.68/8.68 * (as defined above). 28.68/8.68 * 28.68/8.68 *

Note: Great care must be exercised if mutable objects are used as set 28.68/8.68 * elements. The behavior of a set is not specified if the value of an object 28.68/8.68 * is changed in a manner that affects equals comparisons while the 28.68/8.68 * object is an element in the set. A special case of this prohibition is 28.68/8.68 * that it is not permissible for a set to contain itself as an element. 28.68/8.68 * 28.68/8.68 *

Some set implementations have restrictions on the elements that 28.68/8.68 * they may contain. For example, some implementations prohibit null elements, 28.68/8.68 * and some have restrictions on the types of their elements. Attempting to 28.68/8.68 * add an ineligible element throws an unchecked exception, typically 28.68/8.68 * NullPointerException or ClassCastException. Attempting 28.68/8.68 * to query the presence of an ineligible element may throw an exception, 28.68/8.68 * or it may simply return false; some implementations will exhibit the former 28.68/8.68 * behavior and some will exhibit the latter. More generally, attempting an 28.68/8.68 * operation on an ineligible element whose completion would not result in 28.68/8.68 * the insertion of an ineligible element into the set may throw an 28.68/8.68 * exception or it may succeed, at the option of the implementation. 28.68/8.68 * Such exceptions are marked as "optional" in the specification for this 28.68/8.68 * interface. 28.68/8.68 * 28.68/8.68 *

This interface is a member of the 28.68/8.68 * 28.68/8.68 * Java Collections Framework. 28.68/8.68 * 28.68/8.68 * @param the type of elements maintained by this set 28.68/8.68 * 28.68/8.68 * @author Josh Bloch 28.68/8.68 * @author Neal Gafter 28.68/8.68 * @see Collection 28.68/8.68 * @see List 28.68/8.68 * @see SortedSet 28.68/8.68 * @see HashSet 28.68/8.68 * @see TreeSet 28.68/8.68 * @see AbstractSet 28.68/8.68 * @see Collections#singleton(java.lang.Object) 28.68/8.68 * @see Collections#EMPTY_SET 28.68/8.68 * @since 1.2 28.68/8.68 */ 28.68/8.68 28.68/8.68 public interface Set extends Collection { 28.68/8.68 // Query Operations 28.68/8.68 28.68/8.68 /** 28.68/8.68 * Returns the number of elements in this set (its cardinality). If this 28.68/8.68 * set contains more than Integer.MAX_VALUE elements, returns 28.68/8.68 * Integer.MAX_VALUE. 28.68/8.68 * 28.68/8.68 * @return the number of elements in this set (its cardinality) 28.68/8.68 */ 28.68/8.68 int size(); 28.68/8.68 28.68/8.68 /** 28.68/8.68 * Returns true if this set contains no elements. 28.68/8.68 * 28.68/8.68 * @return true if this set contains no elements 28.68/8.68 */ 28.68/8.68 boolean isEmpty(); 28.68/8.68 28.68/8.68 /** 28.68/8.68 * Returns true if this set contains the specified element. 28.68/8.68 * More formally, returns true if and only if this set 28.68/8.68 * contains an element e such that 28.68/8.68 * (o==null ? e==null : o.equals(e)). 28.68/8.68 * 28.68/8.68 * @param o element whose presence in this set is to be tested 28.68/8.68 * @return true if this set contains the specified element 28.68/8.68 * @throws ClassCastException if the type of the specified element 28.68/8.68 * is incompatible with this set (optional) 28.68/8.68 * @throws NullPointerException if the specified element is null and this 28.68/8.68 * set does not permit null elements (optional) 28.68/8.68 */ 28.68/8.68 boolean contains(Object o); 28.68/8.68 28.68/8.68 /** 28.68/8.68 * Returns an iterator over the elements in this set. The elements are 28.68/8.68 * returned in no particular order (unless this set is an instance of some 28.68/8.68 * class that provides a guarantee). 28.68/8.68 * 28.68/8.68 * @return an iterator over the elements in this set 28.68/8.68 */ 28.68/8.68 Iterator iterator(); 28.68/8.68 28.68/8.68 /** 28.68/8.68 * Returns an array containing all of the elements in this set. 28.68/8.68 * If this set makes any guarantees as to what order its elements 28.68/8.68 * are returned by its iterator, this method must return the 28.68/8.68 * elements in the same order. 28.68/8.68 * 28.68/8.68 *

The returned array will be "safe" in that no references to it 28.68/8.68 * are maintained by this set. (In other words, this method must 28.68/8.68 * allocate a new array even if this set is backed by an array). 28.68/8.68 * The caller is thus free to modify the returned array. 28.68/8.68 * 28.68/8.68 *

This method acts as bridge between array-based and collection-based 28.68/8.68 * APIs. 28.68/8.68 * 28.68/8.68 * @return an array containing all the elements in this set 28.68/8.68 */ 28.68/8.68 Object[] toArray(); 28.68/8.68 28.68/8.68 /** 28.68/8.68 * Returns an array containing all of the elements in this set; the 28.68/8.68 * runtime type of the returned array is that of the specified array. 28.68/8.68 * If the set fits in the specified array, it is returned therein. 28.68/8.68 * Otherwise, a new array is allocated with the runtime type of the 28.68/8.68 * specified array and the size of this set. 28.68/8.68 * 28.68/8.68 *

If this set fits in the specified array with room to spare 28.68/8.68 * (i.e., the array has more elements than this set), the element in 28.68/8.68 * the array immediately following the end of the set is set to 28.68/8.68 * null. (This is useful in determining the length of this 28.68/8.68 * set only if the caller knows that this set does not contain 28.68/8.68 * any null elements.) 28.68/8.68 * 28.68/8.68 *

If this set makes any guarantees as to what order its elements 28.68/8.68 * are returned by its iterator, this method must return the elements 28.68/8.68 * in the same order. 28.68/8.68 * 28.68/8.68 *

Like the {@link #toArray()} method, this method acts as bridge between 28.68/8.68 * array-based and collection-based APIs. Further, this method allows 28.68/8.68 * precise control over the runtime type of the output array, and may, 28.68/8.68 * under certain circumstances, be used to save allocation costs. 28.68/8.68 * 28.68/8.68 *

Suppose x is a set known to contain only strings. 28.68/8.68 * The following code can be used to dump the set into a newly allocated 28.68/8.68 * array of String: 28.68/8.68 * 28.68/8.68 *

28.68/8.68	     *     String[] y = x.toArray(new String[0]);
28.68/8.68 * 28.68/8.68 * Note that toArray(new Object[0]) is identical in function to 28.68/8.68 * toArray(). 28.68/8.68 * 28.68/8.68 * @param a the array into which the elements of this set are to be 28.68/8.68 * stored, if it is big enough; otherwise, a new array of the same 28.68/8.68 * runtime type is allocated for this purpose. 28.68/8.68 * @return an array containing all the elements in this set 28.68/8.68 * @throws ArrayStoreException if the runtime type of the specified array 28.68/8.68 * is not a supertype of the runtime type of every element in this 28.68/8.68 * set 28.68/8.68 * @throws NullPointerException if the specified array is null 28.68/8.68 */ 28.68/8.68 T[] toArray(T[] a); 28.68/8.68 28.68/8.68 28.68/8.68 // Modification Operations 28.68/8.68 28.68/8.68 /** 28.68/8.68 * Adds the specified element to this set if it is not already present 28.68/8.68 * (optional operation). More formally, adds the specified element 28.68/8.68 * e to this set if the set contains no element e2 28.68/8.68 * such that 28.68/8.68 * (e==null ? e2==null : e.equals(e2)). 28.68/8.68 * If this set already contains the element, the call leaves the set 28.68/8.68 * unchanged and returns false. In combination with the 28.68/8.68 * restriction on constructors, this ensures that sets never contain 28.68/8.68 * duplicate elements. 28.68/8.68 * 28.68/8.68 *

The stipulation above does not imply that sets must accept all 28.68/8.68 * elements; sets may refuse to add any particular element, including 28.68/8.68 * null, and throw an exception, as described in the 28.68/8.68 * specification for {@link Collection#add Collection.add}. 28.68/8.68 * Individual set implementations should clearly document any 28.68/8.68 * restrictions on the elements that they may contain. 28.68/8.68 * 28.68/8.68 * @param e element to be added to this set 28.68/8.68 * @return true if this set did not already contain the specified 28.68/8.68 * element 28.68/8.68 * @throws UnsupportedOperationException if the add operation 28.68/8.68 * is not supported by this set 28.68/8.68 * @throws ClassCastException if the class of the specified element 28.68/8.68 * prevents it from being added to this set 28.68/8.68 * @throws NullPointerException if the specified element is null and this 28.68/8.68 * set does not permit null elements 28.68/8.68 * @throws IllegalArgumentException if some property of the specified element 28.68/8.68 * prevents it from being added to this set 28.68/8.68 */ 28.68/8.68 boolean add(E e); 28.68/8.68 28.68/8.68 28.68/8.68 /** 28.68/8.68 * Removes the specified element from this set if it is present 28.68/8.68 * (optional operation). More formally, removes an element e 28.68/8.68 * such that 28.68/8.68 * (o==null ? e==null : o.equals(e)), if 28.68/8.68 * this set contains such an element. Returns true if this set 28.68/8.68 * contained the element (or equivalently, if this set changed as a 28.68/8.68 * result of the call). (This set will not contain the element once the 28.68/8.68 * call returns.) 28.68/8.68 * 28.68/8.68 * @param o object to be removed from this set, if present 28.68/8.68 * @return true if this set contained the specified element 28.68/8.68 * @throws ClassCastException if the type of the specified element 28.68/8.68 * is incompatible with this set (optional) 28.68/8.68 * @throws NullPointerException if the specified element is null and this 28.68/8.68 * set does not permit null elements (optional) 28.68/8.68 * @throws UnsupportedOperationException if the remove operation 28.68/8.68 * is not supported by this set 28.68/8.68 */ 28.68/8.68 boolean remove(Object o); 28.68/8.68 28.68/8.68 28.68/8.68 // Bulk Operations 28.68/8.68 28.68/8.68 /** 28.68/8.68 * Returns true if this set contains all of the elements of the 28.68/8.68 * specified collection. If the specified collection is also a set, this 28.68/8.68 * method returns true if it is a subset of this set. 28.68/8.68 * 28.68/8.68 * @param c collection to be checked for containment in this set 28.68/8.68 * @return true if this set contains all of the elements of the 28.68/8.68 * specified collection 28.68/8.68 * @throws ClassCastException if the types of one or more elements 28.68/8.68 * in the specified collection are incompatible with this 28.68/8.68 * set (optional) 28.68/8.68 * @throws NullPointerException if the specified collection contains one 28.68/8.68 * or more null elements and this set does not permit null 28.68/8.68 * elements (optional), or if the specified collection is null 28.68/8.68 * @see #contains(Object) 28.68/8.68 */ 28.68/8.68 boolean containsAll(Collection c); 28.68/8.68 28.68/8.68 /** 28.68/8.68 * Adds all of the elements in the specified collection to this set if 28.68/8.68 * they're not already present (optional operation). If the specified 28.68/8.68 * collection is also a set, the addAll operation effectively 28.68/8.68 * modifies this set so that its value is the union of the two 28.68/8.68 * sets. The behavior of this operation is undefined if the specified 28.68/8.68 * collection is modified while the operation is in progress. 28.68/8.68 * 28.68/8.68 * @param c collection containing elements to be added to this set 28.68/8.68 * @return true if this set changed as a result of the call 28.68/8.68 * 28.68/8.68 * @throws UnsupportedOperationException if the addAll operation 28.68/8.68 * is not supported by this set 28.68/8.68 * @throws ClassCastException if the class of an element of the 28.68/8.68 * specified collection prevents it from being added to this set 28.68/8.68 * @throws NullPointerException if the specified collection contains one 28.68/8.68 * or more null elements and this set does not permit null 28.68/8.68 * elements, or if the specified collection is null 28.68/8.68 * @throws IllegalArgumentException if some property of an element of the 28.68/8.68 * specified collection prevents it from being added to this set 28.68/8.68 * @see #add(Object) 28.68/8.68 */ 28.68/8.68 boolean addAll(Collection c); 28.68/8.68 28.68/8.68 /** 28.68/8.68 * Retains only the elements in this set that are contained in the 28.68/8.68 * specified collection (optional operation). In other words, removes 28.68/8.68 * from this set all of its elements that are not contained in the 28.68/8.68 * specified collection. If the specified collection is also a set, this 28.68/8.68 * operation effectively modifies this set so that its value is the 28.68/8.68 * intersection of the two sets. 28.68/8.68 * 28.68/8.68 * @param c collection containing elements to be retained in this set 28.68/8.68 * @return true if this set changed as a result of the call 28.68/8.68 * @throws UnsupportedOperationException if the retainAll operation 28.68/8.68 * is not supported by this set 28.68/8.68 * @throws ClassCastException if the class of an element of this set 28.68/8.68 * is incompatible with the specified collection (optional) 28.68/8.68 * @throws NullPointerException if this set contains a null element and the 28.68/8.68 * specified collection does not permit null elements (optional), 28.68/8.68 * or if the specified collection is null 28.68/8.68 * @see #remove(Object) 28.68/8.68 */ 28.68/8.68 boolean retainAll(Collection c); 28.68/8.68 28.68/8.68 /** 28.68/8.68 * Removes from this set all of its elements that are contained in the 28.68/8.68 * specified collection (optional operation). If the specified 28.68/8.68 * collection is also a set, this operation effectively modifies this 28.68/8.68 * set so that its value is the asymmetric set difference of 28.68/8.68 * the two sets. 28.68/8.68 * 28.68/8.68 * @param c collection containing elements to be removed from this set 28.68/8.68 * @return true if this set changed as a result of the call 28.68/8.68 * @throws UnsupportedOperationException if the removeAll operation 28.68/8.68 * is not supported by this set 28.68/8.68 * @throws ClassCastException if the class of an element of this set 28.68/8.68 * is incompatible with the specified collection (optional) 28.68/8.68 * @throws NullPointerException if this set contains a null element and the 28.68/8.68 * specified collection does not permit null elements (optional), 28.68/8.68 * or if the specified collection is null 28.68/8.68 * @see #remove(Object) 28.68/8.68 * @see #contains(Object) 28.68/8.68 */ 28.68/8.68 boolean removeAll(Collection c); 28.68/8.68 28.68/8.68 /** 28.68/8.68 * Removes all of the elements from this set (optional operation). 28.68/8.68 * The set will be empty after this call returns. 28.68/8.68 * 28.68/8.68 * @throws UnsupportedOperationException if the clear method 28.68/8.68 * is not supported by this set 28.68/8.68 */ 28.68/8.68 void clear(); 28.68/8.68 28.68/8.68 28.68/8.68 // Comparison and hashing 28.68/8.68 28.68/8.68 /** 28.68/8.68 * Compares the specified object with this set for equality. Returns 28.68/8.68 * true if the specified object is also a set, the two sets 28.68/8.68 * have the same size, and every member of the specified set is 28.68/8.68 * contained in this set (or equivalently, every member of this set is 28.68/8.68 * contained in the specified set). This definition ensures that the 28.68/8.68 * equals method works properly across different implementations of the 28.68/8.68 * set interface. 28.68/8.68 * 28.68/8.68 * @param o object to be compared for equality with this set 28.68/8.68 * @return true if the specified object is equal to this set 28.68/8.68 */ 28.68/8.68 boolean equals(Object o); 28.68/8.68 28.68/8.68 /** 28.68/8.68 * Returns the hash code value for this set. The hash code of a set is 28.68/8.68 * defined to be the sum of the hash codes of the elements in the set, 28.68/8.68 * where the hash code of a null element is defined to be zero. 28.68/8.68 * This ensures that s1.equals(s2) implies that 28.68/8.68 * s1.hashCode()==s2.hashCode() for any two sets s1 28.68/8.68 * and s2, as required by the general contract of 28.68/8.68 * {@link Object#hashCode}. 28.68/8.68 * 28.68/8.68 * @return the hash code value for this set 28.68/8.68 * @see Object#equals(Object) 28.68/8.68 * @see Set#equals(Object) 28.68/8.68 */ 28.68/8.68 int hashCode(); 28.68/8.68 } 28.68/8.68 28.68/8.68 28.68/8.68 /* 28.68/8.68 * Copyright 1997-2006 Sun Microsystems, Inc. All Rights Reserved. 28.68/8.68 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 28.68/8.68 * 28.68/8.68 * This code is free software; you can redistribute it and/or modify it 28.68/8.68 * under the terms of the GNU General Public License version 2 only, as 28.68/8.68 * published by the Free Software Foundation. Sun designates this 28.68/8.68 * particular file as subject to the "Classpath" exception as provided 28.68/8.68 * by Sun in the LICENSE file that accompanied this code. 28.68/8.68 * 28.68/8.68 * This code is distributed in the hope that it will be useful, but WITHOUT 28.68/8.68 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 28.68/8.68 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 28.68/8.68 * version 2 for more details (a copy is included in the LICENSE file that 28.68/8.68 * accompanied this code). 28.68/8.68 * 28.68/8.68 * You should have received a copy of the GNU General Public License version 28.68/8.68 * 2 along with this work; if not, write to the Free Software Foundation, 28.68/8.68 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 28.68/8.68 * 28.68/8.68 * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, 28.68/8.68 * CA 95054 USA or visit www.sun.com if you need additional information or 28.68/8.68 * have any questions. 28.68/8.68 */ 28.68/8.68 28.68/8.68 package javaUtilEx; 28.68/8.68 28.68/8.68 /** 28.68/8.68 * Thrown to indicate that the requested operation is not supported.

28.68/8.68 * 28.68/8.68 * This class is a member of the 28.68/8.68 * 28.68/8.68 * Java Collections Framework. 28.68/8.68 * 28.68/8.68 * @author Josh Bloch 28.68/8.68 * @since 1.2 28.68/8.68 */ 28.68/8.68 public class UnsupportedOperationException extends RuntimeException { 28.68/8.68 /** 28.68/8.68 * Constructs an UnsupportedOperationException with no detail message. 28.68/8.68 */ 28.68/8.68 public UnsupportedOperationException() { 28.68/8.68 } 28.68/8.68 28.68/8.68 /** 28.68/8.68 * Constructs an UnsupportedOperationException with the specified 28.68/8.68 * detail message. 28.68/8.68 * 28.68/8.68 * @param message the detail message 28.68/8.68 */ 28.68/8.68 public UnsupportedOperationException(String message) { 28.68/8.68 super(message); 28.68/8.68 } 28.68/8.68 28.68/8.68 /** 28.68/8.68 * Constructs a new exception with the specified detail message and 28.68/8.68 * cause. 28.68/8.68 * 28.68/8.68 *

Note that the detail message associated with cause is 28.68/8.68 * not automatically incorporated in this exception's detail 28.68/8.68 * message. 28.68/8.68 * 28.68/8.68 * @param message the detail message (which is saved for later retrieval 28.68/8.68 * by the {@link Throwable#getMessage()} method). 28.68/8.68 * @param cause the cause (which is saved for later retrieval by the 28.68/8.68 * {@link Throwable#getCause()} method). (A null value 28.68/8.68 * is permitted, and indicates that the cause is nonexistent or 28.68/8.68 * unknown.) 28.68/8.68 * @since 1.5 28.68/8.68 */ 28.68/8.68 public UnsupportedOperationException(String message, Throwable cause) { 28.68/8.68 super(message, cause); 28.68/8.68 } 28.68/8.68 28.68/8.68 /** 28.68/8.68 * Constructs a new exception with the specified cause and a detail 28.68/8.68 * message of (cause==null ? null : cause.toString()) (which 28.68/8.68 * typically contains the class and detail message of cause). 28.68/8.68 * This constructor is useful for exceptions that are little more than 28.68/8.68 * wrappers for other throwables (for example, {@link 28.68/8.68 * java.security.PrivilegedActionException}). 28.68/8.68 * 28.68/8.68 * @param cause the cause (which is saved for later retrieval by the 28.68/8.68 * {@link Throwable#getCause()} method). (A null value is 28.68/8.68 * permitted, and indicates that the cause is nonexistent or 28.68/8.68 * unknown.) 28.68/8.68 * @since 1.5 28.68/8.68 */ 28.68/8.68 public UnsupportedOperationException(Throwable cause) { 28.68/8.68 super(cause); 28.68/8.68 } 28.68/8.68 28.68/8.68 static final long serialVersionUID = -1242599979055084673L; 28.68/8.68 } 28.68/8.68 28.68/8.68 28.68/8.68 28.68/8.68 ---------------------------------------- 28.68/8.68 28.68/8.68 (3) JBCToGraph (EQUIVALENT) 28.68/8.68 Constructed TerminationGraph. 28.68/8.68 ---------------------------------------- 28.68/8.68 28.68/8.68 (4) 28.68/8.68 Obligation: 28.68/8.68 Termination Graph based on JBC Program: 28.68/8.68 javaUtilEx.juHashMapCreateIteratorKeyLoop.main([Ljava/lang/String;)V: Graph of 417 nodes with 2 SCCs. 28.68/8.68 28.68/8.68 28.68/8.68 28.68/8.68 javaUtilEx.juHashMapCreateIteratorKeyLoop.createMap(I)LjavaUtilEx/HashMap;: Graph of 248 nodes with 1 SCC. 28.68/8.68 28.68/8.68 28.68/8.68 28.68/8.68 javaUtilEx.HashMap.put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;: Graph of 493 nodes with 2 SCCs. 28.68/8.68 28.68/8.68 28.68/8.68 28.68/8.68 javaUtilEx.Content.hashCode()I: Graph of 6 nodes with 0 SCCs. 28.68/8.68 28.68/8.68 28.68/8.68 28.68/8.68 javaUtilEx.Content.equals(Ljava/lang/Object;)Z: Graph of 31 nodes with 0 SCCs. 28.68/8.68 28.68/8.68 28.68/8.68 28.68/8.68 28.68/8.68 28.68/8.68 ---------------------------------------- 28.68/8.68 28.68/8.68 (5) TerminationGraphToSCCProof (SOUND) 28.68/8.68 Splitted TerminationGraph to 5 SCCss. 28.68/8.68 ---------------------------------------- 28.68/8.68 28.68/8.68 (6) 28.68/8.68 Complex Obligation (AND) 28.68/8.68 28.68/8.68 ---------------------------------------- 28.68/8.68 28.68/8.68 (7) 28.68/8.68 Obligation: 28.68/8.68 SCC of termination graph based on JBC Program. 28.68/8.68 SCC contains nodes from the following methods: javaUtilEx.HashMap.put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; 28.68/8.68 SCC calls the following helper methods: 28.68/8.68 Performed SCC analyses: 28.68/8.68 *Used field analysis yielded the following read fields: 28.68/8.68 *javaUtilEx.HashMap$Entry: [next, hash] 28.68/8.68 *Marker field analysis yielded the following relations that could be markers: 28.68/8.68 28.68/8.68 ---------------------------------------- 28.68/8.68 28.68/8.68 (8) SCCToIRSProof (SOUND) 28.68/8.68 Transformed FIGraph SCCs to intTRSs. Log: 28.68/8.68 Generated rules. Obtained 58 IRulesP rules: 28.68/8.68 f11964_0_transfer_Load(EOS(STATIC_11964), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), i4292, java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4558)), i4292, i4559, i4559) -> f11966_0_transfer_ArrayLength(EOS(STATIC_11966), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), i4292, java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4558)), i4292, i4559, i4559, java.lang.Object(ARRAY(i4558))) :|: TRUE 28.68/8.68 f11966_0_transfer_ArrayLength(EOS(STATIC_11966), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), i4292, java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4558)), i4292, i4559, i4559, java.lang.Object(ARRAY(i4558))) -> f11969_0_transfer_GE(EOS(STATIC_11969), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), i4292, java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4558)), i4292, i4559, i4559, i4558) :|: i4558 >= 0 28.68/8.68 f11969_0_transfer_GE(EOS(STATIC_11969), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), i4292, java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4558)), i4292, i4559, i4559, i4558) -> f11973_0_transfer_GE(EOS(STATIC_11973), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), i4292, java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4558)), i4292, i4559, i4559, i4558) :|: i4559 < i4558 28.68/8.68 f11973_0_transfer_GE(EOS(STATIC_11973), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), i4292, java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4558)), i4292, i4559, i4559, i4558) -> f11977_0_transfer_Load(EOS(STATIC_11977), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), i4292, java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4558)), i4292, i4559) :|: i4559 < i4558 28.68/8.68 f11977_0_transfer_Load(EOS(STATIC_11977), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), i4292, java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4558)), i4292, i4559) -> f11981_0_transfer_Load(EOS(STATIC_11981), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), i4292, java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4558)), i4292, i4559, java.lang.Object(ARRAY(i4558))) :|: TRUE 28.68/8.68 f11981_0_transfer_Load(EOS(STATIC_11981), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), i4292, java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4558)), i4292, i4559, java.lang.Object(ARRAY(i4558))) -> f11985_0_transfer_ArrayAccess(EOS(STATIC_11985), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), i4292, java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4558)), i4292, i4559, java.lang.Object(ARRAY(i4558)), i4559) :|: TRUE 28.68/8.68 f11985_0_transfer_ArrayAccess(EOS(STATIC_11985), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), i4292, java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4558)), i4292, i4559, java.lang.Object(ARRAY(i4558)), i4559) -> f11988_0_transfer_ArrayAccess(EOS(STATIC_11988), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), i4292, java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4558)), i4292, i4559, java.lang.Object(ARRAY(i4558)), i4559) :|: TRUE 28.68/8.68 f11988_0_transfer_ArrayAccess(EOS(STATIC_11988), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), i4292, java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4558)), i4292, i4559, java.lang.Object(ARRAY(i4558)), i4559) -> f11992_0_transfer_Store(EOS(STATIC_11992), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), i4292, java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4558)), i4292, i4559, o7509) :|: i4559 < i4558 28.68/8.68 f11992_0_transfer_Store(EOS(STATIC_11992), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), i4292, java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4558)), i4292, i4559, o7509) -> f11996_0_transfer_Load(EOS(STATIC_11996), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), i4292, java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4558)), i4292, i4559, o7509) :|: TRUE 28.68/8.68 f11996_0_transfer_Load(EOS(STATIC_11996), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), i4292, java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4558)), i4292, i4559, o7509) -> f11999_0_transfer_NULL(EOS(STATIC_11999), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), i4292, java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4558)), i4292, i4559, o7509, o7509) :|: TRUE 28.68/8.68 f11999_0_transfer_NULL(EOS(STATIC_11999), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), i4292, java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4558)), i4292, i4559, java.lang.Object(o7511sub), java.lang.Object(o7511sub)) -> f12003_0_transfer_NULL(EOS(STATIC_12003), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), i4292, java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4558)), i4292, i4559, java.lang.Object(o7511sub), java.lang.Object(o7511sub)) :|: TRUE 28.68/8.68 f11999_0_transfer_NULL(EOS(STATIC_11999), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), i4292, java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4558)), i4292, i4559, NULL, NULL) -> f12004_0_transfer_NULL(EOS(STATIC_12004), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), i4292, java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4558)), i4292, i4559, NULL, NULL) :|: TRUE 28.68/8.68 f12003_0_transfer_NULL(EOS(STATIC_12003), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), i4292, java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4558)), i4292, i4559, java.lang.Object(o7511sub), java.lang.Object(o7511sub)) -> f12008_0_transfer_Load(EOS(STATIC_12008), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), i4292, java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4558)), i4292, i4559, java.lang.Object(o7511sub)) :|: TRUE 28.68/8.68 f12008_0_transfer_Load(EOS(STATIC_12008), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), i4292, java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4558)), i4292, i4559, java.lang.Object(o7511sub)) -> f12012_0_transfer_Load(EOS(STATIC_12012), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), i4292, java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4558)), i4292, i4559, java.lang.Object(o7511sub), java.lang.Object(ARRAY(i4558))) :|: TRUE 28.68/8.68 f12012_0_transfer_Load(EOS(STATIC_12012), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), i4292, java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4558)), i4292, i4559, java.lang.Object(o7511sub), java.lang.Object(ARRAY(i4558))) -> f12017_0_transfer_ConstantStackPush(EOS(STATIC_12017), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), i4292, java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4558)), i4292, i4559, java.lang.Object(o7511sub), java.lang.Object(ARRAY(i4558)), i4559) :|: TRUE 28.68/8.68 f12017_0_transfer_ConstantStackPush(EOS(STATIC_12017), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), i4292, java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4558)), i4292, i4559, java.lang.Object(o7511sub), java.lang.Object(ARRAY(i4558)), i4559) -> f12022_0_transfer_ArrayAccess(EOS(STATIC_12022), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), i4292, java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4558)), i4292, i4559, java.lang.Object(o7511sub), java.lang.Object(ARRAY(i4558)), i4559, NULL) :|: TRUE 28.68/8.68 f12022_0_transfer_ArrayAccess(EOS(STATIC_12022), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), i4292, java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4558)), i4292, i4559, java.lang.Object(o7511sub), java.lang.Object(ARRAY(i4558)), i4559, NULL) -> f12025_0_transfer_ArrayAccess(EOS(STATIC_12025), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), i4292, java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4558)), i4292, i4559, java.lang.Object(o7511sub), java.lang.Object(ARRAY(i4558)), i4559, NULL) :|: TRUE 28.68/8.68 f12025_0_transfer_ArrayAccess(EOS(STATIC_12025), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), i4292, java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4558)), i4292, i4559, java.lang.Object(o7511sub), java.lang.Object(ARRAY(i4558)), i4559, NULL) -> f12030_0_transfer_Load(EOS(STATIC_12030), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), i4292, java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4558)), i4292, i4559, java.lang.Object(o7511put)) :|: i4559 < i4558 28.68/8.68 f12030_0_transfer_Load(EOS(STATIC_12030), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), i4292, java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4558)), i4292, i4559, java.lang.Object(o7511sub)) -> f12034_0_transfer_FieldAccess(EOS(STATIC_12034), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), i4292, java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4558)), i4292, i4559, java.lang.Object(o7511sub), java.lang.Object(o7511sub)) :|: TRUE 28.68/8.68 f12034_0_transfer_FieldAccess(EOS(STATIC_12034), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), i4292, java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4558)), i4292, i4559, java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7523, i4612)), java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7523, i4612))) -> f12036_0_transfer_FieldAccess(EOS(STATIC_12036), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), i4292, java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4558)), i4292, i4559, java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7523, i4612)), java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7523, i4612))) :|: TRUE 28.68/8.68 f12036_0_transfer_FieldAccess(EOS(STATIC_12036), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), i4292, java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4558)), i4292, i4559, java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7523, i4612)), java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7523, i4612))) -> f12040_0_transfer_Store(EOS(STATIC_12040), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), i4292, java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4558)), i4292, i4559, java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7523, i4612)), o7523) :|: TRUE 28.68/8.68 f12040_0_transfer_Store(EOS(STATIC_12040), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), i4292, java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4558)), i4292, i4559, java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7523, i4612)), o7523) -> f12043_0_transfer_Load(EOS(STATIC_12043), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), i4292, java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4558)), i4292, i4559, java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7523, i4612)), o7523) :|: TRUE 28.68/8.68 f12043_0_transfer_Load(EOS(STATIC_12043), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), i4292, java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4558)), i4292, i4559, java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7523, i4612)), o7523) -> f12045_0_transfer_FieldAccess(EOS(STATIC_12045), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), i4292, java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4558)), i4292, i4559, java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7523, i4612)), o7523, java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7523, i4612))) :|: TRUE 28.68/8.68 f12045_0_transfer_FieldAccess(EOS(STATIC_12045), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), i4292, java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4558)), i4292, i4559, java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7523, i4612)), o7523, java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7523, i4612))) -> f12048_0_transfer_Load(EOS(STATIC_12048), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), i4292, java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4558)), i4292, i4559, java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7523, i4612)), o7523, i4612) :|: TRUE 28.68/8.68 f12048_0_transfer_Load(EOS(STATIC_12048), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), i4292, java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4558)), i4292, i4559, java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7523, i4612)), o7523, i4612) -> f12051_0_transfer_InvokeMethod(EOS(STATIC_12051), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), i4292, java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4558)), i4292, i4559, java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7523, i4612)), o7523, i4612, i4292) :|: TRUE 28.68/8.68 f12051_0_transfer_InvokeMethod(EOS(STATIC_12051), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), i4292, java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4558)), i4292, i4559, java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7523, i4612)), o7523, i4612, i4292) -> f12053_0_indexFor_Load(EOS(STATIC_12053), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), i4292, java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4558)), i4292, i4559, java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7523, i4612)), o7523, i4612, i4292) :|: TRUE 28.68/8.68 f12053_0_indexFor_Load(EOS(STATIC_12053), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), i4292, java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4558)), i4292, i4559, java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7523, i4612)), o7523, i4612, i4292) -> f12058_0_indexFor_Load(EOS(STATIC_12058), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), i4292, java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4558)), i4292, i4559, java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7523, i4612)), o7523, i4292, i4612) :|: TRUE 28.68/8.68 f12058_0_indexFor_Load(EOS(STATIC_12058), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), i4292, java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4558)), i4292, i4559, java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7523, i4612)), o7523, i4292, i4612) -> f12060_0_indexFor_ConstantStackPush(EOS(STATIC_12060), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), i4292, java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4558)), i4292, i4559, java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7523, i4612)), o7523, i4612, i4292) :|: TRUE 28.68/8.68 f12060_0_indexFor_ConstantStackPush(EOS(STATIC_12060), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), i4292, java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4558)), i4292, i4559, java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7523, i4612)), o7523, i4612, i4292) -> f12063_0_indexFor_IntArithmetic(EOS(STATIC_12063), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), i4292, java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4558)), i4292, i4559, java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7523, i4612)), o7523, i4612, i4292, 1) :|: TRUE 28.68/8.68 f12063_0_indexFor_IntArithmetic(EOS(STATIC_12063), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), i4292, java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4558)), i4292, i4559, java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7523, i4612)), o7523, i4612, i4292, matching1) -> f12066_0_indexFor_IntArithmetic(EOS(STATIC_12066), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), i4292, java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4558)), i4292, i4559, java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7523, i4612)), o7523, i4612, i4292 - 1) :|: i4292 >= 0 && matching1 = 1 28.68/8.68 f12066_0_indexFor_IntArithmetic(EOS(STATIC_12066), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), i4292, java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4558)), i4292, i4559, java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7523, i4612)), o7523, i4612, i4629) -> f12068_0_indexFor_Return(EOS(STATIC_12068), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), i4292, java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4558)), i4292, i4559, java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7523, i4612)), o7523, i4630) :|: TRUE 28.68/8.68 f12068_0_indexFor_Return(EOS(STATIC_12068), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), i4292, java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4558)), i4292, i4559, java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7523, i4612)), o7523, i4630) -> f12071_0_transfer_Store(EOS(STATIC_12071), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), i4292, java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4558)), i4292, i4559, java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7523, i4612)), o7523, i4630) :|: TRUE 28.68/8.68 f12071_0_transfer_Store(EOS(STATIC_12071), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), i4292, java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4558)), i4292, i4559, java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7523, i4612)), o7523, i4630) -> f12074_0_transfer_Load(EOS(STATIC_12074), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), i4292, java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4558)), i4292, i4559, java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7523, i4612)), o7523, i4630) :|: TRUE 28.68/8.68 f12074_0_transfer_Load(EOS(STATIC_12074), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), i4292, java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4558)), i4292, i4559, java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7523, i4612)), o7523, i4630) -> f12077_0_transfer_Load(EOS(STATIC_12077), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), i4292, java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4558)), i4292, i4559, java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7523, i4612)), o7523, i4630, java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7523, i4612))) :|: TRUE 28.68/8.68 f12077_0_transfer_Load(EOS(STATIC_12077), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), i4292, java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4558)), i4292, i4559, java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7523, i4612)), o7523, i4630, java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7523, i4612))) -> f12080_0_transfer_Load(EOS(STATIC_12080), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), i4292, java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4558)), i4292, i4559, java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7523, i4612)), o7523, i4630, java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7523, i4612)), java.lang.Object(ARRAY(i4292))) :|: TRUE 28.68/8.68 f12080_0_transfer_Load(EOS(STATIC_12080), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), i4292, java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4558)), i4292, i4559, java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7523, i4612)), o7523, i4630, java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7523, i4612)), java.lang.Object(ARRAY(i4292))) -> f12083_0_transfer_ArrayAccess(EOS(STATIC_12083), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), i4292, java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4558)), i4292, i4559, java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7523, i4612)), o7523, i4630, java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7523, i4612)), java.lang.Object(ARRAY(i4292)), i4630) :|: TRUE 28.68/8.68 f12083_0_transfer_ArrayAccess(EOS(STATIC_12083), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), i4292, java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4558)), i4292, i4559, java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7523, i4612)), o7523, i4630, java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7523, i4612)), java.lang.Object(ARRAY(i4292)), i4630) -> f12086_0_transfer_ArrayAccess(EOS(STATIC_12086), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), i4292, java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4558)), i4292, i4559, java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7523, i4612)), o7523, i4630, java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7523, i4612)), java.lang.Object(ARRAY(i4292)), i4630) :|: TRUE 28.68/8.68 f12086_0_transfer_ArrayAccess(EOS(STATIC_12086), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), i4292, java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4558)), i4292, i4559, java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7523, i4612)), o7523, i4630, java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7523, i4612)), java.lang.Object(ARRAY(i4292)), i4630) -> f12090_0_transfer_FieldAccess(EOS(STATIC_12090), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), i4292, java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4558)), i4292, i4559, java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7523, i4612)), o7523, i4630, java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7523, i4612)), o7543) :|: i4630 < i4292 28.68/8.68 f12090_0_transfer_FieldAccess(EOS(STATIC_12090), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), i4292, java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4558)), i4292, i4559, java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7523, i4612)), o7523, i4630, java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7523, i4612)), o7543) -> f12094_0_transfer_Load(EOS(STATIC_12094), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), i4292, java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4558)), i4292, i4559, java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7543, i4612)), o7523, i4630) :|: TRUE 28.68/8.68 f12094_0_transfer_Load(EOS(STATIC_12094), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), i4292, java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4558)), i4292, i4559, java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7543, i4612)), o7523, i4630) -> f12096_0_transfer_Load(EOS(STATIC_12096), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), i4292, java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4558)), i4292, i4559, java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7543, i4612)), o7523, i4630, java.lang.Object(ARRAY(i4292))) :|: TRUE 28.68/8.68 f12096_0_transfer_Load(EOS(STATIC_12096), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), i4292, java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4558)), i4292, i4559, java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7543, i4612)), o7523, i4630, java.lang.Object(ARRAY(i4292))) -> f12100_0_transfer_Load(EOS(STATIC_12100), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), i4292, java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4558)), i4292, i4559, java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7543, i4612)), o7523, java.lang.Object(ARRAY(i4292)), i4630) :|: TRUE 28.68/8.68 f12100_0_transfer_Load(EOS(STATIC_12100), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), i4292, java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4558)), i4292, i4559, java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7543, i4612)), o7523, java.lang.Object(ARRAY(i4292)), i4630) -> f12103_0_transfer_ArrayAccess(EOS(STATIC_12103), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), i4292, java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4558)), i4292, i4559, o7523, java.lang.Object(ARRAY(i4292)), i4630, java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7543, i4612))) :|: TRUE 28.68/8.68 f12103_0_transfer_ArrayAccess(EOS(STATIC_12103), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), i4292, java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4558)), i4292, i4559, o7523, java.lang.Object(ARRAY(i4292)), i4630, java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7543, i4612))) -> f12105_0_transfer_ArrayAccess(EOS(STATIC_12105), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), i4292, java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4558)), i4292, i4559, o7523, java.lang.Object(ARRAY(i4292)), i4630, java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7543, i4612))) :|: TRUE 28.68/8.68 f12105_0_transfer_ArrayAccess(EOS(STATIC_12105), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), i4292, java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4558)), i4292, i4559, o7523, java.lang.Object(ARRAY(i4292)), i4630, java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7543, i4612))) -> f12109_0_transfer_Load(EOS(STATIC_12109), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), i4292, java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4558)), i4292, i4559, o7523) :|: i4630 < i4292 28.68/8.68 f12109_0_transfer_Load(EOS(STATIC_12109), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), i4292, java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4558)), i4292, i4559, o7523) -> f12113_0_transfer_Store(EOS(STATIC_12113), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), i4292, java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4558)), i4292, i4559, o7523) :|: TRUE 28.68/8.68 f12113_0_transfer_Store(EOS(STATIC_12113), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), i4292, java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4558)), i4292, i4559, o7523) -> f12114_0_transfer_Load(EOS(STATIC_12114), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), i4292, java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4558)), i4292, i4559, o7523) :|: TRUE 28.68/8.68 f12114_0_transfer_Load(EOS(STATIC_12114), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), i4292, java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4558)), i4292, i4559, o7523) -> f12117_0_transfer_NONNULL(EOS(STATIC_12117), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), i4292, java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4558)), i4292, i4559, o7523, o7523) :|: TRUE 28.68/8.68 f12117_0_transfer_NONNULL(EOS(STATIC_12117), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), i4292, java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4558)), i4292, i4559, java.lang.Object(o7566sub), java.lang.Object(o7566sub)) -> f12120_0_transfer_NONNULL(EOS(STATIC_12120), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), i4292, java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4558)), i4292, i4559, java.lang.Object(o7566sub), java.lang.Object(o7566sub)) :|: TRUE 28.68/8.68 f12117_0_transfer_NONNULL(EOS(STATIC_12117), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), i4292, java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4558)), i4292, i4559, NULL, NULL) -> f12121_0_transfer_NONNULL(EOS(STATIC_12121), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), i4292, java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4558)), i4292, i4559, NULL, NULL) :|: TRUE 28.68/8.68 f12120_0_transfer_NONNULL(EOS(STATIC_12120), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), i4292, java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4558)), i4292, i4559, java.lang.Object(o7566sub), java.lang.Object(o7566sub)) -> f12122_0_transfer_Load(EOS(STATIC_12122), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), i4292, java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4558)), i4292, i4559, java.lang.Object(o7566sub)) :|: TRUE 28.68/8.68 f12122_0_transfer_Load(EOS(STATIC_12122), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), i4292, java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4558)), i4292, i4559, java.lang.Object(o7566sub)) -> f12030_0_transfer_Load(EOS(STATIC_12030), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), i4292, java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4558)), i4292, i4559, java.lang.Object(o7566sub)) :|: TRUE 28.68/8.68 f12121_0_transfer_NONNULL(EOS(STATIC_12121), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), i4292, java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4558)), i4292, i4559, NULL, NULL) -> f12123_0_transfer_Inc(EOS(STATIC_12123), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), i4292, java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4558)), i4292, i4559) :|: TRUE 28.68/8.68 f12123_0_transfer_Inc(EOS(STATIC_12123), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), i4292, java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4558)), i4292, i4559) -> f12126_0_transfer_JMP(EOS(STATIC_12126), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), i4292, java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4558)), i4292, i4559 + 1) :|: TRUE 28.68/8.68 f12126_0_transfer_JMP(EOS(STATIC_12126), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), i4292, java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4558)), i4292, i4648) -> f12129_0_transfer_Load(EOS(STATIC_12129), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), i4292, java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4558)), i4292, i4648) :|: TRUE 28.68/8.68 f12129_0_transfer_Load(EOS(STATIC_12129), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), i4292, java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4558)), i4292, i4648) -> f11962_0_transfer_Load(EOS(STATIC_11962), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), i4292, java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4558)), i4292, i4648) :|: TRUE 28.68/8.68 f11962_0_transfer_Load(EOS(STATIC_11962), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), i4292, java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4558)), i4292, i4559) -> f11964_0_transfer_Load(EOS(STATIC_11964), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), i4292, java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4558)), i4292, i4559, i4559) :|: TRUE 28.68/8.68 f12004_0_transfer_NULL(EOS(STATIC_12004), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), i4292, java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4558)), i4292, i4559, NULL, NULL) -> f12009_0_transfer_Inc(EOS(STATIC_12009), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), i4292, java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4558)), i4292, i4559) :|: TRUE 28.68/8.68 f12009_0_transfer_Inc(EOS(STATIC_12009), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), i4292, java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4558)), i4292, i4559) -> f12123_0_transfer_Inc(EOS(STATIC_12123), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), i4292, java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4292)), java.lang.Object(ARRAY(i4558)), i4292, i4559) :|: TRUE 28.68/8.68 Combined rules. Obtained 4 IRulesP rules: 28.68/8.68 f11964_0_transfer_Load(EOS(STATIC_11964), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), i4292:0, java.lang.Object(ARRAY(i4292:0)), java.lang.Object(ARRAY(i4292:0)), java.lang.Object(ARRAY(i4558:0)), i4292:0, i4559:0, i4559:0) -> f12117_0_transfer_NONNULL(EOS(STATIC_12117), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), i4292:0, java.lang.Object(ARRAY(i4292:0)), java.lang.Object(ARRAY(i4292:0)), java.lang.Object(ARRAY(i4558:0)), i4292:0, i4559:0, o7523:0, o7523:0) :|: i4558:0 > -1 && i4559:0 < i4558:0 && i4292:0 > -1 && i4630:0 < i4292:0 28.68/8.68 f12117_0_transfer_NONNULL(EOS(STATIC_12117), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), i4292:0, java.lang.Object(ARRAY(i4292:0)), java.lang.Object(ARRAY(i4292:0)), java.lang.Object(ARRAY(i4558:0)), i4292:0, i4559:0, java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7523:0, i4612:0)), java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7523:0, i4612:0))) -> f12117_0_transfer_NONNULL(EOS(STATIC_12117), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), i4292:0, java.lang.Object(ARRAY(i4292:0)), java.lang.Object(ARRAY(i4292:0)), java.lang.Object(ARRAY(i4558:0)), i4292:0, i4559:0, o7523:0, o7523:0) :|: i4292:0 > -1 && i4630:0 < i4292:0 28.68/8.68 f11964_0_transfer_Load(EOS(STATIC_11964), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), i4292:0, java.lang.Object(ARRAY(i4292:0)), java.lang.Object(ARRAY(i4292:0)), java.lang.Object(ARRAY(i4558:0)), i4292:0, i4559:0, i4559:0) -> f11964_0_transfer_Load(EOS(STATIC_11964), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), i4292:0, java.lang.Object(ARRAY(i4292:0)), java.lang.Object(ARRAY(i4292:0)), java.lang.Object(ARRAY(i4558:0)), i4292:0, i4559:0 + 1, i4559:0 + 1) :|: i4558:0 > -1 && i4559:0 < i4558:0 28.68/8.68 f12117_0_transfer_NONNULL(EOS(STATIC_12117), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), i4292:0, java.lang.Object(ARRAY(i4292:0)), java.lang.Object(ARRAY(i4292:0)), java.lang.Object(ARRAY(i4558:0)), i4292:0, i4559:0, NULL, NULL) -> f11964_0_transfer_Load(EOS(STATIC_11964), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), i4292:0, java.lang.Object(ARRAY(i4292:0)), java.lang.Object(ARRAY(i4292:0)), java.lang.Object(ARRAY(i4558:0)), i4292:0, i4559:0 + 1, i4559:0 + 1) :|: TRUE 28.68/8.68 Filtered constant ground arguments: 28.68/8.68 f11964_0_transfer_Load(x1, x2, x3, x4, x5, x6, x7, x8, x9, x10) -> f11964_0_transfer_Load(x4, x5, x6, x7, x8, x9, x10) 28.68/8.68 f12117_0_transfer_NONNULL(x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11) -> f12117_0_transfer_NONNULL(x4, x5, x6, x7, x8, x9, x10, x11) 28.68/8.68 javaUtilEx.AbstractMap(x1) -> javaUtilEx.AbstractMap 28.68/8.68 javaUtilEx.HashMap$Entry(x1, x2, x3) -> javaUtilEx.HashMap$Entry(x2, x3) 28.68/8.68 javaUtilEx.HashMap(x1) -> javaUtilEx.HashMap 28.68/8.68 Filtered duplicate arguments: 28.68/8.68 f11964_0_transfer_Load(x1, x2, x3, x4, x5, x6, x7) -> f11964_0_transfer_Load(x3, x4, x7) 28.68/8.68 f12117_0_transfer_NONNULL(x1, x2, x3, x4, x5, x6, x7, x8) -> f12117_0_transfer_NONNULL(x3, x4, x6, x8) 28.68/8.68 Filtered unneeded arguments: 28.68/8.68 javaUtilEx.HashMap$Entry(x1, x2) -> javaUtilEx.HashMap$Entry(x1) 28.68/8.68 Finished conversion. Obtained 4 rules.P rules: 28.68/8.68 f11964_0_transfer_Load(java.lang.Object(ARRAY(i4292:0)), java.lang.Object(ARRAY(i4558:0)), i4559:0, i4292:0, i4558:0) -> f12117_0_transfer_NONNULL(java.lang.Object(ARRAY(i4292:0)), java.lang.Object(ARRAY(i4558:0)), i4559:0, o7523:0, i4292:0, i4558:0) :|: i4559:0 < i4558:0 && i4558:0 > -1 && i4630:0 < i4292:0 && i4292:0 > -1 28.68/8.68 f12117_0_transfer_NONNULL(java.lang.Object(ARRAY(i4292:0)), java.lang.Object(ARRAY(i4558:0)), i4559:0, java.lang.Object(javaUtilEx.HashMap$Entry(o7523:0)), i4292:0, i4558:0) -> f12117_0_transfer_NONNULL(java.lang.Object(ARRAY(i4292:0)), java.lang.Object(ARRAY(i4558:0)), i4559:0, o7523:0, i4292:0, i4558:0) :|: i4292:0 > -1 && i4630:0 < i4292:0 28.68/8.68 f11964_0_transfer_Load(java.lang.Object(ARRAY(i4292:0)), java.lang.Object(ARRAY(i4558:0)), i4559:0, i4292:0, i4558:0) -> f11964_0_transfer_Load(java.lang.Object(ARRAY(i4292:0)), java.lang.Object(ARRAY(i4558:0)), i4559:0 + 1, i4292:0, i4558:0) :|: i4558:0 > -1 && i4559:0 < i4558:0 28.68/8.68 f12117_0_transfer_NONNULL(java.lang.Object(ARRAY(i4292:0)), java.lang.Object(ARRAY(i4558:0)), i4559:0, NULL, i4292:0, i4558:0) -> f11964_0_transfer_Load(java.lang.Object(ARRAY(i4292:0)), java.lang.Object(ARRAY(i4558:0)), i4559:0 + 1, i4292:0, i4558:0) :|: TRUE 28.68/8.68 28.68/8.68 ---------------------------------------- 28.68/8.68 28.68/8.68 (9) 28.68/8.68 Obligation: 28.68/8.68 Rules: 28.68/8.68 f11964_0_transfer_Load(java.lang.Object(ARRAY(i4292:0)), java.lang.Object(ARRAY(i4558:0)), i4559:0, i4292:0, i4558:0) -> f12117_0_transfer_NONNULL(java.lang.Object(ARRAY(i4292:0)), java.lang.Object(ARRAY(i4558:0)), i4559:0, o7523:0, i4292:0, i4558:0) :|: i4559:0 < i4558:0 && i4558:0 > -1 && i4630:0 < i4292:0 && i4292:0 > -1 28.68/8.68 f12117_0_transfer_NONNULL(java.lang.Object(ARRAY(x)), java.lang.Object(ARRAY(x1)), x2, java.lang.Object(javaUtilEx.HashMap$Entry(x3)), x, x1) -> f12117_0_transfer_NONNULL(java.lang.Object(ARRAY(x)), java.lang.Object(ARRAY(x1)), x2, x3, x, x1) :|: x > -1 && x4 < x 28.68/8.68 f11964_0_transfer_Load(java.lang.Object(ARRAY(x5)), java.lang.Object(ARRAY(x6)), x7, x5, x6) -> f11964_0_transfer_Load(java.lang.Object(ARRAY(x5)), java.lang.Object(ARRAY(x6)), x7 + 1, x5, x6) :|: x6 > -1 && x7 < x6 28.68/8.68 f12117_0_transfer_NONNULL(java.lang.Object(ARRAY(x8)), java.lang.Object(ARRAY(x9)), x10, NULL, x8, x9) -> f11964_0_transfer_Load(java.lang.Object(ARRAY(x8)), java.lang.Object(ARRAY(x9)), x10 + 1, x8, x9) :|: TRUE 28.68/8.68 28.68/8.68 ---------------------------------------- 28.68/8.68 28.68/8.68 (10) IRSFormatTransformerProof (EQUIVALENT) 28.68/8.68 Reformatted IRS to match normalized format (transformed away non-linear left-hand sides, !=, / and %). 28.68/8.68 ---------------------------------------- 28.68/8.68 28.68/8.68 (11) 28.68/8.68 Obligation: 28.68/8.68 Rules: 28.68/8.68 f11964_0_transfer_Load(java.lang.Object(ARRAY(i4292:0)), java.lang.Object(ARRAY(i4558:0)), i4559:0, i4292:0, i4558:0) -> f12117_0_transfer_NONNULL(java.lang.Object(ARRAY(i4292:0)), java.lang.Object(ARRAY(i4558:0)), i4559:0, o7523:0, i4292:0, i4558:0) :|: i4559:0 < i4558:0 && i4558:0 > -1 && i4630:0 < i4292:0 && i4292:0 > -1 28.68/8.68 f12117_0_transfer_NONNULL(java.lang.Object(ARRAY(x)), java.lang.Object(ARRAY(x1)), x2, java.lang.Object(javaUtilEx.HashMap$Entry(x3)), x, x1) -> f12117_0_transfer_NONNULL(java.lang.Object(ARRAY(x)), java.lang.Object(ARRAY(x1)), x2, x3, x, x1) :|: x > -1 && x4 < x 28.68/8.68 f11964_0_transfer_Load(java.lang.Object(ARRAY(x5)), java.lang.Object(ARRAY(x6)), x7, x5, x6) -> f11964_0_transfer_Load(java.lang.Object(ARRAY(x5)), java.lang.Object(ARRAY(x6)), arith, x5, x6) :|: x6 > -1 && x7 < x6 && arith = x7 + 1 28.68/8.68 f12117_0_transfer_NONNULL(java.lang.Object(ARRAY(x11)), java.lang.Object(ARRAY(x12)), x13, NULL, x11, x12) -> f11964_0_transfer_Load(java.lang.Object(ARRAY(x11)), java.lang.Object(ARRAY(x12)), x14, x11, x12) :|: TRUE && x14 = x13 + 1 28.68/8.68 28.68/8.68 ---------------------------------------- 28.68/8.68 28.68/8.68 (12) IRSwTTerminationDigraphProof (EQUIVALENT) 28.68/8.68 Constructed termination digraph! 28.68/8.68 Nodes: 28.68/8.68 (1) f11964_0_transfer_Load(java.lang.Object(ARRAY(i4292:0)), java.lang.Object(ARRAY(i4558:0)), i4559:0, i4292:0, i4558:0) -> f12117_0_transfer_NONNULL(java.lang.Object(ARRAY(i4292:0)), java.lang.Object(ARRAY(i4558:0)), i4559:0, o7523:0, i4292:0, i4558:0) :|: i4559:0 < i4558:0 && i4558:0 > -1 && i4630:0 < i4292:0 && i4292:0 > -1 28.68/8.68 (2) f12117_0_transfer_NONNULL(java.lang.Object(ARRAY(x)), java.lang.Object(ARRAY(x1)), x2, java.lang.Object(javaUtilEx.HashMap$Entry(x3)), x, x1) -> f12117_0_transfer_NONNULL(java.lang.Object(ARRAY(x)), java.lang.Object(ARRAY(x1)), x2, x3, x, x1) :|: x > -1 && x4 < x 28.68/8.68 (3) f11964_0_transfer_Load(java.lang.Object(ARRAY(x5)), java.lang.Object(ARRAY(x6)), x7, x5, x6) -> f11964_0_transfer_Load(java.lang.Object(ARRAY(x5)), java.lang.Object(ARRAY(x6)), arith, x5, x6) :|: x6 > -1 && x7 < x6 && arith = x7 + 1 28.68/8.68 (4) f12117_0_transfer_NONNULL(java.lang.Object(ARRAY(x11)), java.lang.Object(ARRAY(x12)), x13, NULL, x11, x12) -> f11964_0_transfer_Load(java.lang.Object(ARRAY(x11)), java.lang.Object(ARRAY(x12)), x14, x11, x12) :|: TRUE && x14 = x13 + 1 28.68/8.68 28.68/8.68 Arcs: 28.68/8.68 (1) -> (2), (4) 28.68/8.68 (2) -> (2), (4) 28.68/8.68 (3) -> (1), (3) 28.68/8.68 (4) -> (1), (3) 28.68/8.68 28.68/8.68 This digraph is fully evaluated! 28.68/8.68 ---------------------------------------- 28.68/8.68 28.68/8.68 (13) 28.68/8.68 Obligation: 28.68/8.68 28.68/8.68 Termination digraph: 28.68/8.68 Nodes: 28.68/8.68 (1) f11964_0_transfer_Load(java.lang.Object(ARRAY(i4292:0)), java.lang.Object(ARRAY(i4558:0)), i4559:0, i4292:0, i4558:0) -> f12117_0_transfer_NONNULL(java.lang.Object(ARRAY(i4292:0)), java.lang.Object(ARRAY(i4558:0)), i4559:0, o7523:0, i4292:0, i4558:0) :|: i4559:0 < i4558:0 && i4558:0 > -1 && i4630:0 < i4292:0 && i4292:0 > -1 28.68/8.68 (2) f11964_0_transfer_Load(java.lang.Object(ARRAY(x5)), java.lang.Object(ARRAY(x6)), x7, x5, x6) -> f11964_0_transfer_Load(java.lang.Object(ARRAY(x5)), java.lang.Object(ARRAY(x6)), arith, x5, x6) :|: x6 > -1 && x7 < x6 && arith = x7 + 1 28.68/8.68 (3) f12117_0_transfer_NONNULL(java.lang.Object(ARRAY(x11)), java.lang.Object(ARRAY(x12)), x13, NULL, x11, x12) -> f11964_0_transfer_Load(java.lang.Object(ARRAY(x11)), java.lang.Object(ARRAY(x12)), x14, x11, x12) :|: TRUE && x14 = x13 + 1 28.68/8.68 (4) f12117_0_transfer_NONNULL(java.lang.Object(ARRAY(x)), java.lang.Object(ARRAY(x1)), x2, java.lang.Object(javaUtilEx.HashMap$Entry(x3)), x, x1) -> f12117_0_transfer_NONNULL(java.lang.Object(ARRAY(x)), java.lang.Object(ARRAY(x1)), x2, x3, x, x1) :|: x > -1 && x4 < x 28.68/8.68 28.68/8.68 Arcs: 28.68/8.68 (1) -> (3), (4) 28.68/8.68 (2) -> (1), (2) 28.68/8.68 (3) -> (1), (2) 28.68/8.68 (4) -> (3), (4) 28.68/8.68 28.68/8.68 This digraph is fully evaluated! 28.68/8.68 28.68/8.68 ---------------------------------------- 28.68/8.68 28.68/8.68 (14) IntTRSCompressionProof (EQUIVALENT) 28.68/8.68 Compressed rules. 28.68/8.68 ---------------------------------------- 28.68/8.68 28.68/8.68 (15) 28.68/8.68 Obligation: 28.68/8.68 Rules: 28.68/8.68 f11964_0_transfer_Load(java.lang.Object(ARRAY(i4292:0:0)), java.lang.Object(ARRAY(i4558:0:0)), i4559:0:0, i4292:0:0, i4558:0:0) -> f12117_0_transfer_NONNULL(java.lang.Object(ARRAY(i4292:0:0)), java.lang.Object(ARRAY(i4558:0:0)), i4559:0:0, o7523:0:0, i4292:0:0, i4558:0:0) :|: i4630:0:0 < i4292:0:0 && i4292:0:0 > -1 && i4558:0:0 > -1 && i4559:0:0 < i4558:0:0 28.68/8.68 f11964_0_transfer_Load(java.lang.Object(ARRAY(x5:0)), java.lang.Object(ARRAY(x6:0)), x7:0, x5:0, x6:0) -> f11964_0_transfer_Load(java.lang.Object(ARRAY(x5:0)), java.lang.Object(ARRAY(x6:0)), x7:0 + 1, x5:0, x6:0) :|: x6:0 > -1 && x7:0 < x6:0 28.68/8.68 f12117_0_transfer_NONNULL(java.lang.Object(ARRAY(x11:0)), java.lang.Object(ARRAY(x12:0)), x13:0, NULL, x11:0, x12:0) -> f11964_0_transfer_Load(java.lang.Object(ARRAY(x11:0)), java.lang.Object(ARRAY(x12:0)), x13:0 + 1, x11:0, x12:0) :|: TRUE 28.68/8.68 f12117_0_transfer_NONNULL(java.lang.Object(ARRAY(x:0)), java.lang.Object(ARRAY(x1:0)), x2:0, java.lang.Object(javaUtilEx.HashMap$Entry(x3:0)), x:0, x1:0) -> f12117_0_transfer_NONNULL(java.lang.Object(ARRAY(x:0)), java.lang.Object(ARRAY(x1:0)), x2:0, x3:0, x:0, x1:0) :|: x:0 > -1 && x:0 > x4:0 28.68/8.68 28.68/8.68 ---------------------------------------- 28.68/8.68 28.68/8.68 (16) TempFilterProof (SOUND) 28.68/8.68 Used the following sort dictionary for filtering: 28.68/8.68 f11964_0_transfer_Load(VARIABLE, VARIABLE, INTEGER, VARIABLE, VARIABLE) 28.68/8.68 java.lang.Object(VARIABLE) 28.68/8.68 ARRAY(VARIABLE) 28.68/8.68 f12117_0_transfer_NONNULL(VARIABLE, VARIABLE, VARIABLE, VARIABLE, VARIABLE, VARIABLE) 28.68/8.68 NULL() 28.68/8.68 javaUtilEx.HashMap$Entry(VARIABLE) 28.68/8.68 Replaced non-predefined constructor symbols by 0.The following proof was generated: 28.68/8.68 # AProVE Commit ID: 48fb2092695e11cc9f56e44b17a92a5f88ffb256 marcel 20180622 unpublished dirty 28.68/8.68 28.68/8.68 28.68/8.68 Termination of the given IntTRS could not be shown: 28.68/8.68 28.68/8.68 28.68/8.68 28.68/8.68 - IntTRS 28.68/8.68 - RankingReductionPairProof 28.68/8.68 28.68/8.68 Rules: 28.68/8.68 f11964_0_transfer_Load(c, c1, i4559:0:0, i4292:0:0, i4558:0:0) -> f12117_0_transfer_NONNULL(c2, c3, i4559:0:0, o7523:0:0, i4292:0:0, i4558:0:0) :|: c3 = 0 && (c2 = 0 && (c1 = 0 && c = 0)) && (i4630:0:0 < i4292:0:0 && i4292:0:0 > -1 && i4558:0:0 > -1 && i4559:0:0 < i4558:0:0) 28.68/8.68 f11964_0_transfer_Load(c4, c5, x7:0, x5:0, x6:0) -> f11964_0_transfer_Load(c6, c7, c8, x5:0, x6:0) :|: c8 = x7:0 + 1 && (c7 = 0 && (c6 = 0 && (c5 = 0 && c4 = 0))) && (x6:0 > -1 && x7:0 < x6:0) 28.68/8.68 f12117_0_transfer_NONNULL(c9, c10, x13:0, c11, x11:0, x12:0) -> f11964_0_transfer_Load(c12, c13, c14, x11:0, x12:0) :|: c14 = x13:0 + 1 && (c13 = 0 && (c12 = 0 && (c11 = 0 && (c10 = 0 && c9 = 0)))) && TRUE 28.68/8.68 f12117_0_transfer_NONNULL(c15, c16, x2:0, c17, x:0, x1:0) -> f12117_0_transfer_NONNULL(c18, c19, x2:0, x3:0, x:0, x1:0) :|: c19 = 0 && (c18 = 0 && (c17 = 0 && (c16 = 0 && c15 = 0))) && (x:0 > -1 && x:0 > x4:0) 28.68/8.68 28.68/8.68 Interpretation: 28.68/8.68 [ f11964_0_transfer_Load ] = 2*f11964_0_transfer_Load_4 + 2*f11964_0_transfer_Load_5 + -2*f11964_0_transfer_Load_3 28.68/8.68 [ f12117_0_transfer_NONNULL ] = -2*f12117_0_transfer_NONNULL_3 + 2*f12117_0_transfer_NONNULL_5 + 2*f12117_0_transfer_NONNULL_6 + -1 28.68/8.68 28.68/8.68 The following rules are decreasing: 28.68/8.68 f11964_0_transfer_Load(c, c1, i4559:0:0, i4292:0:0, i4558:0:0) -> f12117_0_transfer_NONNULL(c2, c3, i4559:0:0, o7523:0:0, i4292:0:0, i4558:0:0) :|: c3 = 0 && (c2 = 0 && (c1 = 0 && c = 0)) && (i4630:0:0 < i4292:0:0 && i4292:0:0 > -1 && i4558:0:0 > -1 && i4559:0:0 < i4558:0:0) 28.68/8.68 f11964_0_transfer_Load(c4, c5, x7:0, x5:0, x6:0) -> f11964_0_transfer_Load(c6, c7, c8, x5:0, x6:0) :|: c8 = x7:0 + 1 && (c7 = 0 && (c6 = 0 && (c5 = 0 && c4 = 0))) && (x6:0 > -1 && x7:0 < x6:0) 28.68/8.68 f12117_0_transfer_NONNULL(c9, c10, x13:0, c11, x11:0, x12:0) -> f11964_0_transfer_Load(c12, c13, c14, x11:0, x12:0) :|: c14 = x13:0 + 1 && (c13 = 0 && (c12 = 0 && (c11 = 0 && (c10 = 0 && c9 = 0)))) && TRUE 28.68/8.69 28.68/8.69 The following rules are bounded: 28.68/8.69 f11964_0_transfer_Load(c, c1, i4559:0:0, i4292:0:0, i4558:0:0) -> f12117_0_transfer_NONNULL(c2, c3, i4559:0:0, o7523:0:0, i4292:0:0, i4558:0:0) :|: c3 = 0 && (c2 = 0 && (c1 = 0 && c = 0)) && (i4630:0:0 < i4292:0:0 && i4292:0:0 > -1 && i4558:0:0 > -1 && i4559:0:0 < i4558:0:0) 28.68/8.69 28.68/8.69 28.68/8.69 28.68/8.69 - IntTRS 28.68/8.69 - RankingReductionPairProof 28.68/8.69 - IntTRS 28.68/8.69 - PolynomialOrderProcessor 28.68/8.69 28.68/8.69 Rules: 28.68/8.69 f11964_0_transfer_Load(c4, c5, x7:0, x5:0, x6:0) -> f11964_0_transfer_Load(c6, c7, c8, x5:0, x6:0) :|: c8 = x7:0 + 1 && (c7 = 0 && (c6 = 0 && (c5 = 0 && c4 = 0))) && (x6:0 > -1 && x7:0 < x6:0) 28.68/8.69 f12117_0_transfer_NONNULL(c9, c10, x13:0, c11, x11:0, x12:0) -> f11964_0_transfer_Load(c12, c13, c14, x11:0, x12:0) :|: c14 = x13:0 + 1 && (c13 = 0 && (c12 = 0 && (c11 = 0 && (c10 = 0 && c9 = 0)))) && TRUE 28.68/8.69 f12117_0_transfer_NONNULL(c15, c16, x2:0, c17, x:0, x1:0) -> f12117_0_transfer_NONNULL(c18, c19, x2:0, x3:0, x:0, x1:0) :|: c19 = 0 && (c18 = 0 && (c17 = 0 && (c16 = 0 && c15 = 0))) && (x:0 > -1 && x:0 > x4:0) 28.68/8.69 28.68/8.69 Found the following polynomial interpretation: 28.68/8.69 [f11964_0_transfer_Load(x, x1, x2, x3, x4)] = c*x + c1*x1 28.68/8.69 [f12117_0_transfer_NONNULL(x5, x6, x7, x8, x9, x10)] = 1 + c5*x5 + c6*x6 28.68/8.69 28.68/8.69 The following rules are decreasing: 28.68/8.69 f12117_0_transfer_NONNULL(c9, c10, x13:0, c11, x11:0, x12:0) -> f11964_0_transfer_Load(c12, c13, c14, x11:0, x12:0) :|: c14 = x13:0 + 1 && (c13 = 0 && (c12 = 0 && (c11 = 0 && (c10 = 0 && c9 = 0)))) && TRUE 28.68/8.69 The following rules are bounded: 28.68/8.69 f11964_0_transfer_Load(c4, c5, x7:0, x5:0, x6:0) -> f11964_0_transfer_Load(c6, c7, c8, x5:0, x6:0) :|: c8 = x7:0 + 1 && (c7 = 0 && (c6 = 0 && (c5 = 0 && c4 = 0))) && (x6:0 > -1 && x7:0 < x6:0) 28.68/8.69 f12117_0_transfer_NONNULL(c9, c10, x13:0, c11, x11:0, x12:0) -> f11964_0_transfer_Load(c12, c13, c14, x11:0, x12:0) :|: c14 = x13:0 + 1 && (c13 = 0 && (c12 = 0 && (c11 = 0 && (c10 = 0 && c9 = 0)))) && TRUE 28.68/8.69 f12117_0_transfer_NONNULL(c15, c16, x2:0, c17, x:0, x1:0) -> f12117_0_transfer_NONNULL(c18, c19, x2:0, x3:0, x:0, x1:0) :|: c19 = 0 && (c18 = 0 && (c17 = 0 && (c16 = 0 && c15 = 0))) && (x:0 > -1 && x:0 > x4:0) 28.68/8.69 28.68/8.69 28.68/8.69 - IntTRS 28.68/8.69 - RankingReductionPairProof 28.68/8.69 - IntTRS 28.68/8.69 - PolynomialOrderProcessor 28.68/8.69 - IntTRS 28.68/8.69 - RankingReductionPairProof 28.68/8.69 28.68/8.69 Rules: 28.68/8.69 f11964_0_transfer_Load(c4, c5, x7:0, x5:0, x6:0) -> f11964_0_transfer_Load(c6, c7, c8, x5:0, x6:0) :|: c8 = x7:0 + 1 && (c7 = 0 && (c6 = 0 && (c5 = 0 && c4 = 0))) && (x6:0 > -1 && x7:0 < x6:0) 28.68/8.69 f12117_0_transfer_NONNULL(c15, c16, x2:0, c17, x:0, x1:0) -> f12117_0_transfer_NONNULL(c18, c19, x2:0, x3:0, x:0, x1:0) :|: c19 = 0 && (c18 = 0 && (c17 = 0 && (c16 = 0 && c15 = 0))) && (x:0 > -1 && x:0 > x4:0) 28.68/8.69 28.68/8.69 Interpretation: 28.68/8.69 [ f11964_0_transfer_Load ] = f11964_0_transfer_Load_5 + -1*f11964_0_transfer_Load_3 28.68/8.69 [ f12117_0_transfer_NONNULL ] = 0 28.68/8.69 28.68/8.69 The following rules are decreasing: 28.68/8.69 f11964_0_transfer_Load(c4, c5, x7:0, x5:0, x6:0) -> f11964_0_transfer_Load(c6, c7, c8, x5:0, x6:0) :|: c8 = x7:0 + 1 && (c7 = 0 && (c6 = 0 && (c5 = 0 && c4 = 0))) && (x6:0 > -1 && x7:0 < x6:0) 28.68/8.69 28.68/8.69 The following rules are bounded: 28.68/8.69 f11964_0_transfer_Load(c4, c5, x7:0, x5:0, x6:0) -> f11964_0_transfer_Load(c6, c7, c8, x5:0, x6:0) :|: c8 = x7:0 + 1 && (c7 = 0 && (c6 = 0 && (c5 = 0 && c4 = 0))) && (x6:0 > -1 && x7:0 < x6:0) 28.68/8.69 f12117_0_transfer_NONNULL(c15, c16, x2:0, c17, x:0, x1:0) -> f12117_0_transfer_NONNULL(c18, c19, x2:0, x3:0, x:0, x1:0) :|: c19 = 0 && (c18 = 0 && (c17 = 0 && (c16 = 0 && c15 = 0))) && (x:0 > -1 && x:0 > x4:0) 28.68/8.69 28.68/8.69 28.68/8.69 28.68/8.69 - IntTRS 28.68/8.69 - RankingReductionPairProof 28.68/8.69 - IntTRS 28.68/8.69 - PolynomialOrderProcessor 28.68/8.69 - IntTRS 28.68/8.69 - RankingReductionPairProof 28.68/8.69 - IntTRS 28.68/8.69 28.68/8.69 Rules: 28.68/8.69 f12117_0_transfer_NONNULL(c15, c16, x2:0, c17, x:0, x1:0) -> f12117_0_transfer_NONNULL(c18, c19, x2:0, x3:0, x:0, x1:0) :|: c19 = 0 && (c18 = 0 && (c17 = 0 && (c16 = 0 && c15 = 0))) && (x:0 > -1 && x:0 > x4:0) 28.68/8.69 28.68/8.69 28.68/8.69 28.68/8.69 ---------------------------------------- 28.68/8.69 28.68/8.69 (17) 28.68/8.69 Obligation: 28.68/8.69 Rules: 28.68/8.69 f12117_0_transfer_NONNULL(java.lang.Object(ARRAY(x:0)), java.lang.Object(ARRAY(x1:0)), x2:0, java.lang.Object(javaUtilEx.HashMap$Entry(x3:0)), x:0, x1:0) -> f12117_0_transfer_NONNULL(java.lang.Object(ARRAY(x:0)), java.lang.Object(ARRAY(x1:0)), x2:0, x3:0, x:0, x1:0) :|: x:0 > -1 && x:0 > x4:0 28.68/8.69 28.68/8.69 ---------------------------------------- 28.68/8.69 28.68/8.69 (18) IRSwTTerminationDigraphProof (EQUIVALENT) 28.68/8.69 Constructed termination digraph! 28.68/8.69 Nodes: 28.68/8.69 (1) f12117_0_transfer_NONNULL(java.lang.Object(ARRAY(x:0)), java.lang.Object(ARRAY(x1:0)), x2:0, java.lang.Object(javaUtilEx.HashMap$Entry(x3:0)), x:0, x1:0) -> f12117_0_transfer_NONNULL(java.lang.Object(ARRAY(x:0)), java.lang.Object(ARRAY(x1:0)), x2:0, x3:0, x:0, x1:0) :|: x:0 > -1 && x:0 > x4:0 28.68/8.69 28.68/8.69 Arcs: 28.68/8.69 (1) -> (1) 28.68/8.69 28.68/8.69 This digraph is fully evaluated! 28.68/8.69 ---------------------------------------- 28.68/8.69 28.68/8.69 (19) 28.68/8.69 Obligation: 28.68/8.69 28.68/8.69 Termination digraph: 28.68/8.69 Nodes: 28.68/8.69 (1) f12117_0_transfer_NONNULL(java.lang.Object(ARRAY(x:0)), java.lang.Object(ARRAY(x1:0)), x2:0, java.lang.Object(javaUtilEx.HashMap$Entry(x3:0)), x:0, x1:0) -> f12117_0_transfer_NONNULL(java.lang.Object(ARRAY(x:0)), java.lang.Object(ARRAY(x1:0)), x2:0, x3:0, x:0, x1:0) :|: x:0 > -1 && x:0 > x4:0 28.68/8.69 28.68/8.69 Arcs: 28.68/8.69 (1) -> (1) 28.68/8.69 28.68/8.69 This digraph is fully evaluated! 28.68/8.69 28.68/8.69 ---------------------------------------- 28.68/8.69 28.68/8.69 (20) IntTRSUnneededArgumentFilterProof (EQUIVALENT) 28.68/8.69 Some arguments are removed because they cannot influence termination. We removed arguments according to the following replacements: 28.68/8.69 28.68/8.69 f12117_0_transfer_NONNULL(x1, x2, x3, x4, x5, x6) -> f12117_0_transfer_NONNULL(x1, x2, x4, x5, x6) 28.68/8.69 28.68/8.69 ---------------------------------------- 28.68/8.69 28.68/8.69 (21) 28.68/8.69 Obligation: 28.68/8.69 Rules: 28.68/8.69 f12117_0_transfer_NONNULL(java.lang.Object(ARRAY(x:0)), java.lang.Object(ARRAY(x1:0)), java.lang.Object(javaUtilEx.HashMap$Entry(x3:0)), x:0, x1:0) -> f12117_0_transfer_NONNULL(java.lang.Object(ARRAY(x:0)), java.lang.Object(ARRAY(x1:0)), x3:0, x:0, x1:0) :|: x:0 > -1 && x:0 > x4:0 28.68/8.69 28.68/8.69 ---------------------------------------- 28.68/8.69 28.68/8.69 (22) TempFilterProof (SOUND) 28.68/8.69 Used the following sort dictionary for filtering: 28.68/8.69 f12117_0_transfer_NONNULL(VARIABLE, VARIABLE, VARIABLE, INTEGER, VARIABLE) 28.68/8.69 java.lang.Object(VARIABLE) 28.68/8.69 ARRAY(VARIABLE) 28.68/8.69 javaUtilEx.HashMap$Entry(VARIABLE) 28.68/8.69 Removed predefined arithmetic. 28.68/8.69 ---------------------------------------- 28.68/8.69 28.68/8.69 (23) 28.68/8.69 Obligation: 28.68/8.69 Rules: 28.68/8.69 f12117_0_transfer_NONNULL(java.lang.Object(ARRAY(x:0)), java.lang.Object(ARRAY(x1:0)), java.lang.Object(javaUtilEx.HashMap$Entry(x3:0)), x1:0) -> f12117_0_transfer_NONNULL(java.lang.Object(ARRAY(x:0)), java.lang.Object(ARRAY(x1:0)), x3:0, x1:0) 28.68/8.69 28.68/8.69 ---------------------------------------- 28.68/8.69 28.68/8.69 (24) IRSwTToQDPProof (SOUND) 28.68/8.69 Removed the integers and created a QDP-Problem. 28.68/8.69 ---------------------------------------- 28.68/8.69 28.68/8.69 (25) 28.68/8.69 Obligation: 28.68/8.69 Q DP problem: 28.68/8.69 The TRS P consists of the following rules: 28.68/8.69 28.68/8.69 f12117_0_transfer_NONNULL(java.lang.Object(ARRAY(x:0)), java.lang.Object(ARRAY(x1:0)), java.lang.Object(javaUtilEx.HashMap$Entry(x3:0)), x1:0) -> f12117_0_transfer_NONNULL(java.lang.Object(ARRAY(x:0)), java.lang.Object(ARRAY(x1:0)), x3:0, x1:0) 28.68/8.69 28.68/8.69 R is empty. 28.68/8.69 Q is empty. 28.68/8.69 We have to consider all (P,Q,R)-chains. 28.68/8.69 ---------------------------------------- 28.68/8.69 28.68/8.69 (26) QDPSizeChangeProof (EQUIVALENT) 28.68/8.69 By using the subterm criterion [SUBTERM_CRITERION] together with the size-change analysis [AAECC05] we have proven that there are no infinite chains for this DP problem. 28.68/8.69 28.68/8.69 From the DPs we obtained the following set of size-change graphs: 28.68/8.69 *f12117_0_transfer_NONNULL(java.lang.Object(ARRAY(x:0)), java.lang.Object(ARRAY(x1:0)), java.lang.Object(javaUtilEx.HashMap$Entry(x3:0)), x1:0) -> f12117_0_transfer_NONNULL(java.lang.Object(ARRAY(x:0)), java.lang.Object(ARRAY(x1:0)), x3:0, x1:0) 28.68/8.69 The graph contains the following edges 1 >= 1, 2 >= 2, 3 > 3, 2 > 4, 4 >= 4 28.68/8.69 28.68/8.69 28.68/8.69 ---------------------------------------- 28.68/8.69 28.68/8.69 (27) 28.68/8.69 YES 28.68/8.69 28.68/8.69 ---------------------------------------- 28.68/8.69 28.68/8.69 (28) 28.68/8.69 Obligation: 28.68/8.69 SCC of termination graph based on JBC Program. 28.68/8.69 SCC contains nodes from the following methods: javaUtilEx.HashMap.put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; 28.68/8.69 SCC calls the following helper methods: javaUtilEx.Content.equals(Ljava/lang/Object;)Z 28.68/8.69 Performed SCC analyses: 28.68/8.69 *Used field analysis yielded the following read fields: 28.68/8.69 *javaUtilEx.HashMap$Entry: [hash, next, key] 28.68/8.69 *Marker field analysis yielded the following relations that could be markers: 28.68/8.69 28.68/8.69 ---------------------------------------- 28.68/8.69 28.68/8.69 (29) SCCToIRSProof (SOUND) 28.68/8.69 Transformed FIGraph SCCs to intTRSs. Log: 28.68/8.69 Generated rules. Obtained 57 IRulesP rules: 28.68/8.69 f10981_0_put_NULL(EOS(STATIC_10981), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), i3940, java.lang.Object(o6310sub), java.lang.Object(o6310sub)) -> f10986_0_put_NULL(EOS(STATIC_10986), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), i3940, java.lang.Object(o6310sub), java.lang.Object(o6310sub)) :|: TRUE 28.68/8.69 f10986_0_put_NULL(EOS(STATIC_10986), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), i3940, java.lang.Object(o6310sub), java.lang.Object(o6310sub)) -> f10992_0_put_Load(EOS(STATIC_10992), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), i3940, java.lang.Object(o6310sub)) :|: TRUE 28.68/8.69 f10992_0_put_Load(EOS(STATIC_10992), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), i3940, java.lang.Object(o6310sub)) -> f10997_0_put_FieldAccess(EOS(STATIC_10997), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), i3940, java.lang.Object(o6310sub), java.lang.Object(o6310sub)) :|: TRUE 28.68/8.69 f10997_0_put_FieldAccess(EOS(STATIC_10997), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), i3940, java.lang.Object(javaUtilEx.HashMap$Entry(EOC, i3957, o6322, o6320)), java.lang.Object(javaUtilEx.HashMap$Entry(EOC, i3957, o6322, o6320))) -> f11003_0_put_FieldAccess(EOS(STATIC_11003), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), i3940, java.lang.Object(javaUtilEx.HashMap$Entry(EOC, i3957, o6322, o6320)), java.lang.Object(javaUtilEx.HashMap$Entry(EOC, i3957, o6322, o6320))) :|: TRUE 28.68/8.69 f11003_0_put_FieldAccess(EOS(STATIC_11003), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), i3940, java.lang.Object(javaUtilEx.HashMap$Entry(EOC, i3957, o6322, o6320)), java.lang.Object(javaUtilEx.HashMap$Entry(EOC, i3957, o6322, o6320))) -> f11010_0_put_Load(EOS(STATIC_11010), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), i3940, java.lang.Object(javaUtilEx.HashMap$Entry(EOC, i3957, o6322, o6320)), i3957) :|: TRUE 28.68/8.69 f11010_0_put_Load(EOS(STATIC_11010), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), i3940, java.lang.Object(javaUtilEx.HashMap$Entry(EOC, i3957, o6322, o6320)), i3957) -> f11016_0_put_NE(EOS(STATIC_11016), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), i3940, java.lang.Object(javaUtilEx.HashMap$Entry(EOC, i3957, o6322, o6320)), i3957, i3940) :|: TRUE 28.68/8.69 f11016_0_put_NE(EOS(STATIC_11016), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), i3940, java.lang.Object(javaUtilEx.HashMap$Entry(EOC, i3957, o6322, o6320)), i3957, i3940) -> f11022_0_put_NE(EOS(STATIC_11022), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), i3940, java.lang.Object(javaUtilEx.HashMap$Entry(EOC, i3957, o6322, o6320)), i3957, i3940) :|: !(i3957 = i3940) 28.68/8.69 f11016_0_put_NE(EOS(STATIC_11016), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), i3940, java.lang.Object(javaUtilEx.HashMap$Entry(EOC, i3940, o6322, o6320)), i3940, i3940) -> f11023_0_put_NE(EOS(STATIC_11023), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), i3940, java.lang.Object(javaUtilEx.HashMap$Entry(EOC, i3940, o6322, o6320)), i3940, i3940) :|: i3957 = i3940 28.68/8.69 f11022_0_put_NE(EOS(STATIC_11022), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), i3940, java.lang.Object(javaUtilEx.HashMap$Entry(EOC, i3957, o6322, o6320)), i3957, i3940) -> f11027_0_put_Load(EOS(STATIC_11027), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), i3940, java.lang.Object(javaUtilEx.HashMap$Entry(EOC, i3957, o6322, o6320))) :|: !(i3957 = i3940) 28.68/8.69 f11027_0_put_Load(EOS(STATIC_11027), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), i3940, java.lang.Object(javaUtilEx.HashMap$Entry(EOC, i3957, o6322, o6320))) -> f11032_0_put_FieldAccess(EOS(STATIC_11032), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), i3940, java.lang.Object(javaUtilEx.HashMap$Entry(EOC, i3957, o6322, o6320))) :|: TRUE 28.68/8.69 f11032_0_put_FieldAccess(EOS(STATIC_11032), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), i3940, java.lang.Object(javaUtilEx.HashMap$Entry(EOC, i3957, o6322, o6320))) -> f11037_0_put_Store(EOS(STATIC_11037), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), i3940, o6322) :|: TRUE 28.68/8.69 f11037_0_put_Store(EOS(STATIC_11037), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), i3940, o6322) -> f11042_0_put_JMP(EOS(STATIC_11042), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), i3940, o6322) :|: TRUE 28.68/8.69 f11042_0_put_JMP(EOS(STATIC_11042), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), i3940, o6322) -> f11048_0_put_Load(EOS(STATIC_11048), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), i3940, o6322) :|: TRUE 28.68/8.69 f11048_0_put_Load(EOS(STATIC_11048), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), i3940, o6322) -> f10978_0_put_Load(EOS(STATIC_10978), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), i3940, o6322) :|: TRUE 28.68/8.69 f10978_0_put_Load(EOS(STATIC_10978), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), i3940, o6297) -> f10981_0_put_NULL(EOS(STATIC_10981), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), i3940, o6297, o6297) :|: TRUE 28.68/8.69 f11023_0_put_NE(EOS(STATIC_11023), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), i3940, java.lang.Object(javaUtilEx.HashMap$Entry(EOC, i3940, o6322, o6320)), i3940, i3940) -> f11028_0_put_Load(EOS(STATIC_11028), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), i3940, java.lang.Object(javaUtilEx.HashMap$Entry(EOC, i3940, o6322, o6320))) :|: TRUE 28.68/8.69 f11028_0_put_Load(EOS(STATIC_11028), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), i3940, java.lang.Object(javaUtilEx.HashMap$Entry(EOC, i3940, o6322, o6320))) -> f11033_0_put_FieldAccess(EOS(STATIC_11033), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), i3940, java.lang.Object(javaUtilEx.HashMap$Entry(EOC, i3940, o6322, o6320)), java.lang.Object(javaUtilEx.HashMap$Entry(EOC, i3940, o6322, o6320))) :|: TRUE 28.68/8.69 f11033_0_put_FieldAccess(EOS(STATIC_11033), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), i3940, java.lang.Object(javaUtilEx.HashMap$Entry(EOC, i3940, o6322, o6320)), java.lang.Object(javaUtilEx.HashMap$Entry(EOC, i3940, o6322, o6320))) -> f11038_0_put_Duplicate(EOS(STATIC_11038), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), i3940, java.lang.Object(javaUtilEx.HashMap$Entry(EOC, i3940, o6322, o6320)), o6320) :|: TRUE 28.68/8.69 f11038_0_put_Duplicate(EOS(STATIC_11038), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), i3940, java.lang.Object(javaUtilEx.HashMap$Entry(EOC, i3940, o6322, o6320)), o6320) -> f11043_0_put_Store(EOS(STATIC_11043), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), i3940, java.lang.Object(javaUtilEx.HashMap$Entry(EOC, i3940, o6322, o6320)), o6320, o6320) :|: TRUE 28.68/8.69 f11043_0_put_Store(EOS(STATIC_11043), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), i3940, java.lang.Object(javaUtilEx.HashMap$Entry(EOC, i3940, o6322, o6320)), o6320, o6320) -> f11049_0_put_Load(EOS(STATIC_11049), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), i3940, java.lang.Object(javaUtilEx.HashMap$Entry(EOC, i3940, o6322, o6320)), o6320, o6320) :|: TRUE 28.68/8.69 f11049_0_put_Load(EOS(STATIC_11049), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), i3940, java.lang.Object(javaUtilEx.HashMap$Entry(EOC, i3940, o6322, o6320)), o6320, o6320) -> f11054_0_put_EQ(EOS(STATIC_11054), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), i3940, java.lang.Object(javaUtilEx.HashMap$Entry(EOC, i3940, o6322, o6320)), o6320, o6320, java.lang.Object(javaUtilEx.Content(EOC))) :|: TRUE 28.68/8.69 f11054_0_put_EQ(EOS(STATIC_11054), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), i3940, java.lang.Object(javaUtilEx.HashMap$Entry(EOC, i3940, o6322, java.lang.Object(o6364sub))), java.lang.Object(o6364sub), java.lang.Object(o6364sub), java.lang.Object(javaUtilEx.Content(EOC))) -> f11058_0_put_EQ(EOS(STATIC_11058), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), i3940, java.lang.Object(javaUtilEx.HashMap$Entry(EOC, i3940, o6322, java.lang.Object(o6364sub))), java.lang.Object(o6364sub), java.lang.Object(o6364sub), java.lang.Object(javaUtilEx.Content(EOC))) :|: TRUE 28.68/8.69 f11054_0_put_EQ(EOS(STATIC_11054), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), i3940, java.lang.Object(javaUtilEx.HashMap$Entry(EOC, i3940, o6322, NULL)), NULL, NULL, java.lang.Object(javaUtilEx.Content(EOC))) -> f11059_0_put_EQ(EOS(STATIC_11059), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), i3940, java.lang.Object(javaUtilEx.HashMap$Entry(EOC, i3940, o6322, NULL)), NULL, NULL, java.lang.Object(javaUtilEx.Content(EOC))) :|: TRUE 28.68/8.69 f11058_0_put_EQ(EOS(STATIC_11058), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), i3940, java.lang.Object(javaUtilEx.HashMap$Entry(EOC, i3940, o6322, java.lang.Object(o6364sub))), java.lang.Object(o6364sub), java.lang.Object(o6364sub), java.lang.Object(javaUtilEx.Content(EOC))) -> f11064_0_put_Load(EOS(STATIC_11064), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), i3940, java.lang.Object(javaUtilEx.HashMap$Entry(EOC, i3940, o6322, java.lang.Object(o6364sub))), java.lang.Object(o6364sub)) :|: TRUE 28.68/8.69 f11064_0_put_Load(EOS(STATIC_11064), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), i3940, java.lang.Object(javaUtilEx.HashMap$Entry(EOC, i3940, o6322, java.lang.Object(o6364sub))), java.lang.Object(o6364sub)) -> f11069_0_put_Load(EOS(STATIC_11069), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), i3940, java.lang.Object(javaUtilEx.HashMap$Entry(EOC, i3940, o6322, java.lang.Object(o6364sub))), java.lang.Object(o6364sub), java.lang.Object(javaUtilEx.Content(EOC))) :|: TRUE 28.68/8.69 f11069_0_put_Load(EOS(STATIC_11069), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), i3940, java.lang.Object(javaUtilEx.HashMap$Entry(EOC, i3940, o6322, java.lang.Object(o6364sub))), java.lang.Object(o6364sub), java.lang.Object(javaUtilEx.Content(EOC))) -> f11075_0_put_InvokeMethod(EOS(STATIC_11075), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), i3940, java.lang.Object(javaUtilEx.HashMap$Entry(EOC, i3940, o6322, java.lang.Object(o6364sub))), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(o6364sub)) :|: TRUE 28.68/8.69 f11075_0_put_InvokeMethod(EOS(STATIC_11075), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), i3940, java.lang.Object(javaUtilEx.HashMap$Entry(EOC, i3940, o6322, java.lang.Object(o6364sub))), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(o6364sub)) -> f11080_0_equals_Load(EOS(STATIC_11080), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(o6364sub), java.lang.Object(javaUtilEx.HashMap$Entry(EOC, i3940, o6322, java.lang.Object(o6364sub))), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(o6364sub)) :|: TRUE 28.68/8.69 f11075_0_put_InvokeMethod(EOS(STATIC_11075), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), i3940, java.lang.Object(javaUtilEx.HashMap$Entry(EOC, i3940, o6322, java.lang.Object(o6364sub))), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(o6364sub)) -> f11080_1_equals_Load(EOS(STATIC_11080), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), i3940, java.lang.Object(javaUtilEx.HashMap$Entry(EOC, i3940, o6322, java.lang.Object(o6364sub))), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(o6364sub)) :|: TRUE 28.68/8.69 f11080_0_equals_Load(EOS(STATIC_11080), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(o6364sub), java.lang.Object(javaUtilEx.HashMap$Entry(EOC, i3940, o6322, java.lang.Object(o6364sub))), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(o6364sub)) -> f12333_0_equals_Load(EOS(STATIC_12333), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(o6364sub), java.lang.Object(javaUtilEx.HashMap$Entry(EOC, i3940, o6322, java.lang.Object(o6364sub))), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(o6364sub)) :|: TRUE 28.68/8.69 f11109_0_equals_Return(EOS(STATIC_11109), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), i3940, java.lang.Object(javaUtilEx.HashMap$Entry(EOC, i3940, o6322, java.lang.Object(o6440sub))), matching1) -> f11123_0_put_EQ(EOS(STATIC_11123), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), i3940, java.lang.Object(javaUtilEx.HashMap$Entry(EOC, i3940, o6322, java.lang.Object(o6440sub))), 0) :|: TRUE && matching1 = 0 28.68/8.69 f11123_0_put_EQ(EOS(STATIC_11123), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), i3940, java.lang.Object(javaUtilEx.HashMap$Entry(EOC, i3940, o6322, java.lang.Object(o6440sub))), matching1) -> f11129_0_put_Load(EOS(STATIC_11129), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), i3940, java.lang.Object(javaUtilEx.HashMap$Entry(EOC, i3940, o6322, java.lang.Object(o6440sub)))) :|: TRUE && matching1 = 0 28.68/8.69 f11129_0_put_Load(EOS(STATIC_11129), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), i3940, java.lang.Object(javaUtilEx.HashMap$Entry(EOC, i3940, o6322, java.lang.Object(o6440sub)))) -> f11138_0_put_FieldAccess(EOS(STATIC_11138), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), i3940, java.lang.Object(javaUtilEx.HashMap$Entry(EOC, i3940, o6322, java.lang.Object(o6440sub)))) :|: TRUE 28.68/8.69 f11138_0_put_FieldAccess(EOS(STATIC_11138), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), i3940, java.lang.Object(javaUtilEx.HashMap$Entry(EOC, i3940, o6322, java.lang.Object(o6440sub)))) -> f11148_0_put_Store(EOS(STATIC_11148), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), i3940, o6322) :|: TRUE 28.68/8.69 f11148_0_put_Store(EOS(STATIC_11148), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), i3940, o6322) -> f11037_0_put_Store(EOS(STATIC_11037), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), i3940, o6322) :|: TRUE 28.68/8.69 f11110_0_equals_Return(EOS(STATIC_11110), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), i3940, java.lang.Object(javaUtilEx.HashMap$Entry(EOC, i3940, o6322, java.lang.Object(javaUtilEx.Content(EOC)))), matching1) -> f11112_0_equals_Return(EOS(STATIC_11112), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), i3940, java.lang.Object(javaUtilEx.HashMap$Entry(EOC, i3940, o6322, java.lang.Object(javaUtilEx.Content(EOC)))), 0) :|: TRUE && matching1 = 0 28.68/8.69 f11112_0_equals_Return(EOS(STATIC_11112), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), i3940, java.lang.Object(javaUtilEx.HashMap$Entry(EOC, i3940, o6507, java.lang.Object(javaUtilEx.Content(EOC)))), i4115) -> f11124_0_put_EQ(EOS(STATIC_11124), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), i3940, java.lang.Object(javaUtilEx.HashMap$Entry(EOC, i3940, o6507, java.lang.Object(javaUtilEx.Content(EOC)))), i4115) :|: TRUE 28.68/8.69 f11124_0_put_EQ(EOS(STATIC_11124), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), i3940, java.lang.Object(javaUtilEx.HashMap$Entry(EOC, i3940, o6507, java.lang.Object(javaUtilEx.Content(EOC)))), matching1) -> f11131_0_put_EQ(EOS(STATIC_11131), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), i3940, java.lang.Object(javaUtilEx.HashMap$Entry(EOC, i3940, o6507, java.lang.Object(javaUtilEx.Content(EOC)))), 0) :|: TRUE && matching1 = 0 28.68/8.69 f11131_0_put_EQ(EOS(STATIC_11131), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), i3940, java.lang.Object(javaUtilEx.HashMap$Entry(EOC, i3940, o6507, java.lang.Object(javaUtilEx.Content(EOC)))), matching1) -> f11140_0_put_Load(EOS(STATIC_11140), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), i3940, java.lang.Object(javaUtilEx.HashMap$Entry(EOC, i3940, o6507, java.lang.Object(javaUtilEx.Content(EOC))))) :|: TRUE && matching1 = 0 28.68/8.69 f11140_0_put_Load(EOS(STATIC_11140), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), i3940, java.lang.Object(javaUtilEx.HashMap$Entry(EOC, i3940, o6507, java.lang.Object(javaUtilEx.Content(EOC))))) -> f11150_0_put_FieldAccess(EOS(STATIC_11150), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), i3940, java.lang.Object(javaUtilEx.HashMap$Entry(EOC, i3940, o6507, java.lang.Object(javaUtilEx.Content(EOC))))) :|: TRUE 28.68/8.69 f11150_0_put_FieldAccess(EOS(STATIC_11150), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), i3940, java.lang.Object(javaUtilEx.HashMap$Entry(EOC, i3940, o6507, java.lang.Object(javaUtilEx.Content(EOC))))) -> f11157_0_put_Store(EOS(STATIC_11157), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), i3940, o6507) :|: TRUE 28.68/8.69 f11157_0_put_Store(EOS(STATIC_11157), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), i3940, o6507) -> f11037_0_put_Store(EOS(STATIC_11037), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), i3940, o6507) :|: TRUE 28.68/8.69 f11111_0_equals_Return(EOS(STATIC_11111), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), i3940, java.lang.Object(javaUtilEx.HashMap$Entry(EOC, i3940, o6322, java.lang.Object(javaUtilEx.Content(EOC)))), matching1) -> f11112_0_equals_Return(EOS(STATIC_11112), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), i3940, java.lang.Object(javaUtilEx.HashMap$Entry(EOC, i3940, o6322, java.lang.Object(javaUtilEx.Content(EOC)))), 1) :|: TRUE && matching1 = 1 28.68/8.69 f11059_0_put_EQ(EOS(STATIC_11059), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), i3940, java.lang.Object(javaUtilEx.HashMap$Entry(EOC, i3940, o6322, NULL)), NULL, NULL, java.lang.Object(javaUtilEx.Content(EOC))) -> f11065_0_put_Load(EOS(STATIC_11065), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), i3940, java.lang.Object(javaUtilEx.HashMap$Entry(EOC, i3940, o6322, NULL)), NULL) :|: TRUE 28.68/8.69 f11065_0_put_Load(EOS(STATIC_11065), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), i3940, java.lang.Object(javaUtilEx.HashMap$Entry(EOC, i3940, o6322, NULL)), NULL) -> f11070_0_put_Load(EOS(STATIC_11070), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), i3940, java.lang.Object(javaUtilEx.HashMap$Entry(EOC, i3940, o6322, NULL)), NULL, java.lang.Object(javaUtilEx.Content(EOC))) :|: TRUE 28.68/8.69 f11070_0_put_Load(EOS(STATIC_11070), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), i3940, java.lang.Object(javaUtilEx.HashMap$Entry(EOC, i3940, o6322, NULL)), NULL, java.lang.Object(javaUtilEx.Content(EOC))) -> f11076_0_put_InvokeMethod(EOS(STATIC_11076), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), i3940, java.lang.Object(javaUtilEx.HashMap$Entry(EOC, i3940, o6322, NULL)), java.lang.Object(javaUtilEx.Content(EOC)), NULL) :|: TRUE 28.68/8.69 f11076_0_put_InvokeMethod(EOS(STATIC_11076), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), i3940, java.lang.Object(javaUtilEx.HashMap$Entry(EOC, i3940, o6322, NULL)), java.lang.Object(javaUtilEx.Content(EOC)), NULL) -> f11081_0_equals_Load(EOS(STATIC_11081), java.lang.Object(javaUtilEx.Content(EOC)), NULL, java.lang.Object(javaUtilEx.Content(EOC)), NULL) :|: TRUE 28.68/8.69 f11076_0_put_InvokeMethod(EOS(STATIC_11076), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), i3940, java.lang.Object(javaUtilEx.HashMap$Entry(EOC, i3940, o6322, NULL)), java.lang.Object(javaUtilEx.Content(EOC)), NULL) -> f11081_1_equals_Load(EOS(STATIC_11081), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), i3940, java.lang.Object(javaUtilEx.HashMap$Entry(EOC, i3940, o6322, NULL)), java.lang.Object(javaUtilEx.Content(EOC)), NULL) :|: TRUE 28.68/8.69 f11081_0_equals_Load(EOS(STATIC_11081), java.lang.Object(javaUtilEx.Content(EOC)), NULL, java.lang.Object(javaUtilEx.Content(EOC)), NULL) -> f12389_0_equals_Load(EOS(STATIC_12389), java.lang.Object(javaUtilEx.Content(EOC)), NULL, java.lang.Object(javaUtilEx.Content(EOC)), NULL) :|: TRUE 28.68/8.69 f11114_0_equals_Return(EOS(STATIC_11114), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), i3940, java.lang.Object(javaUtilEx.HashMap$Entry(EOC, i3940, o6322, NULL)), matching1) -> f11125_0_put_EQ(EOS(STATIC_11125), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), i3940, java.lang.Object(javaUtilEx.HashMap$Entry(EOC, i3940, o6322, NULL)), 0) :|: TRUE && matching1 = 0 28.68/8.69 f11125_0_put_EQ(EOS(STATIC_11125), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), i3940, java.lang.Object(javaUtilEx.HashMap$Entry(EOC, i3940, o6322, NULL)), matching1) -> f11132_0_put_Load(EOS(STATIC_11132), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), i3940, java.lang.Object(javaUtilEx.HashMap$Entry(EOC, i3940, o6322, NULL))) :|: TRUE && matching1 = 0 28.68/8.69 f11132_0_put_Load(EOS(STATIC_11132), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), i3940, java.lang.Object(javaUtilEx.HashMap$Entry(EOC, i3940, o6322, NULL))) -> f11141_0_put_FieldAccess(EOS(STATIC_11141), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), i3940, java.lang.Object(javaUtilEx.HashMap$Entry(EOC, i3940, o6322, NULL))) :|: TRUE 28.68/8.69 f11141_0_put_FieldAccess(EOS(STATIC_11141), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), i3940, java.lang.Object(javaUtilEx.HashMap$Entry(EOC, i3940, o6322, NULL))) -> f11151_0_put_Store(EOS(STATIC_11151), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), i3940, o6322) :|: TRUE 28.68/8.69 f11151_0_put_Store(EOS(STATIC_11151), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), i3940, o6322) -> f11037_0_put_Store(EOS(STATIC_11037), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), i3940, o6322) :|: TRUE 28.68/8.69 f11080_1_equals_Load(EOS(STATIC_11080), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), i3940, java.lang.Object(javaUtilEx.HashMap$Entry(EOC, i3940, o6322, java.lang.Object(o6440sub))), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(o6440sub)) -> f11109_0_equals_Return(EOS(STATIC_11109), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), i3940, java.lang.Object(javaUtilEx.HashMap$Entry(EOC, i3940, o6322, java.lang.Object(o6440sub))), 0) :|: TRUE 28.68/8.69 f11080_1_equals_Load(EOS(STATIC_11080), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), i3940, java.lang.Object(javaUtilEx.HashMap$Entry(EOC, i3940, o6322, java.lang.Object(javaUtilEx.Content(EOC)))), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(javaUtilEx.Content(EOC))) -> f11110_0_equals_Return(EOS(STATIC_11110), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), i3940, java.lang.Object(javaUtilEx.HashMap$Entry(EOC, i3940, o6322, java.lang.Object(javaUtilEx.Content(EOC)))), 0) :|: TRUE 28.68/8.69 f11080_1_equals_Load(EOS(STATIC_11080), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), i3940, java.lang.Object(javaUtilEx.HashMap$Entry(EOC, i3940, o6322, java.lang.Object(javaUtilEx.Content(EOC)))), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(javaUtilEx.Content(EOC))) -> f11111_0_equals_Return(EOS(STATIC_11111), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), i3940, java.lang.Object(javaUtilEx.HashMap$Entry(EOC, i3940, o6322, java.lang.Object(javaUtilEx.Content(EOC)))), 1) :|: TRUE 28.68/8.69 f11081_1_equals_Load(EOS(STATIC_11081), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), i3940, java.lang.Object(javaUtilEx.HashMap$Entry(EOC, i3940, o6322, NULL)), java.lang.Object(javaUtilEx.Content(EOC)), NULL) -> f11114_0_equals_Return(EOS(STATIC_11114), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), i3940, java.lang.Object(javaUtilEx.HashMap$Entry(EOC, i3940, o6322, NULL)), 0) :|: TRUE 28.68/8.69 Combined rules. Obtained 7 IRulesP rules: 28.68/8.69 f10981_0_put_NULL(EOS(STATIC_10981), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), i3940:0, java.lang.Object(javaUtilEx.HashMap$Entry(EOC, i3940:0, o6322:0, java.lang.Object(o6364sub:0))), java.lang.Object(javaUtilEx.HashMap$Entry(EOC, i3940:0, o6322:0, java.lang.Object(o6364sub:0)))) -> f10981_0_put_NULL(EOS(STATIC_10981), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), i3940:0, o6322:0, o6322:0) :|: TRUE 28.68/8.69 f10981_0_put_NULL(EOS(STATIC_10981), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), i3940:0, java.lang.Object(javaUtilEx.HashMap$Entry(EOC, i3957:0, o6322:0, o6320:0)), java.lang.Object(javaUtilEx.HashMap$Entry(EOC, i3957:0, o6322:0, o6320:0))) -> f10981_0_put_NULL(EOS(STATIC_10981), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), i3940:0, o6322:0, o6322:0) :|: i3957:0 < i3940:0 28.68/8.69 f10981_0_put_NULL(EOS(STATIC_10981), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), i3940:0, java.lang.Object(javaUtilEx.HashMap$Entry(EOC, i3957:0, o6322:0, o6320:0)), java.lang.Object(javaUtilEx.HashMap$Entry(EOC, i3957:0, o6322:0, o6320:0))) -> f10981_0_put_NULL(EOS(STATIC_10981), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), i3940:0, o6322:0, o6322:0) :|: i3957:0 > i3940:0 28.68/8.69 f10981_0_put_NULL(EOS(STATIC_10981), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), i3940:0, java.lang.Object(javaUtilEx.HashMap$Entry(EOC, i3940:0, o6322:0, java.lang.Object(javaUtilEx.Content(EOC)))), java.lang.Object(javaUtilEx.HashMap$Entry(EOC, i3940:0, o6322:0, java.lang.Object(javaUtilEx.Content(EOC))))) -> f10981_0_put_NULL(EOS(STATIC_10981), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), i3940:0, o6322:0, o6322:0) :|: TRUE 28.68/8.69 f10981_0_put_NULL(EOS(STATIC_10981), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), i3940:0, java.lang.Object(javaUtilEx.HashMap$Entry(EOC, i3940:0, o6322:0, NULL)), java.lang.Object(javaUtilEx.HashMap$Entry(EOC, i3940:0, o6322:0, NULL))) -> f10981_0_put_NULL(EOS(STATIC_10981), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), i3940:0, o6322:0, o6322:0) :|: TRUE 28.68/8.69 Removed following non-SCC rules: 28.68/8.69 f10981_0_put_NULL(EOS(STATIC_10981), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), i3940:0, java.lang.Object(javaUtilEx.HashMap$Entry(EOC, i3940:0, o6322:0, java.lang.Object(o6364sub:0))), java.lang.Object(javaUtilEx.HashMap$Entry(EOC, i3940:0, o6322:0, java.lang.Object(o6364sub:0)))) -> f12333_0_equals_Load(EOS(STATIC_12333), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(o6364sub:0), java.lang.Object(javaUtilEx.HashMap$Entry(EOC, i3940:0, o6322:0, java.lang.Object(o6364sub:0))), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(o6364sub:0)) :|: TRUE 28.68/8.69 f10981_0_put_NULL(EOS(STATIC_10981), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), i3940:0, java.lang.Object(javaUtilEx.HashMap$Entry(EOC, i3940:0, o6322:0, NULL)), java.lang.Object(javaUtilEx.HashMap$Entry(EOC, i3940:0, o6322:0, NULL))) -> f12389_0_equals_Load(EOS(STATIC_12389), java.lang.Object(javaUtilEx.Content(EOC)), NULL, java.lang.Object(javaUtilEx.Content(EOC)), NULL) :|: TRUE 28.68/8.69 Filtered constant ground arguments: 28.68/8.69 f10981_0_put_NULL(x1, x2, x3, x4, x5, x6, x7) -> f10981_0_put_NULL(x5, x6, x7) 28.68/8.69 EOS(x1) -> EOS 28.68/8.69 javaUtilEx.AbstractMap(x1) -> javaUtilEx.AbstractMap 28.68/8.69 javaUtilEx.Content(x1) -> javaUtilEx.Content 28.68/8.69 javaUtilEx.HashMap$Entry(x1, x2, x3, x4) -> javaUtilEx.HashMap$Entry(x2, x3, x4) 28.68/8.69 javaUtilEx.HashMap(x1) -> javaUtilEx.HashMap 28.68/8.69 Filtered duplicate arguments: 28.68/8.69 f10981_0_put_NULL(x1, x2, x3) -> f10981_0_put_NULL(x1, x3) 28.68/8.69 Finished conversion. Obtained 5 rules.P rules: 28.68/8.69 f10981_0_put_NULL(i3940:0, java.lang.Object(javaUtilEx.HashMap$Entry(i3940:0, o6322:0, java.lang.Object(o6364sub:0)))) -> f10981_0_put_NULL(i3940:0, o6322:0) :|: TRUE 28.68/8.69 f10981_0_put_NULL(i3940:0, java.lang.Object(javaUtilEx.HashMap$Entry(i3957:0, o6322:0, o6320:0))) -> f10981_0_put_NULL(i3940:0, o6322:0) :|: i3957:0 < i3940:0 28.68/8.69 f10981_0_put_NULL(i3940:0, java.lang.Object(javaUtilEx.HashMap$Entry(i3957:0, o6322:0, o6320:0))) -> f10981_0_put_NULL(i3940:0, o6322:0) :|: i3957:0 > i3940:0 28.68/8.69 f10981_0_put_NULL(i3940:0, java.lang.Object(javaUtilEx.HashMap$Entry(i3940:0, o6322:0, java.lang.Object(javaUtilEx.Content)))) -> f10981_0_put_NULL(i3940:0, o6322:0) :|: TRUE 28.68/8.69 f10981_0_put_NULL(i3940:0, java.lang.Object(javaUtilEx.HashMap$Entry(i3940:0, o6322:0, NULL))) -> f10981_0_put_NULL(i3940:0, o6322:0) :|: TRUE 28.68/8.69 28.68/8.69 ---------------------------------------- 28.68/8.69 28.68/8.69 (30) 28.68/8.69 Obligation: 28.68/8.69 Rules: 28.68/8.69 f10981_0_put_NULL(i3940:0, java.lang.Object(javaUtilEx.HashMap$Entry(i3940:0, o6322:0, java.lang.Object(o6364sub:0)))) -> f10981_0_put_NULL(i3940:0, o6322:0) :|: TRUE 28.68/8.69 f10981_0_put_NULL(x, java.lang.Object(javaUtilEx.HashMap$Entry(x1, x2, x3))) -> f10981_0_put_NULL(x, x2) :|: x1 < x 28.68/8.69 f10981_0_put_NULL(x4, java.lang.Object(javaUtilEx.HashMap$Entry(x5, x6, x7))) -> f10981_0_put_NULL(x4, x6) :|: x5 > x4 28.68/8.69 f10981_0_put_NULL(x8, java.lang.Object(javaUtilEx.HashMap$Entry(x8, x9, java.lang.Object(javaUtilEx.Content)))) -> f10981_0_put_NULL(x8, x9) :|: TRUE 28.68/8.69 f10981_0_put_NULL(x10, java.lang.Object(javaUtilEx.HashMap$Entry(x10, x11, NULL))) -> f10981_0_put_NULL(x10, x11) :|: TRUE 28.68/8.69 28.68/8.69 ---------------------------------------- 28.68/8.69 28.68/8.69 (31) IRSFormatTransformerProof (EQUIVALENT) 28.68/8.69 Reformatted IRS to match normalized format (transformed away non-linear left-hand sides, !=, / and %). 28.68/8.69 ---------------------------------------- 28.68/8.69 28.68/8.69 (32) 28.68/8.69 Obligation: 28.68/8.69 Rules: 28.68/8.69 f10981_0_put_NULL(i3940:0, java.lang.Object(javaUtilEx.HashMap$Entry(i3940:0, o6322:0, java.lang.Object(o6364sub:0)))) -> f10981_0_put_NULL(i3940:0, o6322:0) :|: TRUE 28.68/8.69 f10981_0_put_NULL(x, java.lang.Object(javaUtilEx.HashMap$Entry(x1, x2, x3))) -> f10981_0_put_NULL(x, x2) :|: x1 < x 28.68/8.69 f10981_0_put_NULL(x4, java.lang.Object(javaUtilEx.HashMap$Entry(x5, x6, x7))) -> f10981_0_put_NULL(x4, x6) :|: x5 > x4 28.68/8.69 f10981_0_put_NULL(x8, java.lang.Object(javaUtilEx.HashMap$Entry(x8, x9, java.lang.Object(javaUtilEx.Content)))) -> f10981_0_put_NULL(x8, x9) :|: TRUE 28.68/8.69 f10981_0_put_NULL(x10, java.lang.Object(javaUtilEx.HashMap$Entry(x10, x11, NULL))) -> f10981_0_put_NULL(x10, x11) :|: TRUE 28.68/8.69 28.68/8.69 ---------------------------------------- 28.68/8.69 28.68/8.69 (33) IRSwTTerminationDigraphProof (EQUIVALENT) 28.68/8.69 Constructed termination digraph! 28.68/8.69 Nodes: 28.68/8.69 (1) f10981_0_put_NULL(i3940:0, java.lang.Object(javaUtilEx.HashMap$Entry(i3940:0, o6322:0, java.lang.Object(o6364sub:0)))) -> f10981_0_put_NULL(i3940:0, o6322:0) :|: TRUE 28.68/8.69 (2) f10981_0_put_NULL(x, java.lang.Object(javaUtilEx.HashMap$Entry(x1, x2, x3))) -> f10981_0_put_NULL(x, x2) :|: x1 < x 28.68/8.69 (3) f10981_0_put_NULL(x4, java.lang.Object(javaUtilEx.HashMap$Entry(x5, x6, x7))) -> f10981_0_put_NULL(x4, x6) :|: x5 > x4 28.68/8.69 (4) f10981_0_put_NULL(x8, java.lang.Object(javaUtilEx.HashMap$Entry(x8, x9, java.lang.Object(javaUtilEx.Content)))) -> f10981_0_put_NULL(x8, x9) :|: TRUE 28.68/8.69 (5) f10981_0_put_NULL(x10, java.lang.Object(javaUtilEx.HashMap$Entry(x10, x11, NULL))) -> f10981_0_put_NULL(x10, x11) :|: TRUE 28.68/8.69 28.68/8.69 Arcs: 28.68/8.69 (1) -> (1), (2), (3), (4), (5) 28.68/8.69 (2) -> (1), (2), (3), (4), (5) 28.68/8.69 (3) -> (1), (2), (3), (4), (5) 28.68/8.69 (4) -> (1), (2), (3), (4), (5) 28.68/8.69 (5) -> (1), (2), (3), (4), (5) 28.68/8.69 28.68/8.69 This digraph is fully evaluated! 28.68/8.69 ---------------------------------------- 28.68/8.69 28.68/8.69 (34) 28.68/8.69 Obligation: 28.68/8.69 28.68/8.69 Termination digraph: 28.68/8.69 Nodes: 28.68/8.69 (1) f10981_0_put_NULL(i3940:0, java.lang.Object(javaUtilEx.HashMap$Entry(i3940:0, o6322:0, java.lang.Object(o6364sub:0)))) -> f10981_0_put_NULL(i3940:0, o6322:0) :|: TRUE 28.68/8.69 (2) f10981_0_put_NULL(x, java.lang.Object(javaUtilEx.HashMap$Entry(x1, x2, x3))) -> f10981_0_put_NULL(x, x2) :|: x1 < x 28.68/8.69 (3) f10981_0_put_NULL(x4, java.lang.Object(javaUtilEx.HashMap$Entry(x5, x6, x7))) -> f10981_0_put_NULL(x4, x6) :|: x5 > x4 28.68/8.69 (4) f10981_0_put_NULL(x8, java.lang.Object(javaUtilEx.HashMap$Entry(x8, x9, java.lang.Object(javaUtilEx.Content)))) -> f10981_0_put_NULL(x8, x9) :|: TRUE 28.68/8.69 (5) f10981_0_put_NULL(x10, java.lang.Object(javaUtilEx.HashMap$Entry(x10, x11, NULL))) -> f10981_0_put_NULL(x10, x11) :|: TRUE 28.68/8.69 28.68/8.69 Arcs: 28.68/8.69 (1) -> (1), (2), (3), (4), (5) 28.68/8.69 (2) -> (1), (2), (3), (4), (5) 28.68/8.69 (3) -> (1), (2), (3), (4), (5) 28.68/8.69 (4) -> (1), (2), (3), (4), (5) 28.68/8.69 (5) -> (1), (2), (3), (4), (5) 28.68/8.69 28.68/8.69 This digraph is fully evaluated! 28.68/8.69 28.68/8.69 ---------------------------------------- 28.68/8.69 28.68/8.69 (35) IntTRSCompressionProof (EQUIVALENT) 28.68/8.69 Compressed rules. 28.68/8.69 ---------------------------------------- 28.68/8.69 28.68/8.69 (36) 28.68/8.69 Obligation: 28.68/8.69 Rules: 28.68/8.69 f10981_0_put_NULL(x:0, java.lang.Object(javaUtilEx.HashMap$Entry(x1:0, x2:0, x3:0))) -> f10981_0_put_NULL(x:0, x2:0) :|: x:0 > x1:0 28.68/8.69 f10981_0_put_NULL(x4:0, java.lang.Object(javaUtilEx.HashMap$Entry(x5:0, x6:0, x7:0))) -> f10981_0_put_NULL(x4:0, x6:0) :|: x5:0 > x4:0 28.68/8.69 f10981_0_put_NULL(x8:0, java.lang.Object(javaUtilEx.HashMap$Entry(x8:0, x9:0, java.lang.Object(javaUtilEx.Content)))) -> f10981_0_put_NULL(x8:0, x9:0) :|: TRUE 28.68/8.69 f10981_0_put_NULL(i3940:0:0, java.lang.Object(javaUtilEx.HashMap$Entry(i3940:0:0, o6322:0:0, java.lang.Object(o6364sub:0:0)))) -> f10981_0_put_NULL(i3940:0:0, o6322:0:0) :|: TRUE 28.68/8.69 f10981_0_put_NULL(x10:0, java.lang.Object(javaUtilEx.HashMap$Entry(x10:0, x11:0, NULL))) -> f10981_0_put_NULL(x10:0, x11:0) :|: TRUE 28.68/8.69 28.68/8.69 ---------------------------------------- 28.68/8.69 28.68/8.69 (37) TempFilterProof (SOUND) 28.68/8.69 Used the following sort dictionary for filtering: 28.68/8.69 f10981_0_put_NULL(VARIABLE, VARIABLE) 28.68/8.69 java.lang.Object(VARIABLE) 28.68/8.69 javaUtilEx.HashMap$Entry(VARIABLE, VARIABLE, VARIABLE) 28.68/8.69 javaUtilEx.Content() 28.68/8.69 NULL() 28.68/8.69 Removed predefined arithmetic. 28.68/8.69 ---------------------------------------- 28.68/8.69 28.68/8.69 (38) 28.68/8.69 Obligation: 28.68/8.69 Rules: 28.68/8.69 f10981_0_put_NULL(x:0, java.lang.Object(javaUtilEx.HashMap$Entry(x1:0, x2:0, x3:0))) -> f10981_0_put_NULL(x:0, x2:0) 28.68/8.69 f10981_0_put_NULL(x8:0, java.lang.Object(javaUtilEx.HashMap$Entry(x8:0, x9:0, java.lang.Object(javaUtilEx.Content)))) -> f10981_0_put_NULL(x8:0, x9:0) 28.68/8.69 f10981_0_put_NULL(i3940:0:0, java.lang.Object(javaUtilEx.HashMap$Entry(i3940:0:0, o6322:0:0, java.lang.Object(o6364sub:0:0)))) -> f10981_0_put_NULL(i3940:0:0, o6322:0:0) 28.68/8.69 f10981_0_put_NULL(x10:0, java.lang.Object(javaUtilEx.HashMap$Entry(x10:0, x11:0, NULL))) -> f10981_0_put_NULL(x10:0, x11:0) 28.68/8.69 28.68/8.69 ---------------------------------------- 28.68/8.69 28.68/8.69 (39) IRSwTToQDPProof (SOUND) 28.68/8.69 Removed the integers and created a QDP-Problem. 28.68/8.69 ---------------------------------------- 28.68/8.69 28.68/8.69 (40) 28.68/8.69 Obligation: 28.68/8.69 Q DP problem: 28.68/8.69 The TRS P consists of the following rules: 28.68/8.69 28.68/8.69 f10981_0_put_NULL(x:0, java.lang.Object(javaUtilEx.HashMap$Entry(x1:0, x2:0, x3:0))) -> f10981_0_put_NULL(x:0, x2:0) 28.68/8.69 f10981_0_put_NULL(x8:0, java.lang.Object(javaUtilEx.HashMap$Entry(x8:0, x9:0, java.lang.Object(javaUtilEx.Content)))) -> f10981_0_put_NULL(x8:0, x9:0) 28.68/8.69 f10981_0_put_NULL(i3940:0:0, java.lang.Object(javaUtilEx.HashMap$Entry(i3940:0:0, o6322:0:0, java.lang.Object(o6364sub:0:0)))) -> f10981_0_put_NULL(i3940:0:0, o6322:0:0) 28.68/8.69 f10981_0_put_NULL(x10:0, java.lang.Object(javaUtilEx.HashMap$Entry(x10:0, x11:0, NULL))) -> f10981_0_put_NULL(x10:0, x11:0) 28.68/8.69 28.68/8.69 R is empty. 28.68/8.69 Q is empty. 28.68/8.69 We have to consider all (P,Q,R)-chains. 28.68/8.69 ---------------------------------------- 28.68/8.69 28.68/8.69 (41) QDPSizeChangeProof (EQUIVALENT) 28.68/8.69 By using the subterm criterion [SUBTERM_CRITERION] together with the size-change analysis [AAECC05] we have proven that there are no infinite chains for this DP problem. 28.68/8.69 28.68/8.69 From the DPs we obtained the following set of size-change graphs: 28.68/8.69 *f10981_0_put_NULL(x:0, java.lang.Object(javaUtilEx.HashMap$Entry(x1:0, x2:0, x3:0))) -> f10981_0_put_NULL(x:0, x2:0) 28.68/8.69 The graph contains the following edges 1 >= 1, 2 > 2 28.68/8.69 28.68/8.69 28.68/8.69 *f10981_0_put_NULL(x8:0, java.lang.Object(javaUtilEx.HashMap$Entry(x8:0, x9:0, java.lang.Object(javaUtilEx.Content)))) -> f10981_0_put_NULL(x8:0, x9:0) 28.68/8.69 The graph contains the following edges 1 >= 1, 2 > 1, 2 > 2 28.68/8.69 28.68/8.69 28.68/8.69 *f10981_0_put_NULL(i3940:0:0, java.lang.Object(javaUtilEx.HashMap$Entry(i3940:0:0, o6322:0:0, java.lang.Object(o6364sub:0:0)))) -> f10981_0_put_NULL(i3940:0:0, o6322:0:0) 28.68/8.69 The graph contains the following edges 1 >= 1, 2 > 1, 2 > 2 28.68/8.69 28.68/8.69 28.68/8.69 *f10981_0_put_NULL(x10:0, java.lang.Object(javaUtilEx.HashMap$Entry(x10:0, x11:0, NULL))) -> f10981_0_put_NULL(x10:0, x11:0) 28.68/8.69 The graph contains the following edges 1 >= 1, 2 > 1, 2 > 2 28.68/8.69 28.68/8.69 28.68/8.69 ---------------------------------------- 28.68/8.69 28.68/8.69 (42) 28.68/8.69 YES 28.68/8.69 28.68/8.69 ---------------------------------------- 28.68/8.69 28.68/8.69 (43) 28.68/8.69 Obligation: 28.68/8.69 SCC of termination graph based on JBC Program. 28.68/8.69 SCC contains nodes from the following methods: javaUtilEx.juHashMapCreateIteratorKeyLoop.createMap(I)LjavaUtilEx/HashMap; 28.68/8.69 SCC calls the following helper methods: javaUtilEx.HashMap.put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;, javaUtilEx.Content.hashCode()I, javaUtilEx.Content.equals(Ljava/lang/Object;)Z 28.68/8.69 Performed SCC analyses: 28.68/8.69 *Used field analysis yielded the following read fields: 28.68/8.69 *java.lang.String: [count] 28.68/8.69 *Marker field analysis yielded the following relations that could be markers: 28.68/8.69 28.68/8.69 ---------------------------------------- 28.68/8.69 28.68/8.69 (44) SCCToIRSProof (SOUND) 28.68/8.69 Transformed FIGraph SCCs to intTRSs. Log: 28.68/8.69 Generated rules. Obtained 81 IRulesP rules: 28.68/8.69 f10391_0_createMap_LE(EOS(STATIC_10391(java.lang.Object(o5979sub), i3674)), i3693, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), i3693) -> f10395_0_createMap_LE(EOS(STATIC_10395(java.lang.Object(o5979sub), i3674)), i3693, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), i3693) :|: TRUE 28.68/8.69 f10395_0_createMap_LE(EOS(STATIC_10395(java.lang.Object(o5979sub), i3674)), i3693, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), i3693) -> f10400_0_createMap_New(EOS(STATIC_10400(java.lang.Object(o5979sub), i3674)), i3693, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC)))) :|: i3693 > 0 28.68/8.69 f10400_0_createMap_New(EOS(STATIC_10400(java.lang.Object(o5979sub), i3674)), i3693, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC)))) -> f10405_0_createMap_Duplicate(EOS(STATIC_10405(java.lang.Object(o5979sub), i3674)), i3693, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC))) :|: TRUE 28.68/8.69 f10405_0_createMap_Duplicate(EOS(STATIC_10405(java.lang.Object(o5979sub), i3674)), i3693, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC))) -> f10409_0_createMap_InvokeMethod(EOS(STATIC_10409(java.lang.Object(o5979sub), i3674)), i3693, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(javaUtilEx.Content(EOC))) :|: TRUE 28.68/8.69 f10409_0_createMap_InvokeMethod(EOS(STATIC_10409(java.lang.Object(o5979sub), i3674)), i3693, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(javaUtilEx.Content(EOC))) -> f10413_0_random_FieldAccess(EOS(STATIC_10413(java.lang.Object(o5979sub), i3674)), i3693, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(javaUtilEx.Content(EOC))) :|: TRUE 28.68/8.69 f10413_0_random_FieldAccess(EOS(STATIC_10413(java.lang.Object(o5979sub), i3674)), i3693, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(javaUtilEx.Content(EOC))) -> f10423_0_random_FieldAccess(EOS(STATIC_10423(java.lang.Object(o5979sub), i3674)), i3693, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(o5979sub)) :|: TRUE 28.68/8.69 f10423_0_random_FieldAccess(EOS(STATIC_10423(java.lang.Object(o5979sub), i3674)), i3693, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(o5979sub)) -> f10428_0_random_ArrayAccess(EOS(STATIC_10428(java.lang.Object(o5979sub), i3674)), i3693, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(o5979sub), i3674) :|: TRUE 28.68/8.69 f10428_0_random_ArrayAccess(EOS(STATIC_10428(java.lang.Object(ARRAY(i3721)), i3674)), i3693, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(ARRAY(i3721)), i3674) -> f10433_0_random_ArrayAccess(EOS(STATIC_10433(java.lang.Object(ARRAY(i3721)), i3674)), i3693, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(ARRAY(i3721)), i3674) :|: i3721 >= 0 28.68/8.69 f10433_0_random_ArrayAccess(EOS(STATIC_10433(java.lang.Object(ARRAY(i3721)), i3723)), i3693, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(ARRAY(i3721)), i3723) -> f10439_0_random_ArrayAccess(EOS(STATIC_10439(java.lang.Object(ARRAY(i3721)), i3723)), i3693, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(ARRAY(i3721)), i3723) :|: TRUE 28.68/8.69 f10439_0_random_ArrayAccess(EOS(STATIC_10439(java.lang.Object(ARRAY(i3721)), i3723)), i3693, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(ARRAY(i3721)), i3723) -> f10445_0_random_ArrayAccess(EOS(STATIC_10445(java.lang.Object(ARRAY(i3721)), i3723)), i3693, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(ARRAY(i3721)), i3723) :|: TRUE 28.68/8.69 f10445_0_random_ArrayAccess(EOS(STATIC_10445(java.lang.Object(ARRAY(i3721)), i3723)), i3693, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(ARRAY(i3721)), i3723) -> f10451_0_random_Store(EOS(STATIC_10451(java.lang.Object(ARRAY(i3721)), i3723)), i3693, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(javaUtilEx.Content(EOC)), o6010) :|: i3723 < i3721 28.68/8.69 f10451_0_random_Store(EOS(STATIC_10451(java.lang.Object(ARRAY(i3721)), i3723)), i3693, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(javaUtilEx.Content(EOC)), o6010) -> f10457_0_random_FieldAccess(EOS(STATIC_10457(java.lang.Object(ARRAY(i3721)), i3723)), i3693, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(javaUtilEx.Content(EOC)), o6010) :|: TRUE 28.68/8.69 f10457_0_random_FieldAccess(EOS(STATIC_10457(java.lang.Object(ARRAY(i3721)), i3723)), i3693, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(javaUtilEx.Content(EOC)), o6010) -> f10463_0_random_ConstantStackPush(EOS(STATIC_10463(java.lang.Object(ARRAY(i3721)), i3723)), i3693, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(javaUtilEx.Content(EOC)), o6010, i3723) :|: TRUE 28.68/8.69 f10463_0_random_ConstantStackPush(EOS(STATIC_10463(java.lang.Object(ARRAY(i3721)), i3723)), i3693, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(javaUtilEx.Content(EOC)), o6010, i3723) -> f10469_0_random_IntArithmetic(EOS(STATIC_10469(java.lang.Object(ARRAY(i3721)), i3723)), i3693, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(javaUtilEx.Content(EOC)), o6010, i3723, 1) :|: TRUE 28.68/8.69 f10469_0_random_IntArithmetic(EOS(STATIC_10469(java.lang.Object(ARRAY(i3721)), i3723)), i3693, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(javaUtilEx.Content(EOC)), o6010, i3723, matching1) -> f10475_0_random_FieldAccess(EOS(STATIC_10475(java.lang.Object(ARRAY(i3721)), i3723)), i3693, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(javaUtilEx.Content(EOC)), o6010, i3723 + 1) :|: i3723 >= 0 && matching1 = 1 28.68/8.69 f10475_0_random_FieldAccess(EOS(STATIC_10475(java.lang.Object(ARRAY(i3721)), i3723)), i3693, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(javaUtilEx.Content(EOC)), o6010, i3726) -> f10482_0_random_Load(EOS(STATIC_10482(java.lang.Object(ARRAY(i3721)), i3726)), i3693, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(javaUtilEx.Content(EOC)), o6010) :|: TRUE 28.68/8.69 f10482_0_random_Load(EOS(STATIC_10482(java.lang.Object(ARRAY(i3721)), i3726)), i3693, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(javaUtilEx.Content(EOC)), o6010) -> f10489_0_random_InvokeMethod(EOS(STATIC_10489(java.lang.Object(ARRAY(i3721)), i3726)), i3693, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(javaUtilEx.Content(EOC)), o6010) :|: TRUE 28.68/8.69 f10489_0_random_InvokeMethod(EOS(STATIC_10489(java.lang.Object(ARRAY(i3721)), i3726)), i3693, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(o6021sub)) -> f10494_0_random_InvokeMethod(EOS(STATIC_10494(java.lang.Object(ARRAY(i3721)), i3726)), i3693, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(o6021sub)) :|: TRUE 28.68/8.69 f10494_0_random_InvokeMethod(EOS(STATIC_10494(java.lang.Object(ARRAY(i3721)), i3726)), i3693, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(o6027sub)) -> f10501_0_random_InvokeMethod(EOS(STATIC_10501(java.lang.Object(ARRAY(i3721)), i3726)), i3693, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(o6027sub)) :|: TRUE 28.68/8.69 f10501_0_random_InvokeMethod(EOS(STATIC_10501(java.lang.Object(ARRAY(i3721)), i3726)), i3693, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(o6027sub)) -> f10508_0_length_Load(EOS(STATIC_10508(java.lang.Object(ARRAY(i3721)), i3726)), i3693, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(o6027sub)) :|: TRUE 28.68/8.69 f10508_0_length_Load(EOS(STATIC_10508(java.lang.Object(ARRAY(i3721)), i3726)), i3693, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(o6027sub)) -> f10520_0_length_FieldAccess(EOS(STATIC_10520(java.lang.Object(ARRAY(i3721)), i3726)), i3693, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(o6027sub)) :|: TRUE 28.68/8.69 f10520_0_length_FieldAccess(EOS(STATIC_10520(java.lang.Object(ARRAY(i3721)), i3726)), i3693, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(java.lang.String(EOC, i3731))) -> f10527_0_length_FieldAccess(EOS(STATIC_10527(java.lang.Object(ARRAY(i3721)), i3726)), i3693, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(java.lang.String(EOC, i3731))) :|: i3731 >= 0 28.68/8.69 f10527_0_length_FieldAccess(EOS(STATIC_10527(java.lang.Object(ARRAY(i3721)), i3726)), i3693, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(java.lang.String(EOC, i3731))) -> f10532_0_length_Return(EOS(STATIC_10532(java.lang.Object(ARRAY(i3721)), i3726)), i3693, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(javaUtilEx.Content(EOC)), i3731) :|: TRUE 28.68/8.69 f10532_0_length_Return(EOS(STATIC_10532(java.lang.Object(ARRAY(i3721)), i3726)), i3693, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(javaUtilEx.Content(EOC)), i3731) -> f10538_0_random_Return(EOS(STATIC_10538(java.lang.Object(ARRAY(i3721)), i3726)), i3693, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(javaUtilEx.Content(EOC)), i3731) :|: TRUE 28.68/8.69 f10538_0_random_Return(EOS(STATIC_10538(java.lang.Object(ARRAY(i3721)), i3726)), i3693, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(javaUtilEx.Content(EOC)), i3731) -> f10544_0_createMap_InvokeMethod(EOS(STATIC_10544(java.lang.Object(ARRAY(i3721)), i3726)), i3693, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(javaUtilEx.Content(EOC)), i3731) :|: TRUE 28.68/8.69 f10544_0_createMap_InvokeMethod(EOS(STATIC_10544(java.lang.Object(ARRAY(i3721)), i3726)), i3693, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(javaUtilEx.Content(EOC)), i3731) -> f10549_0__init__Load(EOS(STATIC_10549(java.lang.Object(ARRAY(i3721)), i3726)), i3693, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(javaUtilEx.Content(EOC)), i3731) :|: TRUE 28.68/8.69 f10549_0__init__Load(EOS(STATIC_10549(java.lang.Object(ARRAY(i3721)), i3726)), i3693, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(javaUtilEx.Content(EOC)), i3731) -> f10562_0__init__InvokeMethod(EOS(STATIC_10562(java.lang.Object(ARRAY(i3721)), i3726)), i3693, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(javaUtilEx.Content(EOC)), i3731, java.lang.Object(javaUtilEx.Content(EOC))) :|: TRUE 28.68/8.69 f10562_0__init__InvokeMethod(EOS(STATIC_10562(java.lang.Object(ARRAY(i3721)), i3726)), i3693, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(javaUtilEx.Content(EOC)), i3731, java.lang.Object(javaUtilEx.Content(EOC))) -> f10567_0__init__Load(EOS(STATIC_10567(java.lang.Object(ARRAY(i3721)), i3726)), i3693, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(javaUtilEx.Content(EOC)), i3731) :|: TRUE 28.68/8.69 f10567_0__init__Load(EOS(STATIC_10567(java.lang.Object(ARRAY(i3721)), i3726)), i3693, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(javaUtilEx.Content(EOC)), i3731) -> f10574_0__init__Load(EOS(STATIC_10574(java.lang.Object(ARRAY(i3721)), i3726)), i3693, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), i3731, java.lang.Object(javaUtilEx.Content(EOC))) :|: TRUE 28.68/8.69 f10574_0__init__Load(EOS(STATIC_10574(java.lang.Object(ARRAY(i3721)), i3726)), i3693, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), i3731, java.lang.Object(javaUtilEx.Content(EOC))) -> f10580_0__init__FieldAccess(EOS(STATIC_10580(java.lang.Object(ARRAY(i3721)), i3726)), i3693, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(javaUtilEx.Content(EOC)), i3731) :|: TRUE 28.68/8.69 f10580_0__init__FieldAccess(EOS(STATIC_10580(java.lang.Object(ARRAY(i3721)), i3726)), i3693, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(javaUtilEx.Content(EOC)), i3731) -> f10587_0__init__Return(EOS(STATIC_10587(java.lang.Object(ARRAY(i3721)), i3726)), i3693, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC))) :|: TRUE 28.68/8.69 f10587_0__init__Return(EOS(STATIC_10587(java.lang.Object(ARRAY(i3721)), i3726)), i3693, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC))) -> f10594_0_createMap_Store(EOS(STATIC_10594(java.lang.Object(ARRAY(i3721)), i3726)), i3693, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC))) :|: TRUE 28.68/8.69 f10594_0_createMap_Store(EOS(STATIC_10594(java.lang.Object(ARRAY(i3721)), i3726)), i3693, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC))) -> f10600_0_createMap_New(EOS(STATIC_10600(java.lang.Object(ARRAY(i3721)), i3726)), i3693, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC))) :|: TRUE 28.68/8.69 f10600_0_createMap_New(EOS(STATIC_10600(java.lang.Object(ARRAY(i3721)), i3726)), i3693, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC))) -> f10607_0_createMap_Duplicate(EOS(STATIC_10607(java.lang.Object(ARRAY(i3721)), i3726)), i3693, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(javaUtilEx.Content(EOC))) :|: TRUE 28.68/8.69 f10607_0_createMap_Duplicate(EOS(STATIC_10607(java.lang.Object(ARRAY(i3721)), i3726)), i3693, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(javaUtilEx.Content(EOC))) -> f10614_0_createMap_InvokeMethod(EOS(STATIC_10614(java.lang.Object(ARRAY(i3721)), i3726)), i3693, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(javaUtilEx.Content(EOC))) :|: TRUE 28.68/8.69 f10614_0_createMap_InvokeMethod(EOS(STATIC_10614(java.lang.Object(ARRAY(i3721)), i3726)), i3693, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(javaUtilEx.Content(EOC))) -> f10621_0_random_FieldAccess(EOS(STATIC_10621(java.lang.Object(ARRAY(i3721)), i3726)), i3693, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(javaUtilEx.Content(EOC))) :|: TRUE 28.68/8.69 f10621_0_random_FieldAccess(EOS(STATIC_10621(java.lang.Object(ARRAY(i3721)), i3726)), i3693, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(javaUtilEx.Content(EOC))) -> f10632_0_random_FieldAccess(EOS(STATIC_10632(java.lang.Object(ARRAY(i3721)), i3726)), i3693, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(ARRAY(i3721))) :|: TRUE 28.68/8.69 f10632_0_random_FieldAccess(EOS(STATIC_10632(java.lang.Object(ARRAY(i3721)), i3726)), i3693, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(ARRAY(i3721))) -> f10637_0_random_ArrayAccess(EOS(STATIC_10637(java.lang.Object(ARRAY(i3721)), i3726)), i3693, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(ARRAY(i3721)), i3726) :|: TRUE 28.68/8.69 f10637_0_random_ArrayAccess(EOS(STATIC_10637(java.lang.Object(ARRAY(i3721)), i3726)), i3693, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(ARRAY(i3721)), i3726) -> f10642_0_random_ArrayAccess(EOS(STATIC_10642(java.lang.Object(ARRAY(i3721)), i3726)), i3693, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(ARRAY(i3721)), i3726) :|: TRUE 28.68/8.69 f10642_0_random_ArrayAccess(EOS(STATIC_10642(java.lang.Object(ARRAY(i3721)), i3726)), i3693, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(ARRAY(i3721)), i3726) -> f10647_0_random_Store(EOS(STATIC_10647(java.lang.Object(ARRAY(i3721)), i3726)), i3693, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(javaUtilEx.Content(EOC)), o6108) :|: i3726 < i3721 28.68/8.69 f10647_0_random_Store(EOS(STATIC_10647(java.lang.Object(ARRAY(i3721)), i3726)), i3693, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(javaUtilEx.Content(EOC)), o6108) -> f10652_0_random_FieldAccess(EOS(STATIC_10652(java.lang.Object(ARRAY(i3721)), i3726)), i3693, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(javaUtilEx.Content(EOC)), o6108) :|: TRUE 28.68/8.69 f10652_0_random_FieldAccess(EOS(STATIC_10652(java.lang.Object(ARRAY(i3721)), i3726)), i3693, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(javaUtilEx.Content(EOC)), o6108) -> f10654_0_random_ConstantStackPush(EOS(STATIC_10654(java.lang.Object(ARRAY(i3721)), i3726)), i3693, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(javaUtilEx.Content(EOC)), o6108, i3726) :|: TRUE 28.68/8.69 f10654_0_random_ConstantStackPush(EOS(STATIC_10654(java.lang.Object(ARRAY(i3721)), i3726)), i3693, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(javaUtilEx.Content(EOC)), o6108, i3726) -> f10657_0_random_IntArithmetic(EOS(STATIC_10657(java.lang.Object(ARRAY(i3721)), i3726)), i3693, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(javaUtilEx.Content(EOC)), o6108, i3726, 1) :|: TRUE 28.68/8.69 f10657_0_random_IntArithmetic(EOS(STATIC_10657(java.lang.Object(ARRAY(i3721)), i3726)), i3693, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(javaUtilEx.Content(EOC)), o6108, i3726, matching1) -> f10660_0_random_FieldAccess(EOS(STATIC_10660(java.lang.Object(ARRAY(i3721)), i3726)), i3693, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(javaUtilEx.Content(EOC)), o6108, i3726 + 1) :|: i3726 > 0 && matching1 = 1 28.68/8.69 f10660_0_random_FieldAccess(EOS(STATIC_10660(java.lang.Object(ARRAY(i3721)), i3726)), i3693, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(javaUtilEx.Content(EOC)), o6108, i3814) -> f10662_0_random_Load(EOS(STATIC_10662(java.lang.Object(ARRAY(i3721)), i3814)), i3693, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(javaUtilEx.Content(EOC)), o6108) :|: TRUE 28.68/8.69 f10662_0_random_Load(EOS(STATIC_10662(java.lang.Object(ARRAY(i3721)), i3814)), i3693, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(javaUtilEx.Content(EOC)), o6108) -> f10665_0_random_InvokeMethod(EOS(STATIC_10665(java.lang.Object(ARRAY(i3721)), i3814)), i3693, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(javaUtilEx.Content(EOC)), o6108) :|: TRUE 28.68/8.69 f10665_0_random_InvokeMethod(EOS(STATIC_10665(java.lang.Object(ARRAY(i3721)), i3814)), i3693, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(o6121sub)) -> f10667_0_random_InvokeMethod(EOS(STATIC_10667(java.lang.Object(ARRAY(i3721)), i3814)), i3693, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(o6121sub)) :|: TRUE 28.68/8.69 f10667_0_random_InvokeMethod(EOS(STATIC_10667(java.lang.Object(ARRAY(i3721)), i3814)), i3693, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(o6123sub)) -> f10670_0_random_InvokeMethod(EOS(STATIC_10670(java.lang.Object(ARRAY(i3721)), i3814)), i3693, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(o6123sub)) :|: TRUE 28.68/8.69 f10670_0_random_InvokeMethod(EOS(STATIC_10670(java.lang.Object(ARRAY(i3721)), i3814)), i3693, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(o6123sub)) -> f10674_0_length_Load(EOS(STATIC_10674(java.lang.Object(ARRAY(i3721)), i3814)), i3693, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(o6123sub)) :|: TRUE 28.68/8.69 f10674_0_length_Load(EOS(STATIC_10674(java.lang.Object(ARRAY(i3721)), i3814)), i3693, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(o6123sub)) -> f10679_0_length_FieldAccess(EOS(STATIC_10679(java.lang.Object(ARRAY(i3721)), i3814)), i3693, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(o6123sub)) :|: TRUE 28.68/8.69 f10679_0_length_FieldAccess(EOS(STATIC_10679(java.lang.Object(ARRAY(i3721)), i3814)), i3693, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(java.lang.String(EOC, i3827))) -> f10683_0_length_FieldAccess(EOS(STATIC_10683(java.lang.Object(ARRAY(i3721)), i3814)), i3693, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(java.lang.String(EOC, i3827))) :|: i3827 >= 0 28.68/8.69 f10683_0_length_FieldAccess(EOS(STATIC_10683(java.lang.Object(ARRAY(i3721)), i3814)), i3693, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(java.lang.String(EOC, i3827))) -> f10685_0_length_Return(EOS(STATIC_10685(java.lang.Object(ARRAY(i3721)), i3814)), i3693, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(javaUtilEx.Content(EOC)), i3827) :|: TRUE 28.68/8.69 f10685_0_length_Return(EOS(STATIC_10685(java.lang.Object(ARRAY(i3721)), i3814)), i3693, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(javaUtilEx.Content(EOC)), i3827) -> f10688_0_random_Return(EOS(STATIC_10688(java.lang.Object(ARRAY(i3721)), i3814)), i3693, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(javaUtilEx.Content(EOC)), i3827) :|: TRUE 28.68/8.69 f10688_0_random_Return(EOS(STATIC_10688(java.lang.Object(ARRAY(i3721)), i3814)), i3693, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(javaUtilEx.Content(EOC)), i3827) -> f10692_0_createMap_InvokeMethod(EOS(STATIC_10692(java.lang.Object(ARRAY(i3721)), i3814)), i3693, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(javaUtilEx.Content(EOC)), i3827) :|: TRUE 28.68/8.69 f10692_0_createMap_InvokeMethod(EOS(STATIC_10692(java.lang.Object(ARRAY(i3721)), i3814)), i3693, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(javaUtilEx.Content(EOC)), i3827) -> f10695_0__init__Load(EOS(STATIC_10695(java.lang.Object(ARRAY(i3721)), i3814)), i3693, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(javaUtilEx.Content(EOC)), i3827) :|: TRUE 28.68/8.69 f10695_0__init__Load(EOS(STATIC_10695(java.lang.Object(ARRAY(i3721)), i3814)), i3693, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(javaUtilEx.Content(EOC)), i3827) -> f10701_0__init__InvokeMethod(EOS(STATIC_10701(java.lang.Object(ARRAY(i3721)), i3814)), i3693, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(javaUtilEx.Content(EOC)), i3827, java.lang.Object(javaUtilEx.Content(EOC))) :|: TRUE 28.68/8.69 f10701_0__init__InvokeMethod(EOS(STATIC_10701(java.lang.Object(ARRAY(i3721)), i3814)), i3693, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(javaUtilEx.Content(EOC)), i3827, java.lang.Object(javaUtilEx.Content(EOC))) -> f10704_0__init__Load(EOS(STATIC_10704(java.lang.Object(ARRAY(i3721)), i3814)), i3693, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(javaUtilEx.Content(EOC)), i3827) :|: TRUE 28.68/8.69 f10704_0__init__Load(EOS(STATIC_10704(java.lang.Object(ARRAY(i3721)), i3814)), i3693, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(javaUtilEx.Content(EOC)), i3827) -> f10708_0__init__Load(EOS(STATIC_10708(java.lang.Object(ARRAY(i3721)), i3814)), i3693, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(javaUtilEx.Content(EOC)), i3827, java.lang.Object(javaUtilEx.Content(EOC))) :|: TRUE 28.68/8.69 f10708_0__init__Load(EOS(STATIC_10708(java.lang.Object(ARRAY(i3721)), i3814)), i3693, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(javaUtilEx.Content(EOC)), i3827, java.lang.Object(javaUtilEx.Content(EOC))) -> f10712_0__init__FieldAccess(EOS(STATIC_10712(java.lang.Object(ARRAY(i3721)), i3814)), i3693, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(javaUtilEx.Content(EOC)), i3827) :|: TRUE 28.68/8.69 f10712_0__init__FieldAccess(EOS(STATIC_10712(java.lang.Object(ARRAY(i3721)), i3814)), i3693, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(javaUtilEx.Content(EOC)), i3827) -> f10716_0__init__Return(EOS(STATIC_10716(java.lang.Object(ARRAY(i3721)), i3814)), i3693, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(javaUtilEx.Content(EOC))) :|: TRUE 28.68/8.69 f10716_0__init__Return(EOS(STATIC_10716(java.lang.Object(ARRAY(i3721)), i3814)), i3693, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(javaUtilEx.Content(EOC))) -> f10720_0_createMap_Store(EOS(STATIC_10720(java.lang.Object(ARRAY(i3721)), i3814)), i3693, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(javaUtilEx.Content(EOC))) :|: TRUE 28.68/8.69 f10720_0_createMap_Store(EOS(STATIC_10720(java.lang.Object(ARRAY(i3721)), i3814)), i3693, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(javaUtilEx.Content(EOC))) -> f10723_0_createMap_Load(EOS(STATIC_10723(java.lang.Object(ARRAY(i3721)), i3814)), i3693, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(javaUtilEx.Content(EOC))) :|: TRUE 28.68/8.69 f10723_0_createMap_Load(EOS(STATIC_10723(java.lang.Object(ARRAY(i3721)), i3814)), i3693, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(javaUtilEx.Content(EOC))) -> f10727_0_createMap_Load(EOS(STATIC_10727(java.lang.Object(ARRAY(i3721)), i3814)), i3693, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC)))) :|: TRUE 28.68/8.69 f10727_0_createMap_Load(EOS(STATIC_10727(java.lang.Object(ARRAY(i3721)), i3814)), i3693, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC)))) -> f10731_0_createMap_Load(EOS(STATIC_10731(java.lang.Object(ARRAY(i3721)), i3814)), i3693, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC))) :|: TRUE 28.68/8.69 f10731_0_createMap_Load(EOS(STATIC_10731(java.lang.Object(ARRAY(i3721)), i3814)), i3693, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC))) -> f10735_0_createMap_InvokeMethod(EOS(STATIC_10735(java.lang.Object(ARRAY(i3721)), i3814)), i3693, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(javaUtilEx.Content(EOC))) :|: TRUE 28.68/8.69 f10735_0_createMap_InvokeMethod(EOS(STATIC_10735(java.lang.Object(ARRAY(i3721)), i3814)), i3693, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(javaUtilEx.Content(EOC))) -> f10739_0_put_Load(EOS(STATIC_10739(java.lang.Object(ARRAY(i3721)), i3814)), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(javaUtilEx.Content(EOC))) :|: i3694 >= 1 && i3693 >= 1 && i3814 > 1 && i3694 >= i3693 28.68/8.69 f10735_0_createMap_InvokeMethod(EOS(STATIC_10735(java.lang.Object(ARRAY(i3721)), i3814)), i3693, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(javaUtilEx.Content(EOC))) -> f10739_1_put_Load(EOS(STATIC_10739(java.lang.Object(ARRAY(i3721)), i3814)), i3693, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(javaUtilEx.Content(EOC))) :|: i3694 >= 1 && i3693 >= 1 && i3814 > 1 && i3694 >= i3693 28.68/8.69 f10739_0_put_Load(EOS(STATIC_10739(java.lang.Object(ARRAY(i3721)), i3814)), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(javaUtilEx.Content(EOC))) -> f12603_0_put_Load(EOS(STATIC_12603(java.lang.Object(ARRAY(i3721)), i3814)), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(javaUtilEx.Content(EOC))) :|: TRUE 28.68/8.69 f11214_0_put_Return(EOS(STATIC_11214(java.lang.Object(ARRAY(i4208)), i4210)), i3693, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC)))) -> f11219_0_createMap_StackPop(EOS(STATIC_11219(java.lang.Object(ARRAY(i4208)), i4210)), i3693, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC)))) :|: TRUE 28.68/8.69 f11219_0_createMap_StackPop(EOS(STATIC_11219(java.lang.Object(ARRAY(i4208)), i4210)), i3693, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC)))) -> f11224_0_createMap_Inc(EOS(STATIC_11224(java.lang.Object(ARRAY(i4208)), i4210)), i3693, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC)))) :|: TRUE 28.68/8.69 f11224_0_createMap_Inc(EOS(STATIC_11224(java.lang.Object(ARRAY(i4208)), i4210)), i3693, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC)))) -> f11229_0_createMap_JMP(EOS(STATIC_11229(java.lang.Object(ARRAY(i4208)), i4210)), i3693 + -1, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC)))) :|: TRUE 28.68/8.69 f11229_0_createMap_JMP(EOS(STATIC_11229(java.lang.Object(ARRAY(i4208)), i4210)), i4223, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC)))) -> f11234_0_createMap_Load(EOS(STATIC_11234(java.lang.Object(ARRAY(i4208)), i4210)), i4223, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC)))) :|: TRUE 28.68/8.69 f11234_0_createMap_Load(EOS(STATIC_11234(java.lang.Object(ARRAY(i4208)), i4210)), i4223, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC)))) -> f10388_0_createMap_Load(EOS(STATIC_10388(java.lang.Object(ARRAY(i4208)), i4210)), i4223, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC)))) :|: TRUE 28.68/8.69 f10388_0_createMap_Load(EOS(STATIC_10388(java.lang.Object(o5979sub), i3674)), i3676, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC)))) -> f10391_0_createMap_LE(EOS(STATIC_10391(java.lang.Object(o5979sub), i3674)), i3676, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), i3676) :|: TRUE 28.68/8.69 f11307_0_put_Return(EOS(STATIC_11307(java.lang.Object(ARRAY(i4269)), i4271)), i3693, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), NULL) -> f11311_0_createMap_StackPop(EOS(STATIC_11311(java.lang.Object(ARRAY(i4269)), i4271)), i3693, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), NULL) :|: TRUE 28.68/8.69 f11311_0_createMap_StackPop(EOS(STATIC_11311(java.lang.Object(ARRAY(i4269)), i4271)), i3693, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), NULL) -> f11315_0_createMap_Inc(EOS(STATIC_11315(java.lang.Object(ARRAY(i4269)), i4271)), i3693, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC)))) :|: TRUE 28.68/8.69 f11315_0_createMap_Inc(EOS(STATIC_11315(java.lang.Object(ARRAY(i4269)), i4271)), i3693, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC)))) -> f11224_0_createMap_Inc(EOS(STATIC_11224(java.lang.Object(ARRAY(i4269)), i4271)), i3693, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC)))) :|: TRUE 28.68/8.69 f12044_0_put_Return(EOS(STATIC_12044(java.lang.Object(ARRAY(i4620)), i4622)), i3693, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), NULL) -> f11307_0_put_Return(EOS(STATIC_11307(java.lang.Object(ARRAY(i4620)), i4622)), i3693, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), NULL) :|: TRUE 28.68/8.69 f10739_1_put_Load(EOS(STATIC_10739(java.lang.Object(ARRAY(i4208)), i4210)), i3693, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(javaUtilEx.Content(EOC))) -> f11214_0_put_Return(EOS(STATIC_11214(java.lang.Object(ARRAY(i4208)), i4210)), i3693, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC)))) :|: TRUE 28.68/8.69 f10739_1_put_Load(EOS(STATIC_10739(java.lang.Object(ARRAY(i4269)), i4271)), i3693, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(javaUtilEx.Content(EOC))) -> f11307_0_put_Return(EOS(STATIC_11307(java.lang.Object(ARRAY(i4269)), i4271)), i3693, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), NULL) :|: TRUE 28.68/8.69 f10739_1_put_Load(EOS(STATIC_10739(java.lang.Object(ARRAY(i4620)), i4622)), i3693, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(javaUtilEx.Content(EOC))) -> f12044_0_put_Return(EOS(STATIC_12044(java.lang.Object(ARRAY(i4620)), i4622)), i3693, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), NULL) :|: TRUE 28.68/8.69 Combined rules. Obtained 2 IRulesP rules: 28.68/8.69 f10391_0_createMap_LE(EOS(STATIC_10391(java.lang.Object(ARRAY(i3721:0)), i3674:0)), i3693:0, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), i3693:0) -> f10391_0_createMap_LE(EOS(STATIC_10391(java.lang.Object(ARRAY(i3721:0)), i3674:0 + 2)), i3693:0 - 1, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), i3693:0 - 1) :|: i3721:0 > i3674:0 + 1 && i3693:0 > 0 && i3721:0 > -1 && i3674:0 > -1 && i3731:0 > -1 && i3827:0 > -1 && i3694:0 > 0 && i3694:0 >= i3693:0 28.68/8.69 Removed following non-SCC rules: 28.68/8.69 f10391_0_createMap_LE(EOS(STATIC_10391(java.lang.Object(ARRAY(i3721:0)), i3674:0)), i3693:0, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), i3693:0) -> f12603_0_put_Load(EOS(STATIC_12603(java.lang.Object(ARRAY(i3721:0)), i3674:0 + 2)), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC))), java.lang.Object(javaUtilEx.Content(EOC)), java.lang.Object(javaUtilEx.Content(EOC))) :|: i3721:0 > i3674:0 + 1 && i3693:0 > 0 && i3721:0 > -1 && i3674:0 > -1 && i3731:0 > -1 && i3827:0 > -1 && i3694:0 > 0 && i3694:0 >= i3693:0 28.68/8.69 Filtered constant ground arguments: 28.68/8.69 f10391_0_createMap_LE(x1, x2, x3, x4) -> f10391_0_createMap_LE(x1, x2, x4) 28.68/8.69 javaUtilEx.AbstractMap(x1) -> javaUtilEx.AbstractMap 28.68/8.69 javaUtilEx.HashMap(x1) -> javaUtilEx.HashMap 28.68/8.69 Filtered duplicate arguments: 28.68/8.69 f10391_0_createMap_LE(x1, x2, x3) -> f10391_0_createMap_LE(x1, x3) 28.68/8.69 Finished conversion. Obtained 1 rules.P rules: 28.68/8.69 f10391_0_createMap_LE(i3693:0, i3721:0, i3674:0) -> f10391_0_createMap_LE(i3693:0 - 1, i3721:0, i3674:0 + 2) :|: i3693:0 > 0 && i3721:0 > i3674:0 + 1 && i3721:0 > -1 && i3674:0 > -1 && i3731:0 > -1 && i3827:0 > -1 && i3694:0 >= i3693:0 && i3694:0 > 0 28.68/8.69 28.68/8.69 ---------------------------------------- 28.68/8.69 28.68/8.69 (45) 28.68/8.69 Obligation: 28.68/8.69 Rules: 28.68/8.69 f10391_0_createMap_LE(i3693:0, i3721:0, i3674:0) -> f10391_0_createMap_LE(i3693:0 - 1, i3721:0, i3674:0 + 2) :|: i3693:0 > 0 && i3721:0 > i3674:0 + 1 && i3721:0 > -1 && i3674:0 > -1 && i3731:0 > -1 && i3827:0 > -1 && i3694:0 >= i3693:0 && i3694:0 > 0 28.68/8.69 28.68/8.69 ---------------------------------------- 28.68/8.69 28.68/8.69 (46) IRSFormatTransformerProof (EQUIVALENT) 28.68/8.69 Reformatted IRS to match normalized format (transformed away non-linear left-hand sides, !=, / and %). 28.68/8.69 ---------------------------------------- 28.68/8.69 28.68/8.69 (47) 28.68/8.69 Obligation: 28.68/8.69 Rules: 28.68/8.69 f10391_0_createMap_LE(i3693:0, i3721:0, i3674:0) -> f10391_0_createMap_LE(arith, i3721:0, arith1) :|: i3693:0 > 0 && i3721:0 > i3674:0 + 1 && i3721:0 > -1 && i3674:0 > -1 && i3731:0 > -1 && i3827:0 > -1 && i3694:0 >= i3693:0 && i3694:0 > 0 && arith = i3693:0 - 1 && arith1 = i3674:0 + 2 28.68/8.69 28.68/8.69 ---------------------------------------- 28.68/8.69 28.68/8.69 (48) IRSwTTerminationDigraphProof (EQUIVALENT) 28.68/8.69 Constructed termination digraph! 28.68/8.69 Nodes: 28.68/8.69 (1) f10391_0_createMap_LE(i3693:0, i3721:0, i3674:0) -> f10391_0_createMap_LE(arith, i3721:0, arith1) :|: i3693:0 > 0 && i3721:0 > i3674:0 + 1 && i3721:0 > -1 && i3674:0 > -1 && i3731:0 > -1 && i3827:0 > -1 && i3694:0 >= i3693:0 && i3694:0 > 0 && arith = i3693:0 - 1 && arith1 = i3674:0 + 2 28.68/8.69 28.68/8.69 Arcs: 28.68/8.69 (1) -> (1) 28.68/8.69 28.68/8.69 This digraph is fully evaluated! 28.68/8.69 ---------------------------------------- 28.68/8.69 28.68/8.69 (49) 28.68/8.69 Obligation: 28.68/8.69 28.68/8.69 Termination digraph: 28.68/8.69 Nodes: 28.68/8.69 (1) f10391_0_createMap_LE(i3693:0, i3721:0, i3674:0) -> f10391_0_createMap_LE(arith, i3721:0, arith1) :|: i3693:0 > 0 && i3721:0 > i3674:0 + 1 && i3721:0 > -1 && i3674:0 > -1 && i3731:0 > -1 && i3827:0 > -1 && i3694:0 >= i3693:0 && i3694:0 > 0 && arith = i3693:0 - 1 && arith1 = i3674:0 + 2 28.68/8.69 28.68/8.69 Arcs: 28.68/8.69 (1) -> (1) 28.68/8.69 28.68/8.69 This digraph is fully evaluated! 28.68/8.69 28.68/8.69 ---------------------------------------- 28.68/8.69 28.68/8.69 (50) IntTRSCompressionProof (EQUIVALENT) 28.68/8.69 Compressed rules. 28.68/8.69 ---------------------------------------- 28.68/8.69 28.68/8.69 (51) 28.68/8.69 Obligation: 28.68/8.69 Rules: 28.68/8.69 f10391_0_createMap_LE(i3693:0:0, i3721:0:0, i3674:0:0) -> f10391_0_createMap_LE(i3693:0:0 - 1, i3721:0:0, i3674:0:0 + 2) :|: i3694:0:0 >= i3693:0:0 && i3694:0:0 > 0 && i3827:0:0 > -1 && i3731:0:0 > -1 && i3674:0:0 > -1 && i3721:0:0 > -1 && i3721:0:0 > i3674:0:0 + 1 && i3693:0:0 > 0 28.68/8.69 28.68/8.69 ---------------------------------------- 28.68/8.69 28.68/8.69 (52) TempFilterProof (SOUND) 28.68/8.69 Used the following sort dictionary for filtering: 28.68/8.69 f10391_0_createMap_LE(INTEGER, INTEGER, INTEGER) 28.68/8.69 Replaced non-predefined constructor symbols by 0. 28.68/8.69 ---------------------------------------- 28.68/8.69 28.68/8.69 (53) 28.68/8.69 Obligation: 28.68/8.69 Rules: 28.68/8.69 f10391_0_createMap_LE(i3693:0:0, i3721:0:0, i3674:0:0) -> f10391_0_createMap_LE(c, i3721:0:0, c1) :|: c1 = i3674:0:0 + 2 && c = i3693:0:0 - 1 && (i3694:0:0 >= i3693:0:0 && i3694:0:0 > 0 && i3827:0:0 > -1 && i3731:0:0 > -1 && i3674:0:0 > -1 && i3721:0:0 > -1 && i3721:0:0 > i3674:0:0 + 1 && i3693:0:0 > 0) 28.68/8.69 28.68/8.69 ---------------------------------------- 28.68/8.69 28.68/8.69 (54) PolynomialOrderProcessor (EQUIVALENT) 28.68/8.69 Found the following polynomial interpretation: 28.68/8.69 [f10391_0_createMap_LE(x, x1, x2)] = x 28.68/8.69 28.68/8.69 The following rules are decreasing: 28.68/8.69 f10391_0_createMap_LE(i3693:0:0, i3721:0:0, i3674:0:0) -> f10391_0_createMap_LE(c, i3721:0:0, c1) :|: c1 = i3674:0:0 + 2 && c = i3693:0:0 - 1 && (i3694:0:0 >= i3693:0:0 && i3694:0:0 > 0 && i3827:0:0 > -1 && i3731:0:0 > -1 && i3674:0:0 > -1 && i3721:0:0 > -1 && i3721:0:0 > i3674:0:0 + 1 && i3693:0:0 > 0) 28.68/8.69 The following rules are bounded: 28.68/8.69 f10391_0_createMap_LE(i3693:0:0, i3721:0:0, i3674:0:0) -> f10391_0_createMap_LE(c, i3721:0:0, c1) :|: c1 = i3674:0:0 + 2 && c = i3693:0:0 - 1 && (i3694:0:0 >= i3693:0:0 && i3694:0:0 > 0 && i3827:0:0 > -1 && i3731:0:0 > -1 && i3674:0:0 > -1 && i3721:0:0 > -1 && i3721:0:0 > i3674:0:0 + 1 && i3693:0:0 > 0) 28.68/8.69 28.68/8.69 ---------------------------------------- 28.68/8.69 28.68/8.69 (55) 28.68/8.69 YES 28.68/8.69 28.68/8.69 ---------------------------------------- 28.68/8.69 28.68/8.69 (56) 28.68/8.69 Obligation: 28.68/8.69 SCC of termination graph based on JBC Program. 28.68/8.69 SCC contains nodes from the following methods: javaUtilEx.juHashMapCreateIteratorKeyLoop.main([Ljava/lang/String;)V 28.68/8.69 SCC calls the following helper methods: 28.68/8.69 Performed SCC analyses: 28.68/8.69 *Used field analysis yielded the following read fields: 28.68/8.69 *javaUtilEx.HashMap$HashIterator: [index, next, this$0, expectedModCount] 28.68/8.69 *javaUtilEx.HashMap$Entry: [key, next] 28.68/8.69 *javaUtilEx.HashMap: [modCount, table] 28.68/8.69 *Marker field analysis yielded the following relations that could be markers: 28.68/8.69 *javaUtilEx.HashMap$HashIterator.index > i4455 (Introduced counter i4651) 28.68/8.69 ---------------------------------------- 28.68/8.69 28.68/8.69 (57) SCCToIRSProof (SOUND) 28.68/8.69 Transformed FIGraph SCCs to intTRSs. Log: 28.68/8.69 Generated rules. Obtained 90 IRulesP rules: 28.68/8.69 f11855_0_nextEntry_GE(EOS(STATIC_11855), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, NULL, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, NULL, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7169, NULL)), java.lang.Object(ARRAY(i4454)), i4455, i4454, i4651) -> f11859_0_nextEntry_Load(EOS(STATIC_11859), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, NULL, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, NULL, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7169, NULL)), java.lang.Object(ARRAY(i4454)), i4651) :|: i4455 < i4454 28.68/8.69 f11859_0_nextEntry_Load(EOS(STATIC_11859), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, NULL, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, NULL, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7169, NULL)), java.lang.Object(ARRAY(i4454)), i4651) -> f11863_0_nextEntry_Load(EOS(STATIC_11863), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, NULL, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, NULL, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7169, NULL)), java.lang.Object(ARRAY(i4454)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, NULL, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), i4651) :|: TRUE 28.68/8.69 f11863_0_nextEntry_Load(EOS(STATIC_11863), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, NULL, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, NULL, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7169, NULL)), java.lang.Object(ARRAY(i4454)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, NULL, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), i4651) -> f11867_0_nextEntry_Load(EOS(STATIC_11867), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, NULL, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, NULL, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7169, NULL)), java.lang.Object(ARRAY(i4454)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, NULL, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(ARRAY(i4454)), i4651) :|: TRUE 28.68/8.69 f11867_0_nextEntry_Load(EOS(STATIC_11867), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, NULL, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, NULL, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7169, NULL)), java.lang.Object(ARRAY(i4454)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, NULL, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(ARRAY(i4454)), i4651) -> f11871_0_nextEntry_Duplicate(EOS(STATIC_11871), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, NULL, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, NULL, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7169, NULL)), java.lang.Object(ARRAY(i4454)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, NULL, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(ARRAY(i4454)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, NULL, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), i4651) :|: TRUE 28.68/8.69 f11871_0_nextEntry_Duplicate(EOS(STATIC_11871), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, NULL, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, NULL, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7169, NULL)), java.lang.Object(ARRAY(i4454)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, NULL, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(ARRAY(i4454)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, NULL, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), i4651) -> f11874_0_nextEntry_FieldAccess(EOS(STATIC_11874), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, NULL, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, NULL, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7169, NULL)), java.lang.Object(ARRAY(i4454)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, NULL, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(ARRAY(i4454)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, NULL, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, NULL, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), i4651) :|: TRUE 28.68/8.69 f11874_0_nextEntry_FieldAccess(EOS(STATIC_11874), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, NULL, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, NULL, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7169, NULL)), java.lang.Object(ARRAY(i4454)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, NULL, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(ARRAY(i4454)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, NULL, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, NULL, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), i4651) -> f11877_0_nextEntry_Duplicate(EOS(STATIC_11877), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, NULL, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, NULL, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7169, NULL)), java.lang.Object(ARRAY(i4454)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, NULL, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(ARRAY(i4454)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, NULL, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), i4455, i4651) :|: TRUE 28.68/8.69 f11877_0_nextEntry_Duplicate(EOS(STATIC_11877), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, NULL, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, NULL, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7169, NULL)), java.lang.Object(ARRAY(i4454)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, NULL, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(ARRAY(i4454)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, NULL, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), i4455, i4651) -> f11880_0_nextEntry_ConstantStackPush(EOS(STATIC_11880), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, NULL, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, NULL, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7169, NULL)), java.lang.Object(ARRAY(i4454)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, NULL, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(ARRAY(i4454)), i4455, java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, NULL, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), i4455, i4651) :|: TRUE 28.68/8.69 f11880_0_nextEntry_ConstantStackPush(EOS(STATIC_11880), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, NULL, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, NULL, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7169, NULL)), java.lang.Object(ARRAY(i4454)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, NULL, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(ARRAY(i4454)), i4455, java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, NULL, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), i4455, i4651) -> f11882_0_nextEntry_IntArithmetic(EOS(STATIC_11882), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, NULL, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, NULL, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7169, NULL)), java.lang.Object(ARRAY(i4454)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, NULL, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(ARRAY(i4454)), i4455, java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, NULL, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), i4455, 1, i4651) :|: TRUE 28.68/8.69 f11882_0_nextEntry_IntArithmetic(EOS(STATIC_11882), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, NULL, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, NULL, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7169, NULL)), java.lang.Object(ARRAY(i4454)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, NULL, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(ARRAY(i4454)), i4455, java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, NULL, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), i4455, matching1, i4651) -> f11885_0_nextEntry_FieldAccess(EOS(STATIC_11885), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, NULL, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, NULL, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7169, NULL)), java.lang.Object(ARRAY(i4454)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, NULL, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(ARRAY(i4454)), i4455, java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, NULL, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), i4455 + 1, i4651) :|: TRUE && matching1 = 1 28.68/8.69 f11885_0_nextEntry_FieldAccess(EOS(STATIC_11885), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, NULL, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, NULL, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7169, NULL)), java.lang.Object(ARRAY(i4454)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, NULL, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(ARRAY(i4454)), i4455, java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, NULL, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), i4516, i4651) -> f11889_0_nextEntry_ArrayAccess(EOS(STATIC_11889), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4516, NULL, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4516, NULL, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7169, NULL)), java.lang.Object(ARRAY(i4454)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4516, NULL, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(ARRAY(i4454)), i4455, i4651 + 1) :|: i4651 >= 0 28.68/8.69 f11889_0_nextEntry_ArrayAccess(EOS(STATIC_11889), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4516, NULL, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4516, NULL, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7169, NULL)), java.lang.Object(ARRAY(i4454)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4516, NULL, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(ARRAY(i4454)), i4518, i4651) -> f11894_0_nextEntry_ArrayAccess(EOS(STATIC_11894), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4516, NULL, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4516, NULL, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7169, NULL)), java.lang.Object(ARRAY(i4454)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4516, NULL, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(ARRAY(i4454)), i4518, i4651) :|: TRUE 28.68/8.69 f11894_0_nextEntry_ArrayAccess(EOS(STATIC_11894), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4516, NULL, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4516, NULL, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7169, NULL)), java.lang.Object(ARRAY(i4454)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4516, NULL, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(ARRAY(i4454)), i4518, i4651) -> f11898_0_nextEntry_ArrayAccess(EOS(STATIC_11898), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4516, NULL, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4516, NULL, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7169, NULL)), java.lang.Object(ARRAY(i4454)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4516, NULL, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(ARRAY(i4454)), i4518, i4651) :|: TRUE 28.68/8.69 f11898_0_nextEntry_ArrayAccess(EOS(STATIC_11898), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4516, NULL, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4516, NULL, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7169, NULL)), java.lang.Object(ARRAY(i4454)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4516, NULL, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(ARRAY(i4454)), i4518, i4651) -> f11903_0_nextEntry_Duplicate(EOS(STATIC_11903), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4516, NULL, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4516, NULL, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7169, NULL)), java.lang.Object(ARRAY(i4454)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4516, NULL, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), o7258, i4651) :|: i4518 < i4454 28.68/8.69 f11903_0_nextEntry_Duplicate(EOS(STATIC_11903), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4516, NULL, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4516, NULL, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7169, NULL)), java.lang.Object(ARRAY(i4454)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4516, NULL, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), o7258, i4651) -> f11910_0_nextEntry_FieldAccess(EOS(STATIC_11910), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4516, NULL, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4516, NULL, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7169, NULL)), java.lang.Object(ARRAY(i4454)), o7258, java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4516, NULL, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), o7258, i4651) :|: TRUE 28.68/8.69 f11910_0_nextEntry_FieldAccess(EOS(STATIC_11910), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4516, NULL, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4516, NULL, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7169, NULL)), java.lang.Object(ARRAY(i4454)), o7258, java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4516, NULL, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), o7258, i4651) -> f11914_0_nextEntry_NONNULL(EOS(STATIC_11914), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4516, o7258, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4516, o7258, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7169, NULL)), java.lang.Object(ARRAY(i4454)), o7258, i4651) :|: TRUE 28.68/8.69 f11914_0_nextEntry_NONNULL(EOS(STATIC_11914), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4516, java.lang.Object(o7316sub), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4516, java.lang.Object(o7316sub), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7169, NULL)), java.lang.Object(ARRAY(i4454)), java.lang.Object(o7316sub), i4651) -> f11920_0_nextEntry_NONNULL(EOS(STATIC_11920), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4516, java.lang.Object(o7316sub), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4516, java.lang.Object(o7316sub), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7169, NULL)), java.lang.Object(ARRAY(i4454)), java.lang.Object(o7316sub), i4651) :|: TRUE 28.68/8.69 f11914_0_nextEntry_NONNULL(EOS(STATIC_11914), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4516, NULL, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4516, NULL, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7169, NULL)), java.lang.Object(ARRAY(i4454)), NULL, i4651) -> f11921_0_nextEntry_NONNULL(EOS(STATIC_11921), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4516, NULL, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4516, NULL, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7169, NULL)), java.lang.Object(ARRAY(i4454)), NULL, i4651) :|: TRUE 28.68/8.69 f11920_0_nextEntry_NONNULL(EOS(STATIC_11920), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4516, java.lang.Object(o7316sub), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4516, java.lang.Object(o7316sub), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7169, NULL)), java.lang.Object(ARRAY(i4454)), java.lang.Object(o7316sub), i4651) -> f11926_0_nextEntry_Load(EOS(STATIC_11926), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4516, java.lang.Object(o7316sub), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4516, java.lang.Object(o7316sub), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7169, NULL)), i4651) :|: TRUE 28.68/8.69 f11926_0_nextEntry_Load(EOS(STATIC_11926), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4516, java.lang.Object(o7316sub), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4516, java.lang.Object(o7316sub), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7169, NULL)), i4651) -> f11931_0_nextEntry_Load(EOS(STATIC_11931), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4516, java.lang.Object(o7316sub), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7169, NULL)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4516, java.lang.Object(o7316sub), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), i4651) :|: TRUE 28.68/8.69 f11931_0_nextEntry_Load(EOS(STATIC_11931), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4516, java.lang.Object(o7316sub), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7169, NULL)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4516, java.lang.Object(o7316sub), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), i4651) -> f11937_0_nextEntry_FieldAccess(EOS(STATIC_11937), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4516, java.lang.Object(o7316sub), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7169, NULL)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4516, java.lang.Object(o7316sub), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7169, NULL)), i4651) :|: TRUE 28.68/8.69 f11937_0_nextEntry_FieldAccess(EOS(STATIC_11937), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4516, java.lang.Object(o7316sub), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7169, NULL)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4516, java.lang.Object(o7316sub), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7169, NULL)), i4651) -> f11943_0_nextEntry_Load(EOS(STATIC_11943), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4516, java.lang.Object(o7316sub), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7169, NULL)), i4651) :|: TRUE 28.68/8.69 f11943_0_nextEntry_Load(EOS(STATIC_11943), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4516, java.lang.Object(o7316sub), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7169, NULL)), i4651) -> f11948_0_nextEntry_Return(EOS(STATIC_11948), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4516, java.lang.Object(o7316sub), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7169, NULL)), i4651) :|: TRUE 28.68/8.69 f11948_0_nextEntry_Return(EOS(STATIC_11948), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4516, java.lang.Object(o7316sub), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7169, NULL)), i4651) -> f11954_0_next_InvokeMethod(EOS(STATIC_11954), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4516, java.lang.Object(o7316sub), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7169, NULL)), i4651) :|: TRUE 28.68/8.69 f11954_0_next_InvokeMethod(EOS(STATIC_11954), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4516, java.lang.Object(o7316sub), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7169, NULL)), i4651) -> f11960_0_getKey_Load(EOS(STATIC_11960), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4516, java.lang.Object(o7316sub), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7169, NULL)), i4651) :|: TRUE 28.68/8.69 f11960_0_getKey_Load(EOS(STATIC_11960), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4516, java.lang.Object(o7316sub), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7169, NULL)), i4651) -> f11965_0_getKey_FieldAccess(EOS(STATIC_11965), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4516, java.lang.Object(o7316sub), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7169, NULL)), i4651) :|: TRUE 28.68/8.69 f11965_0_getKey_FieldAccess(EOS(STATIC_11965), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4516, java.lang.Object(o7316sub), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7169, NULL)), i4651) -> f11968_0_getKey_Return(EOS(STATIC_11968), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4516, java.lang.Object(o7316sub), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), i4651) :|: TRUE 28.68/8.69 f11968_0_getKey_Return(EOS(STATIC_11968), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4516, java.lang.Object(o7316sub), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), i4651) -> f11971_0_next_Return(EOS(STATIC_11971), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4516, java.lang.Object(o7316sub), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), i4651) :|: TRUE 28.68/8.69 f11971_0_next_Return(EOS(STATIC_11971), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4516, java.lang.Object(o7316sub), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), i4651) -> f11975_0_main_StackPop(EOS(STATIC_11975), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4516, java.lang.Object(o7316sub), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), i4651) :|: TRUE 28.68/8.69 f11975_0_main_StackPop(EOS(STATIC_11975), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4516, java.lang.Object(o7316sub), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), i4651) -> f11979_0_main_JMP(EOS(STATIC_11979), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4516, java.lang.Object(o7316sub), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), i4651) :|: TRUE 28.68/8.69 f11979_0_main_JMP(EOS(STATIC_11979), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4516, java.lang.Object(o7316sub), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), i4651) -> f11983_0_main_Load(EOS(STATIC_11983), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4516, java.lang.Object(o7316sub), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), i4651) :|: TRUE 28.68/8.69 f11983_0_main_Load(EOS(STATIC_11983), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4516, java.lang.Object(o7316sub), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), i4651) -> f11695_0_main_Load(EOS(STATIC_11695), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4516, java.lang.Object(o7316sub), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), i4651) :|: TRUE 28.68/8.69 f11695_0_main_Load(EOS(STATIC_11695), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, java.lang.Object(o7074sub), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), i4651) -> f11700_0_main_InvokeMethod(EOS(STATIC_11700), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, java.lang.Object(o7074sub), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, java.lang.Object(o7074sub), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), i4651) :|: TRUE 28.68/8.69 f11700_0_main_InvokeMethod(EOS(STATIC_11700), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, java.lang.Object(o7074sub), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, java.lang.Object(o7074sub), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), i4651) -> f11705_0_hasNext_Load(EOS(STATIC_11705), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, java.lang.Object(o7074sub), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, java.lang.Object(o7074sub), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), i4651) :|: TRUE 28.68/8.69 f11705_0_hasNext_Load(EOS(STATIC_11705), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, java.lang.Object(o7074sub), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, java.lang.Object(o7074sub), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), i4651) -> f11712_0_hasNext_FieldAccess(EOS(STATIC_11712), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, java.lang.Object(o7074sub), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, java.lang.Object(o7074sub), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), i4651) :|: TRUE 28.68/8.69 f11712_0_hasNext_FieldAccess(EOS(STATIC_11712), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, java.lang.Object(o7074sub), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, java.lang.Object(o7074sub), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), i4651) -> f11717_0_hasNext_NULL(EOS(STATIC_11717), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, java.lang.Object(o7074sub), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(o7074sub), i4651) :|: TRUE 28.68/8.69 f11717_0_hasNext_NULL(EOS(STATIC_11717), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, java.lang.Object(o7074sub), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(o7074sub), i4651) -> f11719_0_hasNext_ConstantStackPush(EOS(STATIC_11719), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, java.lang.Object(o7074sub), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), i4651) :|: TRUE 28.68/8.69 f11719_0_hasNext_ConstantStackPush(EOS(STATIC_11719), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, java.lang.Object(o7074sub), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), i4651) -> f11724_0_hasNext_JMP(EOS(STATIC_11724), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, java.lang.Object(o7074sub), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), 1, i4651) :|: TRUE 28.68/8.69 f11724_0_hasNext_JMP(EOS(STATIC_11724), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, java.lang.Object(o7074sub), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), matching1, i4651) -> f11728_0_hasNext_Return(EOS(STATIC_11728), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, java.lang.Object(o7074sub), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), 1, i4651) :|: TRUE && matching1 = 1 28.68/8.69 f11728_0_hasNext_Return(EOS(STATIC_11728), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, java.lang.Object(o7074sub), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), matching1, i4651) -> f11731_0_main_EQ(EOS(STATIC_11731), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, java.lang.Object(o7074sub), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), 1, i4651) :|: TRUE && matching1 = 1 28.68/8.69 f11731_0_main_EQ(EOS(STATIC_11731), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, java.lang.Object(o7074sub), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), matching1, i4651) -> f11735_0_main_Load(EOS(STATIC_11735), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, java.lang.Object(o7074sub), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), i4651) :|: 1 > 0 && matching1 = 1 28.68/8.69 f11735_0_main_Load(EOS(STATIC_11735), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, java.lang.Object(o7074sub), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), i4651) -> f11738_0_main_InvokeMethod(EOS(STATIC_11738), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, java.lang.Object(o7074sub), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, java.lang.Object(o7074sub), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), i4651) :|: TRUE 28.68/8.69 f11738_0_main_InvokeMethod(EOS(STATIC_11738), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, java.lang.Object(o7074sub), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, java.lang.Object(o7074sub), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), i4651) -> f11741_0_next_Load(EOS(STATIC_11741), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, java.lang.Object(o7074sub), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, java.lang.Object(o7074sub), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), i4651) :|: TRUE 28.68/8.69 f11741_0_next_Load(EOS(STATIC_11741), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, java.lang.Object(o7074sub), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, java.lang.Object(o7074sub), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), i4651) -> f11748_0_next_InvokeMethod(EOS(STATIC_11748), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, java.lang.Object(o7074sub), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, java.lang.Object(o7074sub), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), i4651) :|: TRUE 28.68/8.69 f11748_0_next_InvokeMethod(EOS(STATIC_11748), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, java.lang.Object(o7074sub), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, java.lang.Object(o7074sub), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), i4651) -> f11751_0_nextEntry_Load(EOS(STATIC_11751), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, java.lang.Object(o7074sub), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, java.lang.Object(o7074sub), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), i4651) :|: TRUE 28.68/8.69 f11751_0_nextEntry_Load(EOS(STATIC_11751), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, java.lang.Object(o7074sub), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, java.lang.Object(o7074sub), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), i4651) -> f11758_0_nextEntry_FieldAccess(EOS(STATIC_11758), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, java.lang.Object(o7074sub), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, java.lang.Object(o7074sub), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, java.lang.Object(o7074sub), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), i4651) :|: TRUE 28.68/8.69 f11758_0_nextEntry_FieldAccess(EOS(STATIC_11758), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, java.lang.Object(o7074sub), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, java.lang.Object(o7074sub), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, java.lang.Object(o7074sub), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), i4651) -> f11762_0_nextEntry_FieldAccess(EOS(STATIC_11762), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, java.lang.Object(o7074sub), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, java.lang.Object(o7074sub), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i4651) :|: TRUE 28.68/8.69 f11762_0_nextEntry_FieldAccess(EOS(STATIC_11762), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, java.lang.Object(o7074sub), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, java.lang.Object(o7074sub), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i4651) -> f11766_0_nextEntry_Load(EOS(STATIC_11766), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, java.lang.Object(o7074sub), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, java.lang.Object(o7074sub), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), i3709, i4651) :|: TRUE 28.68/8.69 f11766_0_nextEntry_Load(EOS(STATIC_11766), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, java.lang.Object(o7074sub), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, java.lang.Object(o7074sub), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), i3709, i4651) -> f11770_0_nextEntry_FieldAccess(EOS(STATIC_11770), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, java.lang.Object(o7074sub), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, java.lang.Object(o7074sub), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), i3709, java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, java.lang.Object(o7074sub), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), i4651) :|: TRUE 28.68/8.69 f11770_0_nextEntry_FieldAccess(EOS(STATIC_11770), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, java.lang.Object(o7074sub), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, java.lang.Object(o7074sub), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), i3709, java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, java.lang.Object(o7074sub), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), i4651) -> f11774_0_nextEntry_EQ(EOS(STATIC_11774), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, java.lang.Object(o7074sub), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, java.lang.Object(o7074sub), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), i3709, i3709, i4651) :|: TRUE 28.68/8.69 f11774_0_nextEntry_EQ(EOS(STATIC_11774), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, java.lang.Object(o7074sub), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, java.lang.Object(o7074sub), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), i3709, i3709, i4651) -> f11779_0_nextEntry_Load(EOS(STATIC_11779), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, java.lang.Object(o7074sub), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, java.lang.Object(o7074sub), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), i4651) :|: TRUE 28.68/8.69 f11779_0_nextEntry_Load(EOS(STATIC_11779), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, java.lang.Object(o7074sub), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, java.lang.Object(o7074sub), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), i4651) -> f11784_0_nextEntry_FieldAccess(EOS(STATIC_11784), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, java.lang.Object(o7074sub), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, java.lang.Object(o7074sub), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, java.lang.Object(o7074sub), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), i4651) :|: TRUE 28.68/8.69 f11784_0_nextEntry_FieldAccess(EOS(STATIC_11784), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, java.lang.Object(o7074sub), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, java.lang.Object(o7074sub), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, java.lang.Object(o7074sub), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), i4651) -> f11787_0_nextEntry_Store(EOS(STATIC_11787), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, java.lang.Object(o7074sub), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, java.lang.Object(o7074sub), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(o7074sub), i4651) :|: TRUE 28.68/8.69 f11787_0_nextEntry_Store(EOS(STATIC_11787), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, java.lang.Object(o7074sub), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, java.lang.Object(o7074sub), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(o7074sub), i4651) -> f11792_0_nextEntry_Load(EOS(STATIC_11792), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, java.lang.Object(o7074sub), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, java.lang.Object(o7074sub), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(o7074sub), i4651) :|: TRUE 28.68/8.69 f11792_0_nextEntry_Load(EOS(STATIC_11792), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, java.lang.Object(o7074sub), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, java.lang.Object(o7074sub), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(o7074sub), i4651) -> f11796_0_nextEntry_NONNULL(EOS(STATIC_11796), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, java.lang.Object(o7074sub), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, java.lang.Object(o7074sub), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(o7074sub), java.lang.Object(o7074sub), i4651) :|: TRUE 28.68/8.69 f11796_0_nextEntry_NONNULL(EOS(STATIC_11796), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, java.lang.Object(o7074sub), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, java.lang.Object(o7074sub), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(o7074sub), java.lang.Object(o7074sub), i4651) -> f11799_0_nextEntry_Load(EOS(STATIC_11799), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, java.lang.Object(o7074sub), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, java.lang.Object(o7074sub), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(o7074sub), i4651) :|: TRUE 28.68/8.69 f11799_0_nextEntry_Load(EOS(STATIC_11799), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, java.lang.Object(o7074sub), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, java.lang.Object(o7074sub), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(o7074sub), i4651) -> f11804_0_nextEntry_Load(EOS(STATIC_11804), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, java.lang.Object(o7074sub), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, java.lang.Object(o7074sub), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(o7074sub), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, java.lang.Object(o7074sub), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), i4651) :|: TRUE 28.68/8.69 f11804_0_nextEntry_Load(EOS(STATIC_11804), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, java.lang.Object(o7074sub), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, java.lang.Object(o7074sub), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(o7074sub), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, java.lang.Object(o7074sub), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), i4651) -> f11809_0_nextEntry_FieldAccess(EOS(STATIC_11809), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, java.lang.Object(o7074sub), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, java.lang.Object(o7074sub), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(o7074sub), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, java.lang.Object(o7074sub), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(o7074sub), i4651) :|: TRUE 28.68/8.69 f11809_0_nextEntry_FieldAccess(EOS(STATIC_11809), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7169, o7171)), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7169, o7171)), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7169, o7171)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7169, o7171)), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7169, o7171)), i4651) -> f11811_0_nextEntry_FieldAccess(EOS(STATIC_11811), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7169, o7171)), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7169, o7171)), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7169, o7171)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7169, o7171)), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7169, o7171)), i4651) :|: TRUE 28.68/8.69 f11811_0_nextEntry_FieldAccess(EOS(STATIC_11811), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7169, o7171)), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7169, o7171)), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7169, o7171)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7169, o7171)), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7169, o7171)), i4651) -> f11815_0_nextEntry_Duplicate(EOS(STATIC_11815), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7169, o7171)), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7169, o7171)), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7169, o7171)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7169, o7171)), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), o7171, i4651) :|: TRUE 28.68/8.69 f11815_0_nextEntry_Duplicate(EOS(STATIC_11815), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7169, o7171)), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7169, o7171)), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7169, o7171)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7169, o7171)), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), o7171, i4651) -> f11819_0_nextEntry_FieldAccess(EOS(STATIC_11819), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7169, o7171)), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7169, o7171)), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7169, o7171)), o7171, java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7169, o7171)), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), o7171, i4651) :|: TRUE 28.68/8.69 f11819_0_nextEntry_FieldAccess(EOS(STATIC_11819), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7169, o7171)), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7169, o7171)), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7169, o7171)), o7171, java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7169, o7171)), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), o7171, i4651) -> f11822_0_nextEntry_NONNULL(EOS(STATIC_11822), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, o7171, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, o7171, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7169, o7171)), o7171, i4651) :|: TRUE 28.68/8.69 f11822_0_nextEntry_NONNULL(EOS(STATIC_11822), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, java.lang.Object(o7190sub), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, java.lang.Object(o7190sub), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7169, java.lang.Object(o7190sub))), java.lang.Object(o7190sub), i4651) -> f11825_0_nextEntry_NONNULL(EOS(STATIC_11825), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, java.lang.Object(o7190sub), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, java.lang.Object(o7190sub), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7169, java.lang.Object(o7190sub))), java.lang.Object(o7190sub), i4651) :|: TRUE 28.68/8.69 f11822_0_nextEntry_NONNULL(EOS(STATIC_11822), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, NULL, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, NULL, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7169, NULL)), NULL, i4651) -> f11826_0_nextEntry_NONNULL(EOS(STATIC_11826), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, NULL, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, NULL, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7169, NULL)), NULL, i4651) :|: TRUE 28.68/8.69 f11825_0_nextEntry_NONNULL(EOS(STATIC_11825), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, java.lang.Object(o7190sub), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, java.lang.Object(o7190sub), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7169, java.lang.Object(o7190sub))), java.lang.Object(o7190sub), i4651) -> f11828_0_nextEntry_Load(EOS(STATIC_11828), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, java.lang.Object(o7190sub), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, java.lang.Object(o7190sub), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7169, java.lang.Object(o7190sub))), i4651) :|: TRUE 28.68/8.69 f11828_0_nextEntry_Load(EOS(STATIC_11828), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, java.lang.Object(o7190sub), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, java.lang.Object(o7190sub), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7169, java.lang.Object(o7190sub))), i4651) -> f11831_0_nextEntry_Load(EOS(STATIC_11831), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, java.lang.Object(o7190sub), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7169, java.lang.Object(o7190sub))), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, java.lang.Object(o7190sub), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), i4651) :|: TRUE 28.68/8.69 f11831_0_nextEntry_Load(EOS(STATIC_11831), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, java.lang.Object(o7190sub), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7169, java.lang.Object(o7190sub))), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, java.lang.Object(o7190sub), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), i4651) -> f11834_0_nextEntry_FieldAccess(EOS(STATIC_11834), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, java.lang.Object(o7190sub), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7169, java.lang.Object(o7190sub))), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, java.lang.Object(o7190sub), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7169, java.lang.Object(o7190sub))), i4651) :|: TRUE 28.68/8.69 f11834_0_nextEntry_FieldAccess(EOS(STATIC_11834), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, java.lang.Object(o7190sub), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7169, java.lang.Object(o7190sub))), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, java.lang.Object(o7190sub), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7169, java.lang.Object(o7190sub))), i4651) -> f11837_0_nextEntry_Load(EOS(STATIC_11837), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, java.lang.Object(o7190sub), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7169, java.lang.Object(o7190sub))), i4651) :|: TRUE 28.68/8.69 f11837_0_nextEntry_Load(EOS(STATIC_11837), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, java.lang.Object(o7190sub), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7169, java.lang.Object(o7190sub))), i4651) -> f11840_0_nextEntry_Return(EOS(STATIC_11840), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, java.lang.Object(o7190sub), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7169, java.lang.Object(o7190sub))), i4651) :|: TRUE 28.68/8.69 f11840_0_nextEntry_Return(EOS(STATIC_11840), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, java.lang.Object(o7190sub), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7169, java.lang.Object(o7190sub))), i4651) -> f11843_0_next_InvokeMethod(EOS(STATIC_11843), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, java.lang.Object(o7190sub), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7169, java.lang.Object(o7190sub))), i4651) :|: TRUE 28.68/8.69 f11843_0_next_InvokeMethod(EOS(STATIC_11843), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, java.lang.Object(o7190sub), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7169, java.lang.Object(o7190sub))), i4651) -> f11846_0_getKey_Load(EOS(STATIC_11846), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, java.lang.Object(o7190sub), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7169, java.lang.Object(o7190sub))), i4651) :|: TRUE 28.68/8.69 f11846_0_getKey_Load(EOS(STATIC_11846), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, java.lang.Object(o7190sub), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7169, java.lang.Object(o7190sub))), i4651) -> f11850_0_getKey_FieldAccess(EOS(STATIC_11850), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, java.lang.Object(o7190sub), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7169, java.lang.Object(o7190sub))), i4651) :|: TRUE 28.68/8.69 f11850_0_getKey_FieldAccess(EOS(STATIC_11850), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, java.lang.Object(o7190sub), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7169, java.lang.Object(o7190sub))), i4651) -> f11853_0_getKey_Return(EOS(STATIC_11853), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, java.lang.Object(o7190sub), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), i4651) :|: TRUE 28.68/8.69 f11853_0_getKey_Return(EOS(STATIC_11853), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, java.lang.Object(o7190sub), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), i4651) -> f11857_0_next_Return(EOS(STATIC_11857), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, java.lang.Object(o7190sub), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), i4651) :|: TRUE 28.68/8.69 f11857_0_next_Return(EOS(STATIC_11857), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, java.lang.Object(o7190sub), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), i4651) -> f11861_0_main_StackPop(EOS(STATIC_11861), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, java.lang.Object(o7190sub), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), i4651) :|: TRUE 28.68/8.69 f11861_0_main_StackPop(EOS(STATIC_11861), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, java.lang.Object(o7190sub), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), i4651) -> f11865_0_main_JMP(EOS(STATIC_11865), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, java.lang.Object(o7190sub), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), i4651) :|: TRUE 28.68/8.69 f11865_0_main_JMP(EOS(STATIC_11865), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, java.lang.Object(o7190sub), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), i4651) -> f11869_0_main_Load(EOS(STATIC_11869), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, java.lang.Object(o7190sub), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), i4651) :|: TRUE 28.68/8.69 f11869_0_main_Load(EOS(STATIC_11869), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, java.lang.Object(o7190sub), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), i4651) -> f11695_0_main_Load(EOS(STATIC_11695), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, java.lang.Object(o7190sub), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), i4651) :|: TRUE 28.68/8.69 f11826_0_nextEntry_NONNULL(EOS(STATIC_11826), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, NULL, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, NULL, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7169, NULL)), NULL, i4651) -> f11829_0_nextEntry_Load(EOS(STATIC_11829), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, NULL, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, NULL, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7169, NULL)), i4651) :|: TRUE 28.68/8.69 f11829_0_nextEntry_Load(EOS(STATIC_11829), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, NULL, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, NULL, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7169, NULL)), i4651) -> f11832_0_nextEntry_FieldAccess(EOS(STATIC_11832), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, NULL, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, NULL, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7169, NULL)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, NULL, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), i4651) :|: TRUE 28.68/8.69 f11832_0_nextEntry_FieldAccess(EOS(STATIC_11832), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, NULL, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, NULL, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7169, NULL)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, NULL, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), i4651) -> f11835_0_nextEntry_FieldAccess(EOS(STATIC_11835), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, NULL, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, NULL, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7169, NULL)), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i4651) :|: TRUE 28.68/8.69 f11835_0_nextEntry_FieldAccess(EOS(STATIC_11835), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, NULL, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, NULL, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7169, NULL)), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i4651) -> f11838_0_nextEntry_Store(EOS(STATIC_11838), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, NULL, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, NULL, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7169, NULL)), java.lang.Object(ARRAY(i4454)), i4651) :|: TRUE 28.68/8.69 f11838_0_nextEntry_Store(EOS(STATIC_11838), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, NULL, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, NULL, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7169, NULL)), java.lang.Object(ARRAY(i4454)), i4651) -> f11841_0_nextEntry_Load(EOS(STATIC_11841), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, NULL, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, NULL, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7169, NULL)), java.lang.Object(ARRAY(i4454)), i4651) :|: TRUE 28.68/8.69 f11841_0_nextEntry_Load(EOS(STATIC_11841), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, NULL, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, NULL, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7169, NULL)), java.lang.Object(ARRAY(i4454)), i4651) -> f11844_0_nextEntry_FieldAccess(EOS(STATIC_11844), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, NULL, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, NULL, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7169, NULL)), java.lang.Object(ARRAY(i4454)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, NULL, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), i4651) :|: TRUE 28.68/8.69 f11844_0_nextEntry_FieldAccess(EOS(STATIC_11844), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, NULL, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, NULL, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7169, NULL)), java.lang.Object(ARRAY(i4454)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, NULL, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), i4651) -> f11847_0_nextEntry_Load(EOS(STATIC_11847), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, NULL, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, NULL, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7169, NULL)), java.lang.Object(ARRAY(i4454)), i4455, i4651) :|: TRUE 28.68/8.69 f11847_0_nextEntry_Load(EOS(STATIC_11847), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, NULL, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, NULL, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7169, NULL)), java.lang.Object(ARRAY(i4454)), i4455, i4651) -> f11849_0_nextEntry_ArrayLength(EOS(STATIC_11849), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, NULL, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, NULL, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7169, NULL)), java.lang.Object(ARRAY(i4454)), i4455, java.lang.Object(ARRAY(i4454)), i4651) :|: TRUE 28.68/8.69 f11849_0_nextEntry_ArrayLength(EOS(STATIC_11849), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, NULL, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, NULL, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7169, NULL)), java.lang.Object(ARRAY(i4454)), i4455, java.lang.Object(ARRAY(i4454)), i4651) -> f11851_0_nextEntry_GE(EOS(STATIC_11851), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, NULL, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, NULL, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7169, NULL)), java.lang.Object(ARRAY(i4454)), i4455, i4454, i4651) :|: i4454 >= 0 28.68/8.69 f11851_0_nextEntry_GE(EOS(STATIC_11851), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, NULL, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, NULL, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7169, NULL)), java.lang.Object(ARRAY(i4454)), i4455, i4454, i4651) -> f11855_0_nextEntry_GE(EOS(STATIC_11855), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, NULL, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455, NULL, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7169, NULL)), java.lang.Object(ARRAY(i4454)), i4455, i4454, i4651) :|: i4455 < i4454 28.68/8.69 f11921_0_nextEntry_NONNULL(EOS(STATIC_11921), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4516, NULL, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4516, NULL, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7169, NULL)), java.lang.Object(ARRAY(i4454)), NULL, i4651) -> f11927_0_nextEntry_JMP(EOS(STATIC_11927), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4516, NULL, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4516, NULL, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7169, NULL)), java.lang.Object(ARRAY(i4454)), i4651) :|: TRUE 28.68/8.69 f11927_0_nextEntry_JMP(EOS(STATIC_11927), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4516, NULL, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4516, NULL, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7169, NULL)), java.lang.Object(ARRAY(i4454)), i4651) -> f11932_0_nextEntry_Load(EOS(STATIC_11932), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4516, NULL, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4516, NULL, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7169, NULL)), java.lang.Object(ARRAY(i4454)), i4651) :|: TRUE 28.68/8.69 f11932_0_nextEntry_Load(EOS(STATIC_11932), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4516, NULL, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4516, NULL, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7169, NULL)), java.lang.Object(ARRAY(i4454)), i4651) -> f11841_0_nextEntry_Load(EOS(STATIC_11841), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4516, NULL, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4516, NULL, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709, java.lang.Object(ARRAY(i4454))))), i3709)), java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7169, NULL)), java.lang.Object(ARRAY(i4454)), i4651) :|: TRUE 28.68/8.69 Combined rules. Obtained 4 IRulesP rules: 28.68/8.69 f11855_0_nextEntry_GE(EOS(STATIC_11855), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455:0, NULL, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709:0, java.lang.Object(ARRAY(i4454:0))))), i3709:0)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455:0, NULL, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709:0, java.lang.Object(ARRAY(i4454:0))))), i3709:0)), java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7169:0, NULL)), java.lang.Object(ARRAY(i4454:0)), i4455:0, i4454:0, i4651:0) -> f11822_0_nextEntry_NONNULL(EOS(STATIC_11822), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455:0 + 1, o7171:0, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709:0, java.lang.Object(ARRAY(i4454:0))))), i3709:0)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455:0 + 1, o7171:0, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709:0, java.lang.Object(ARRAY(i4454:0))))), i3709:0)), java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7169:1, o7171:0)), o7171:0, i4651:0 + 1) :|: i4455:0 < i4454:0 && i4651:0 > -1 28.68/8.69 f11855_0_nextEntry_GE(EOS(STATIC_11855), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455:0, NULL, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709:0, java.lang.Object(ARRAY(i4454:0))))), i3709:0)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455:0, NULL, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709:0, java.lang.Object(ARRAY(i4454:0))))), i3709:0)), java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7169:0, NULL)), java.lang.Object(ARRAY(i4454:0)), i4455:0, i4454:0, i4651:0) -> f11855_0_nextEntry_GE(EOS(STATIC_11855), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455:0 + 1, NULL, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709:0, java.lang.Object(ARRAY(i4454:0))))), i3709:0)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455:0 + 1, NULL, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709:0, java.lang.Object(ARRAY(i4454:0))))), i3709:0)), java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7169:0, NULL)), java.lang.Object(ARRAY(i4454:0)), i4455:0 + 1, i4454:0, i4651:0 + 1) :|: i4455:0 + 1 < i4454:0 && i4454:0 > -1 && i4651:0 > -1 28.68/8.69 f11822_0_nextEntry_NONNULL(EOS(STATIC_11822), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455:0, NULL, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709:0, java.lang.Object(ARRAY(i4454:0))))), i3709:0)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455:0, NULL, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709:0, java.lang.Object(ARRAY(i4454:0))))), i3709:0)), java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7169:0, NULL)), NULL, i4651:0) -> f11855_0_nextEntry_GE(EOS(STATIC_11855), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455:0, NULL, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709:0, java.lang.Object(ARRAY(i4454:0))))), i3709:0)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455:0, NULL, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709:0, java.lang.Object(ARRAY(i4454:0))))), i3709:0)), java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7169:0, NULL)), java.lang.Object(ARRAY(i4454:0)), i4455:0, i4454:0, i4651:0) :|: i4455:0 < i4454:0 && i4454:0 > -1 28.68/8.69 f11822_0_nextEntry_NONNULL(EOS(STATIC_11822), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455:0, java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7169:0, o7171:0)), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709:0, java.lang.Object(ARRAY(i4454:0))))), i3709:0)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455:0, java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7169:0, o7171:0)), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709:0, java.lang.Object(ARRAY(i4454:0))))), i3709:0)), java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7169:1, java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7169:0, o7171:0)))), java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7169:0, o7171:0)), i4651:0) -> f11822_0_nextEntry_NONNULL(EOS(STATIC_11822), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455:0, o7171:0, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709:0, java.lang.Object(ARRAY(i4454:0))))), i3709:0)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4455:0, o7171:0, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(EOC, i3709:0, java.lang.Object(ARRAY(i4454:0))))), i3709:0)), java.lang.Object(javaUtilEx.HashMap$Entry(EOC, o7169:0, o7171:0)), o7171:0, i4651:0) :|: TRUE 28.68/8.69 Filtered constant ground arguments: 28.68/8.69 f11855_0_nextEntry_GE(x1, x2, x3, x4, x5, x6, x7, x8) -> f11855_0_nextEntry_GE(x2, x3, x4, x5, x6, x7, x8) 28.68/8.69 f11822_0_nextEntry_NONNULL(x1, x2, x3, x4, x5, x6) -> f11822_0_nextEntry_NONNULL(x2, x3, x4, x5, x6) 28.68/8.69 javaUtilEx.HashMap$HashIterator(x1, x2, x3, x4, x5) -> javaUtilEx.HashMap$HashIterator(x2, x3, x4, x5) 28.68/8.69 javaUtilEx.HashMap$Entry(x1, x2, x3) -> javaUtilEx.HashMap$Entry(x2, x3) 28.68/8.69 javaUtilEx.HashMap$KeyIterator(x1) -> javaUtilEx.HashMap$KeyIterator 28.68/8.69 javaUtilEx.HashMap(x1, x2, x3) -> javaUtilEx.HashMap(x2, x3) 28.68/8.69 Filtered duplicate arguments: 28.68/8.69 f11855_0_nextEntry_GE(x1, x2, x3, x4, x5, x6, x7) -> f11855_0_nextEntry_GE(x2, x3, x4, x5, x6, x7) 28.68/8.69 f11822_0_nextEntry_NONNULL(x1, x2, x3, x4, x5) -> f11822_0_nextEntry_NONNULL(x2, x3, x4, x5) 28.68/8.69 Filtered unneeded arguments: 28.68/8.69 f11855_0_nextEntry_GE(x1, x2, x3, x4, x5, x6) -> f11855_0_nextEntry_GE(x1, x3, x4, x5, x6) 28.68/8.69 javaUtilEx.HashMap$HashIterator(x1, x2, x3, x4) -> javaUtilEx.HashMap$HashIterator(x1, x2, x3) 28.68/8.69 javaUtilEx.HashMap$Entry(x1, x2) -> javaUtilEx.HashMap$Entry(x2) 28.68/8.69 javaUtilEx.HashMap(x1, x2) -> javaUtilEx.HashMap(x2) 28.68/8.69 Finished conversion. Obtained 4 rules.P rules: 28.68/8.69 f11855_0_nextEntry_GE(java.lang.Object(javaUtilEx.HashMap$HashIterator(i4455:0, NULL, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(java.lang.Object(ARRAY(i4454:0))))))), java.lang.Object(ARRAY(i4454:0)), i4455:0, i4454:0, i4651:0, i4455:0, i4454:0, i4454:0) -> f11822_0_nextEntry_NONNULL(java.lang.Object(javaUtilEx.HashMap$HashIterator(i4455:0 + 1, o7171:0, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(java.lang.Object(ARRAY(i4454:0))))))), java.lang.Object(javaUtilEx.HashMap$Entry(o7171:0)), o7171:0, i4651:0 + 1, i4455:0 + 1, i4454:0) :|: i4455:0 < i4454:0 && i4651:0 > -1 28.68/8.69 f11855_0_nextEntry_GE(java.lang.Object(javaUtilEx.HashMap$HashIterator(i4455:0, NULL, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(java.lang.Object(ARRAY(i4454:0))))))), java.lang.Object(ARRAY(i4454:0)), i4455:0, i4454:0, i4651:0, i4455:0, i4454:0, i4454:0) -> f11855_0_nextEntry_GE(java.lang.Object(javaUtilEx.HashMap$HashIterator(i4455:0 + 1, NULL, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(java.lang.Object(ARRAY(i4454:0))))))), java.lang.Object(ARRAY(i4454:0)), i4455:0 + 1, i4454:0, i4651:0 + 1, i4455:0 + 1, i4454:0, i4454:0) :|: i4454:0 > -1 && i4651:0 > -1 && i4455:0 + 1 < i4454:0 28.68/8.69 f11822_0_nextEntry_NONNULL(java.lang.Object(javaUtilEx.HashMap$HashIterator(i4455:0, NULL, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(java.lang.Object(ARRAY(i4454:0))))))), java.lang.Object(javaUtilEx.HashMap$Entry(NULL)), NULL, i4651:0, i4455:0, i4454:0) -> f11855_0_nextEntry_GE(java.lang.Object(javaUtilEx.HashMap$HashIterator(i4455:0, NULL, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(java.lang.Object(ARRAY(i4454:0))))))), java.lang.Object(ARRAY(i4454:0)), i4455:0, i4454:0, i4651:0, i4455:0, i4454:0, i4454:0) :|: i4455:0 < i4454:0 && i4454:0 > -1 28.68/8.69 f11822_0_nextEntry_NONNULL(java.lang.Object(javaUtilEx.HashMap$HashIterator(i4455:0, java.lang.Object(javaUtilEx.HashMap$Entry(o7171:0)), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(java.lang.Object(ARRAY(i4454:0))))))), java.lang.Object(javaUtilEx.HashMap$Entry(java.lang.Object(javaUtilEx.HashMap$Entry(o7171:0)))), java.lang.Object(javaUtilEx.HashMap$Entry(o7171:0)), i4651:0, i4455:0, i4454:0) -> f11822_0_nextEntry_NONNULL(java.lang.Object(javaUtilEx.HashMap$HashIterator(i4455:0, o7171:0, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(java.lang.Object(ARRAY(i4454:0))))))), java.lang.Object(javaUtilEx.HashMap$Entry(o7171:0)), o7171:0, i4651:0, i4455:0, i4454:0) :|: TRUE 28.68/8.69 28.68/8.69 ---------------------------------------- 28.68/8.69 28.68/8.69 (58) 28.68/8.69 Obligation: 28.68/8.69 Rules: 28.68/8.69 f11855_0_nextEntry_GE(java.lang.Object(javaUtilEx.HashMap$HashIterator(i4455:0, NULL, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(java.lang.Object(ARRAY(i4454:0))))))), java.lang.Object(ARRAY(i4454:0)), i4455:0, i4454:0, i4651:0, i4455:0, i4454:0, i4454:0) -> f11822_0_nextEntry_NONNULL(java.lang.Object(javaUtilEx.HashMap$HashIterator(i4455:0 + 1, o7171:0, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(java.lang.Object(ARRAY(i4454:0))))))), java.lang.Object(javaUtilEx.HashMap$Entry(o7171:0)), o7171:0, i4651:0 + 1, i4455:0 + 1, i4454:0) :|: i4455:0 < i4454:0 && i4651:0 > -1 28.68/8.69 f11855_0_nextEntry_GE(java.lang.Object(javaUtilEx.HashMap$HashIterator(x, NULL, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(java.lang.Object(ARRAY(x1))))))), java.lang.Object(ARRAY(x1)), x, x1, x2, x, x1, x1) -> f11855_0_nextEntry_GE(java.lang.Object(javaUtilEx.HashMap$HashIterator(x + 1, NULL, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(java.lang.Object(ARRAY(x1))))))), java.lang.Object(ARRAY(x1)), x + 1, x1, x2 + 1, x + 1, x1, x1) :|: x1 > -1 && x2 > -1 && x + 1 < x1 28.68/8.69 f11822_0_nextEntry_NONNULL(java.lang.Object(javaUtilEx.HashMap$HashIterator(x3, NULL, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(java.lang.Object(ARRAY(x4))))))), java.lang.Object(javaUtilEx.HashMap$Entry(NULL)), NULL, x5, x3, x4) -> f11855_0_nextEntry_GE(java.lang.Object(javaUtilEx.HashMap$HashIterator(x3, NULL, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(java.lang.Object(ARRAY(x4))))))), java.lang.Object(ARRAY(x4)), x3, x4, x5, x3, x4, x4) :|: x3 < x4 && x4 > -1 28.68/8.69 f11822_0_nextEntry_NONNULL(java.lang.Object(javaUtilEx.HashMap$HashIterator(x6, java.lang.Object(javaUtilEx.HashMap$Entry(x7)), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(java.lang.Object(ARRAY(x8))))))), java.lang.Object(javaUtilEx.HashMap$Entry(java.lang.Object(javaUtilEx.HashMap$Entry(x7)))), java.lang.Object(javaUtilEx.HashMap$Entry(x7)), x9, x6, x8) -> f11822_0_nextEntry_NONNULL(java.lang.Object(javaUtilEx.HashMap$HashIterator(x6, x7, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(java.lang.Object(ARRAY(x8))))))), java.lang.Object(javaUtilEx.HashMap$Entry(x7)), x7, x9, x6, x8) :|: TRUE 28.68/8.69 28.68/8.69 ---------------------------------------- 28.68/8.69 28.68/8.69 (59) IRSFormatTransformerProof (EQUIVALENT) 28.68/8.69 Reformatted IRS to match normalized format (transformed away non-linear left-hand sides, !=, / and %). 28.68/8.69 ---------------------------------------- 28.68/8.69 28.68/8.69 (60) 28.68/8.69 Obligation: 28.68/8.69 Rules: 28.68/8.69 f11855_0_nextEntry_GE(java.lang.Object(javaUtilEx.HashMap$HashIterator(i4455:0, NULL, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(java.lang.Object(ARRAY(i4454:0))))))), java.lang.Object(ARRAY(i4454:0)), i4455:0, i4454:0, i4651:0, i4455:0, i4454:0, i4454:0) -> f11822_0_nextEntry_NONNULL(java.lang.Object(javaUtilEx.HashMap$HashIterator(arith1, o7171:0, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(java.lang.Object(ARRAY(i4454:0))))))), java.lang.Object(javaUtilEx.HashMap$Entry(o7171:0)), o7171:0, arith, arith1, i4454:0) :|: i4455:0 < i4454:0 && i4651:0 > -1 && arith = i4651:0 + 1 && arith1 = i4455:0 + 1 && arith1 = i4455:0 + 1 28.68/8.69 f11855_0_nextEntry_GE(java.lang.Object(javaUtilEx.HashMap$HashIterator(x10, NULL, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(java.lang.Object(ARRAY(x11))))))), java.lang.Object(ARRAY(x11)), x10, x11, x12, x10, x11, x11) -> f11855_0_nextEntry_GE(java.lang.Object(javaUtilEx.HashMap$HashIterator(x13, NULL, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(java.lang.Object(ARRAY(x11))))))), java.lang.Object(ARRAY(x11)), x13, x11, x14, x13, x11, x11) :|: x11 > -1 && x12 > -1 && x10 + 1 < x11 && x13 = x10 + 1 && x14 = x12 + 1 && x13 = x10 + 1 && x13 = x10 + 1 28.68/8.69 f11822_0_nextEntry_NONNULL(java.lang.Object(javaUtilEx.HashMap$HashIterator(x3, NULL, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(java.lang.Object(ARRAY(x4))))))), java.lang.Object(javaUtilEx.HashMap$Entry(NULL)), NULL, x5, x3, x4) -> f11855_0_nextEntry_GE(java.lang.Object(javaUtilEx.HashMap$HashIterator(x3, NULL, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(java.lang.Object(ARRAY(x4))))))), java.lang.Object(ARRAY(x4)), x3, x4, x5, x3, x4, x4) :|: x3 < x4 && x4 > -1 28.68/8.69 f11822_0_nextEntry_NONNULL(java.lang.Object(javaUtilEx.HashMap$HashIterator(x6, java.lang.Object(javaUtilEx.HashMap$Entry(x7)), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(java.lang.Object(ARRAY(x8))))))), java.lang.Object(javaUtilEx.HashMap$Entry(java.lang.Object(javaUtilEx.HashMap$Entry(x7)))), java.lang.Object(javaUtilEx.HashMap$Entry(x7)), x9, x6, x8) -> f11822_0_nextEntry_NONNULL(java.lang.Object(javaUtilEx.HashMap$HashIterator(x6, x7, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(java.lang.Object(ARRAY(x8))))))), java.lang.Object(javaUtilEx.HashMap$Entry(x7)), x7, x9, x6, x8) :|: TRUE 28.68/8.69 28.68/8.69 ---------------------------------------- 28.68/8.69 28.68/8.69 (61) IRSwTTerminationDigraphProof (EQUIVALENT) 28.68/8.69 Constructed termination digraph! 28.68/8.69 Nodes: 28.68/8.69 (1) f11855_0_nextEntry_GE(java.lang.Object(javaUtilEx.HashMap$HashIterator(i4455:0, NULL, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(java.lang.Object(ARRAY(i4454:0))))))), java.lang.Object(ARRAY(i4454:0)), i4455:0, i4454:0, i4651:0, i4455:0, i4454:0, i4454:0) -> f11822_0_nextEntry_NONNULL(java.lang.Object(javaUtilEx.HashMap$HashIterator(arith1, o7171:0, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(java.lang.Object(ARRAY(i4454:0))))))), java.lang.Object(javaUtilEx.HashMap$Entry(o7171:0)), o7171:0, arith, arith1, i4454:0) :|: i4455:0 < i4454:0 && i4651:0 > -1 && arith = i4651:0 + 1 && arith1 = i4455:0 + 1 && arith1 = i4455:0 + 1 28.68/8.69 (2) f11855_0_nextEntry_GE(java.lang.Object(javaUtilEx.HashMap$HashIterator(x10, NULL, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(java.lang.Object(ARRAY(x11))))))), java.lang.Object(ARRAY(x11)), x10, x11, x12, x10, x11, x11) -> f11855_0_nextEntry_GE(java.lang.Object(javaUtilEx.HashMap$HashIterator(x13, NULL, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(java.lang.Object(ARRAY(x11))))))), java.lang.Object(ARRAY(x11)), x13, x11, x14, x13, x11, x11) :|: x11 > -1 && x12 > -1 && x10 + 1 < x11 && x13 = x10 + 1 && x14 = x12 + 1 && x13 = x10 + 1 && x13 = x10 + 1 28.68/8.69 (3) f11822_0_nextEntry_NONNULL(java.lang.Object(javaUtilEx.HashMap$HashIterator(x3, NULL, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(java.lang.Object(ARRAY(x4))))))), java.lang.Object(javaUtilEx.HashMap$Entry(NULL)), NULL, x5, x3, x4) -> f11855_0_nextEntry_GE(java.lang.Object(javaUtilEx.HashMap$HashIterator(x3, NULL, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(java.lang.Object(ARRAY(x4))))))), java.lang.Object(ARRAY(x4)), x3, x4, x5, x3, x4, x4) :|: x3 < x4 && x4 > -1 28.68/8.69 (4) f11822_0_nextEntry_NONNULL(java.lang.Object(javaUtilEx.HashMap$HashIterator(x6, java.lang.Object(javaUtilEx.HashMap$Entry(x7)), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(java.lang.Object(ARRAY(x8))))))), java.lang.Object(javaUtilEx.HashMap$Entry(java.lang.Object(javaUtilEx.HashMap$Entry(x7)))), java.lang.Object(javaUtilEx.HashMap$Entry(x7)), x9, x6, x8) -> f11822_0_nextEntry_NONNULL(java.lang.Object(javaUtilEx.HashMap$HashIterator(x6, x7, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(java.lang.Object(ARRAY(x8))))))), java.lang.Object(javaUtilEx.HashMap$Entry(x7)), x7, x9, x6, x8) :|: TRUE 28.68/8.69 28.68/8.69 Arcs: 28.68/8.69 (1) -> (3), (4) 28.68/8.69 (2) -> (1), (2) 28.68/8.69 (3) -> (1), (2) 28.68/8.69 (4) -> (3), (4) 28.68/8.69 28.68/8.69 This digraph is fully evaluated! 28.68/8.69 ---------------------------------------- 28.68/8.69 28.68/8.69 (62) 28.68/8.69 Obligation: 28.68/8.69 28.68/8.69 Termination digraph: 28.68/8.69 Nodes: 28.68/8.69 (1) f11855_0_nextEntry_GE(java.lang.Object(javaUtilEx.HashMap$HashIterator(i4455:0, NULL, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(java.lang.Object(ARRAY(i4454:0))))))), java.lang.Object(ARRAY(i4454:0)), i4455:0, i4454:0, i4651:0, i4455:0, i4454:0, i4454:0) -> f11822_0_nextEntry_NONNULL(java.lang.Object(javaUtilEx.HashMap$HashIterator(arith1, o7171:0, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(java.lang.Object(ARRAY(i4454:0))))))), java.lang.Object(javaUtilEx.HashMap$Entry(o7171:0)), o7171:0, arith, arith1, i4454:0) :|: i4455:0 < i4454:0 && i4651:0 > -1 && arith = i4651:0 + 1 && arith1 = i4455:0 + 1 && arith1 = i4455:0 + 1 28.68/8.69 (2) f11855_0_nextEntry_GE(java.lang.Object(javaUtilEx.HashMap$HashIterator(x10, NULL, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(java.lang.Object(ARRAY(x11))))))), java.lang.Object(ARRAY(x11)), x10, x11, x12, x10, x11, x11) -> f11855_0_nextEntry_GE(java.lang.Object(javaUtilEx.HashMap$HashIterator(x13, NULL, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(java.lang.Object(ARRAY(x11))))))), java.lang.Object(ARRAY(x11)), x13, x11, x14, x13, x11, x11) :|: x11 > -1 && x12 > -1 && x10 + 1 < x11 && x13 = x10 + 1 && x14 = x12 + 1 && x13 = x10 + 1 && x13 = x10 + 1 28.68/8.69 (3) f11822_0_nextEntry_NONNULL(java.lang.Object(javaUtilEx.HashMap$HashIterator(x3, NULL, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(java.lang.Object(ARRAY(x4))))))), java.lang.Object(javaUtilEx.HashMap$Entry(NULL)), NULL, x5, x3, x4) -> f11855_0_nextEntry_GE(java.lang.Object(javaUtilEx.HashMap$HashIterator(x3, NULL, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(java.lang.Object(ARRAY(x4))))))), java.lang.Object(ARRAY(x4)), x3, x4, x5, x3, x4, x4) :|: x3 < x4 && x4 > -1 28.68/8.69 (4) f11822_0_nextEntry_NONNULL(java.lang.Object(javaUtilEx.HashMap$HashIterator(x6, java.lang.Object(javaUtilEx.HashMap$Entry(x7)), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(java.lang.Object(ARRAY(x8))))))), java.lang.Object(javaUtilEx.HashMap$Entry(java.lang.Object(javaUtilEx.HashMap$Entry(x7)))), java.lang.Object(javaUtilEx.HashMap$Entry(x7)), x9, x6, x8) -> f11822_0_nextEntry_NONNULL(java.lang.Object(javaUtilEx.HashMap$HashIterator(x6, x7, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(java.lang.Object(ARRAY(x8))))))), java.lang.Object(javaUtilEx.HashMap$Entry(x7)), x7, x9, x6, x8) :|: TRUE 28.68/8.69 28.68/8.69 Arcs: 28.68/8.69 (1) -> (3), (4) 28.68/8.69 (2) -> (1), (2) 28.68/8.69 (3) -> (1), (2) 28.68/8.69 (4) -> (3), (4) 28.68/8.69 28.68/8.69 This digraph is fully evaluated! 28.68/8.69 28.68/8.69 ---------------------------------------- 28.68/8.69 28.68/8.69 (63) IntTRSCompressionProof (EQUIVALENT) 28.68/8.69 Compressed rules. 28.68/8.69 ---------------------------------------- 28.68/8.69 28.68/8.69 (64) 28.68/8.69 Obligation: 28.68/8.69 Rules: 28.68/8.69 f11855_0_nextEntry_GE(java.lang.Object(javaUtilEx.HashMap$HashIterator(i4455:0:0, NULL, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(java.lang.Object(ARRAY(i4454:0:0))))))), java.lang.Object(ARRAY(i4454:0:0)), i4455:0:0, i4454:0:0, i4651:0:0, i4455:0:0, i4454:0:0, i4454:0:0) -> f11822_0_nextEntry_NONNULL(java.lang.Object(javaUtilEx.HashMap$HashIterator(i4455:0:0 + 1, o7171:0:0, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(java.lang.Object(ARRAY(i4454:0:0))))))), java.lang.Object(javaUtilEx.HashMap$Entry(o7171:0:0)), o7171:0:0, i4651:0:0 + 1, i4455:0:0 + 1, i4454:0:0) :|: i4455:0:0 < i4454:0:0 && i4651:0:0 > -1 28.68/8.69 f11855_0_nextEntry_GE(java.lang.Object(javaUtilEx.HashMap$HashIterator(x10:0, NULL, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(java.lang.Object(ARRAY(x11:0))))))), java.lang.Object(ARRAY(x11:0)), x10:0, x11:0, x12:0, x10:0, x11:0, x11:0) -> f11855_0_nextEntry_GE(java.lang.Object(javaUtilEx.HashMap$HashIterator(x10:0 + 1, NULL, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(java.lang.Object(ARRAY(x11:0))))))), java.lang.Object(ARRAY(x11:0)), x10:0 + 1, x11:0, x12:0 + 1, x10:0 + 1, x11:0, x11:0) :|: x11:0 > -1 && x12:0 > -1 && x11:0 > x10:0 + 1 28.68/8.69 f11822_0_nextEntry_NONNULL(java.lang.Object(javaUtilEx.HashMap$HashIterator(x3:0, NULL, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(java.lang.Object(ARRAY(x4:0))))))), java.lang.Object(javaUtilEx.HashMap$Entry(NULL)), NULL, x5:0, x3:0, x4:0) -> f11855_0_nextEntry_GE(java.lang.Object(javaUtilEx.HashMap$HashIterator(x3:0, NULL, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(java.lang.Object(ARRAY(x4:0))))))), java.lang.Object(ARRAY(x4:0)), x3:0, x4:0, x5:0, x3:0, x4:0, x4:0) :|: x4:0 > x3:0 && x4:0 > -1 28.68/8.69 f11822_0_nextEntry_NONNULL(java.lang.Object(javaUtilEx.HashMap$HashIterator(x6:0, java.lang.Object(javaUtilEx.HashMap$Entry(x7:0)), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(java.lang.Object(ARRAY(x8:0))))))), java.lang.Object(javaUtilEx.HashMap$Entry(java.lang.Object(javaUtilEx.HashMap$Entry(x7:0)))), java.lang.Object(javaUtilEx.HashMap$Entry(x7:0)), x9:0, x6:0, x8:0) -> f11822_0_nextEntry_NONNULL(java.lang.Object(javaUtilEx.HashMap$HashIterator(x6:0, x7:0, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(java.lang.Object(ARRAY(x8:0))))))), java.lang.Object(javaUtilEx.HashMap$Entry(x7:0)), x7:0, x9:0, x6:0, x8:0) :|: TRUE 28.68/8.69 28.68/8.69 ---------------------------------------- 28.68/8.69 28.68/8.69 (65) TempFilterProof (SOUND) 28.68/8.69 Used the following sort dictionary for filtering: 28.68/8.69 f11855_0_nextEntry_GE(VARIABLE, VARIABLE, INTEGER, INTEGER, VARIABLE, INTEGER, INTEGER, INTEGER) 28.68/8.69 java.lang.Object(VARIABLE) 28.68/8.69 javaUtilEx.HashMap$HashIterator(VARIABLE, VARIABLE, VARIABLE) 28.68/8.69 NULL() 28.68/8.69 javaUtilEx.AbstractMap(VARIABLE) 28.68/8.69 javaUtilEx.HashMap(VARIABLE) 28.68/8.69 ARRAY(VARIABLE) 28.68/8.69 f11822_0_nextEntry_NONNULL(VARIABLE, VARIABLE, VARIABLE, VARIABLE, VARIABLE, VARIABLE) 28.68/8.69 javaUtilEx.HashMap$Entry(VARIABLE) 28.68/8.69 Replaced non-predefined constructor symbols by 0.The following proof was generated: 28.68/8.69 # AProVE Commit ID: 48fb2092695e11cc9f56e44b17a92a5f88ffb256 marcel 20180622 unpublished dirty 28.68/8.69 28.68/8.69 28.68/8.69 Termination of the given IntTRS could not be shown: 28.68/8.69 28.68/8.69 28.68/8.69 28.68/8.69 - IntTRS 28.68/8.69 - PolynomialOrderProcessor 28.68/8.69 28.68/8.69 Rules: 28.68/8.69 f11855_0_nextEntry_GE(c, c1, i4455:0:0, i4454:0:0, i4651:0:0, i4455:0:0, i4454:0:0, i4454:0:0) -> f11822_0_nextEntry_NONNULL(c2, c3, o7171:0:0, c4, c5, i4454:0:0) :|: c5 = i4455:0:0 + 1 && (c4 = i4651:0:0 + 1 && (c3 = 0 && (c2 = 0 && (c1 = 0 && c = 0)))) && (i4455:0:0 < i4454:0:0 && i4651:0:0 > -1) 28.68/8.69 f11855_0_nextEntry_GE(c6, c7, x10:0, x11:0, x12:0, x10:0, x11:0, x11:0) -> f11855_0_nextEntry_GE(c8, c9, c10, x11:0, c11, c12, x11:0, x11:0) :|: c12 = x10:0 + 1 && (c11 = x12:0 + 1 && (c10 = x10:0 + 1 && (c9 = 0 && (c8 = 0 && (c7 = 0 && c6 = 0))))) && (x11:0 > -1 && x12:0 > -1 && x11:0 > x10:0 + 1) 28.68/8.69 f11822_0_nextEntry_NONNULL(c13, c14, c15, x5:0, x3:0, x4:0) -> f11855_0_nextEntry_GE(c16, c17, x3:0, x4:0, x5:0, x3:0, x4:0, x4:0) :|: c17 = 0 && (c16 = 0 && (c15 = 0 && (c14 = 0 && c13 = 0))) && (x4:0 > x3:0 && x4:0 > -1) 28.68/8.69 f11822_0_nextEntry_NONNULL(c18, c19, c20, x9:0, x6:0, x8:0) -> f11822_0_nextEntry_NONNULL(c21, c22, x7:0, x9:0, x6:0, x8:0) :|: c22 = 0 && (c21 = 0 && (c20 = 0 && (c19 = 0 && c18 = 0))) && TRUE 28.68/8.69 28.68/8.69 Found the following polynomial interpretation: 28.68/8.69 [f11855_0_nextEntry_GE(x, x1, x2, x3, x4, x5, x6, x7)] = -1 + c*x + c1*x1 - x2 + x3 28.68/8.69 [f11822_0_nextEntry_NONNULL(x8, x9, x10, x11, x12, x13)] = -1 - x12 + x13 + c8*x8 + c9*x9 28.68/8.69 28.68/8.69 The following rules are decreasing: 28.68/8.69 f11855_0_nextEntry_GE(c, c1, i4455:0:0, i4454:0:0, i4651:0:0, i4455:0:0, i4454:0:0, i4454:0:0) -> f11822_0_nextEntry_NONNULL(c2, c3, o7171:0:0, c4, c5, i4454:0:0) :|: c5 = i4455:0:0 + 1 && (c4 = i4651:0:0 + 1 && (c3 = 0 && (c2 = 0 && (c1 = 0 && c = 0)))) && (i4455:0:0 < i4454:0:0 && i4651:0:0 > -1) 28.68/8.69 f11855_0_nextEntry_GE(c6, c7, x10:0, x11:0, x12:0, x10:0, x11:0, x11:0) -> f11855_0_nextEntry_GE(c8, c9, c10, x11:0, c11, c12, x11:0, x11:0) :|: c12 = x10:0 + 1 && (c11 = x12:0 + 1 && (c10 = x10:0 + 1 && (c9 = 0 && (c8 = 0 && (c7 = 0 && c6 = 0))))) && (x11:0 > -1 && x12:0 > -1 && x11:0 > x10:0 + 1) 28.68/8.69 The following rules are bounded: 28.68/8.69 f11855_0_nextEntry_GE(c, c1, i4455:0:0, i4454:0:0, i4651:0:0, i4455:0:0, i4454:0:0, i4454:0:0) -> f11822_0_nextEntry_NONNULL(c2, c3, o7171:0:0, c4, c5, i4454:0:0) :|: c5 = i4455:0:0 + 1 && (c4 = i4651:0:0 + 1 && (c3 = 0 && (c2 = 0 && (c1 = 0 && c = 0)))) && (i4455:0:0 < i4454:0:0 && i4651:0:0 > -1) 28.68/8.69 f11855_0_nextEntry_GE(c6, c7, x10:0, x11:0, x12:0, x10:0, x11:0, x11:0) -> f11855_0_nextEntry_GE(c8, c9, c10, x11:0, c11, c12, x11:0, x11:0) :|: c12 = x10:0 + 1 && (c11 = x12:0 + 1 && (c10 = x10:0 + 1 && (c9 = 0 && (c8 = 0 && (c7 = 0 && c6 = 0))))) && (x11:0 > -1 && x12:0 > -1 && x11:0 > x10:0 + 1) 28.68/8.69 f11822_0_nextEntry_NONNULL(c13, c14, c15, x5:0, x3:0, x4:0) -> f11855_0_nextEntry_GE(c16, c17, x3:0, x4:0, x5:0, x3:0, x4:0, x4:0) :|: c17 = 0 && (c16 = 0 && (c15 = 0 && (c14 = 0 && c13 = 0))) && (x4:0 > x3:0 && x4:0 > -1) 28.68/8.69 28.68/8.69 28.68/8.69 - IntTRS 28.68/8.69 - PolynomialOrderProcessor 28.68/8.69 - IntTRS 28.68/8.69 - RankingReductionPairProof 28.68/8.69 28.68/8.69 Rules: 28.68/8.69 f11822_0_nextEntry_NONNULL(c13, c14, c15, x5:0, x3:0, x4:0) -> f11855_0_nextEntry_GE(c16, c17, x3:0, x4:0, x5:0, x3:0, x4:0, x4:0) :|: c17 = 0 && (c16 = 0 && (c15 = 0 && (c14 = 0 && c13 = 0))) && (x4:0 > x3:0 && x4:0 > -1) 28.68/8.69 f11822_0_nextEntry_NONNULL(c18, c19, c20, x9:0, x6:0, x8:0) -> f11822_0_nextEntry_NONNULL(c21, c22, x7:0, x9:0, x6:0, x8:0) :|: c22 = 0 && (c21 = 0 && (c20 = 0 && (c19 = 0 && c18 = 0))) && TRUE 28.68/8.69 28.68/8.69 Interpretation: 28.68/8.69 [ f11822_0_nextEntry_NONNULL ] = 0 28.68/8.69 [ f11855_0_nextEntry_GE ] = -1 28.68/8.69 28.68/8.69 The following rules are decreasing: 28.68/8.69 f11822_0_nextEntry_NONNULL(c13, c14, c15, x5:0, x3:0, x4:0) -> f11855_0_nextEntry_GE(c16, c17, x3:0, x4:0, x5:0, x3:0, x4:0, x4:0) :|: c17 = 0 && (c16 = 0 && (c15 = 0 && (c14 = 0 && c13 = 0))) && (x4:0 > x3:0 && x4:0 > -1) 28.68/8.69 28.68/8.69 The following rules are bounded: 28.68/8.69 f11822_0_nextEntry_NONNULL(c13, c14, c15, x5:0, x3:0, x4:0) -> f11855_0_nextEntry_GE(c16, c17, x3:0, x4:0, x5:0, x3:0, x4:0, x4:0) :|: c17 = 0 && (c16 = 0 && (c15 = 0 && (c14 = 0 && c13 = 0))) && (x4:0 > x3:0 && x4:0 > -1) 28.68/8.69 f11822_0_nextEntry_NONNULL(c18, c19, c20, x9:0, x6:0, x8:0) -> f11822_0_nextEntry_NONNULL(c21, c22, x7:0, x9:0, x6:0, x8:0) :|: c22 = 0 && (c21 = 0 && (c20 = 0 && (c19 = 0 && c18 = 0))) && TRUE 28.68/8.69 28.68/8.69 28.68/8.69 28.68/8.69 - IntTRS 28.68/8.69 - PolynomialOrderProcessor 28.68/8.69 - IntTRS 28.68/8.69 - RankingReductionPairProof 28.68/8.69 - IntTRS 28.68/8.69 28.68/8.69 Rules: 28.68/8.69 f11822_0_nextEntry_NONNULL(c18, c19, c20, x9:0, x6:0, x8:0) -> f11822_0_nextEntry_NONNULL(c21, c22, x7:0, x9:0, x6:0, x8:0) :|: c22 = 0 && (c21 = 0 && (c20 = 0 && (c19 = 0 && c18 = 0))) && TRUE 28.68/8.69 28.68/8.69 28.68/8.69 28.68/8.69 ---------------------------------------- 28.68/8.69 28.68/8.69 (66) 28.68/8.69 Obligation: 28.68/8.69 Rules: 28.68/8.69 f11822_0_nextEntry_NONNULL(java.lang.Object(javaUtilEx.HashMap$HashIterator(x6:0, java.lang.Object(javaUtilEx.HashMap$Entry(x7:0)), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(java.lang.Object(ARRAY(x8:0))))))), java.lang.Object(javaUtilEx.HashMap$Entry(java.lang.Object(javaUtilEx.HashMap$Entry(x7:0)))), java.lang.Object(javaUtilEx.HashMap$Entry(x7:0)), x9:0, x6:0, x8:0) -> f11822_0_nextEntry_NONNULL(java.lang.Object(javaUtilEx.HashMap$HashIterator(x6:0, x7:0, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(java.lang.Object(ARRAY(x8:0))))))), java.lang.Object(javaUtilEx.HashMap$Entry(x7:0)), x7:0, x9:0, x6:0, x8:0) :|: TRUE 28.68/8.69 28.68/8.69 ---------------------------------------- 28.68/8.69 28.68/8.69 (67) IRSwTTerminationDigraphProof (EQUIVALENT) 28.68/8.69 Constructed termination digraph! 28.68/8.69 Nodes: 28.68/8.69 (1) f11822_0_nextEntry_NONNULL(java.lang.Object(javaUtilEx.HashMap$HashIterator(x6:0, java.lang.Object(javaUtilEx.HashMap$Entry(x7:0)), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(java.lang.Object(ARRAY(x8:0))))))), java.lang.Object(javaUtilEx.HashMap$Entry(java.lang.Object(javaUtilEx.HashMap$Entry(x7:0)))), java.lang.Object(javaUtilEx.HashMap$Entry(x7:0)), x9:0, x6:0, x8:0) -> f11822_0_nextEntry_NONNULL(java.lang.Object(javaUtilEx.HashMap$HashIterator(x6:0, x7:0, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(java.lang.Object(ARRAY(x8:0))))))), java.lang.Object(javaUtilEx.HashMap$Entry(x7:0)), x7:0, x9:0, x6:0, x8:0) :|: TRUE 28.68/8.69 28.68/8.69 Arcs: 28.68/8.69 (1) -> (1) 28.68/8.69 28.68/8.69 This digraph is fully evaluated! 28.68/8.69 ---------------------------------------- 28.68/8.69 28.68/8.69 (68) 28.68/8.69 Obligation: 28.68/8.69 28.68/8.69 Termination digraph: 28.68/8.69 Nodes: 28.68/8.69 (1) f11822_0_nextEntry_NONNULL(java.lang.Object(javaUtilEx.HashMap$HashIterator(x6:0, java.lang.Object(javaUtilEx.HashMap$Entry(x7:0)), java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(java.lang.Object(ARRAY(x8:0))))))), java.lang.Object(javaUtilEx.HashMap$Entry(java.lang.Object(javaUtilEx.HashMap$Entry(x7:0)))), java.lang.Object(javaUtilEx.HashMap$Entry(x7:0)), x9:0, x6:0, x8:0) -> f11822_0_nextEntry_NONNULL(java.lang.Object(javaUtilEx.HashMap$HashIterator(x6:0, x7:0, java.lang.Object(javaUtilEx.AbstractMap(javaUtilEx.HashMap(java.lang.Object(ARRAY(x8:0))))))), java.lang.Object(javaUtilEx.HashMap$Entry(x7:0)), x7:0, x9:0, x6:0, x8:0) :|: TRUE 28.68/8.69 28.68/8.69 Arcs: 28.68/8.69 (1) -> (1) 28.68/8.69 28.68/8.69 This digraph is fully evaluated! 28.68/8.69 28.68/8.69 ---------------------------------------- 28.68/8.69 28.68/8.69 (69) IntTRSUnneededArgumentFilterProof (EQUIVALENT) 28.68/8.69 Some arguments are removed because they cannot influence termination. We removed arguments according to the following replacements: 28.68/8.69 28.68/8.69 f11822_0_nextEntry_NONNULL(x1, x2, x3, x4, x5, x6) -> f11822_0_nextEntry_NONNULL(x1, x2, x3) 28.68/8.69 javaUtilEx.HashMap$HashIterator(x1, x2, x3) -> javaUtilEx.HashMap$HashIterator(x2) 28.68/8.69 28.68/8.69 ---------------------------------------- 28.68/8.69 28.68/8.69 (70) 28.68/8.69 Obligation: 28.68/8.69 Rules: 28.68/8.69 f11822_0_nextEntry_NONNULL(java.lang.Object(javaUtilEx.HashMap$HashIterator(java.lang.Object(javaUtilEx.HashMap$Entry(x7:0)))), java.lang.Object(javaUtilEx.HashMap$Entry(java.lang.Object(javaUtilEx.HashMap$Entry(x7:0)))), java.lang.Object(javaUtilEx.HashMap$Entry(x7:0))) -> f11822_0_nextEntry_NONNULL(java.lang.Object(javaUtilEx.HashMap$HashIterator(x7:0)), java.lang.Object(javaUtilEx.HashMap$Entry(x7:0)), x7:0) :|: TRUE 28.68/8.69 28.68/8.69 ---------------------------------------- 28.68/8.69 28.68/8.69 (71) TempFilterProof (SOUND) 28.68/8.69 Used the following sort dictionary for filtering: 28.68/8.69 f11822_0_nextEntry_NONNULL(VARIABLE, VARIABLE, VARIABLE) 28.68/8.69 java.lang.Object(VARIABLE) 28.68/8.69 javaUtilEx.HashMap$HashIterator(VARIABLE) 28.68/8.69 javaUtilEx.HashMap$Entry(VARIABLE) 28.68/8.69 Removed predefined arithmetic. 28.68/8.69 ---------------------------------------- 28.68/8.69 28.68/8.69 (72) 28.68/8.69 Obligation: 28.68/8.69 Rules: 28.68/8.69 f11822_0_nextEntry_NONNULL(java.lang.Object(javaUtilEx.HashMap$HashIterator(java.lang.Object(javaUtilEx.HashMap$Entry(x7:0)))), java.lang.Object(javaUtilEx.HashMap$Entry(java.lang.Object(javaUtilEx.HashMap$Entry(x7:0)))), java.lang.Object(javaUtilEx.HashMap$Entry(x7:0))) -> f11822_0_nextEntry_NONNULL(java.lang.Object(javaUtilEx.HashMap$HashIterator(x7:0)), java.lang.Object(javaUtilEx.HashMap$Entry(x7:0)), x7:0) 28.68/8.69 28.68/8.69 ---------------------------------------- 28.68/8.69 28.68/8.69 (73) IRSwTToQDPProof (SOUND) 28.68/8.69 Removed the integers and created a QDP-Problem. 28.68/8.69 ---------------------------------------- 28.68/8.69 28.68/8.69 (74) 28.68/8.69 Obligation: 28.68/8.69 Q DP problem: 28.68/8.69 The TRS P consists of the following rules: 28.68/8.69 28.68/8.69 f11822_0_nextEntry_NONNULL(java.lang.Object(javaUtilEx.HashMap$HashIterator(java.lang.Object(javaUtilEx.HashMap$Entry(x7:0)))), java.lang.Object(javaUtilEx.HashMap$Entry(java.lang.Object(javaUtilEx.HashMap$Entry(x7:0)))), java.lang.Object(javaUtilEx.HashMap$Entry(x7:0))) -> f11822_0_nextEntry_NONNULL(java.lang.Object(javaUtilEx.HashMap$HashIterator(x7:0)), java.lang.Object(javaUtilEx.HashMap$Entry(x7:0)), x7:0) 28.68/8.69 28.68/8.69 R is empty. 28.68/8.69 Q is empty. 28.68/8.69 We have to consider all (P,Q,R)-chains. 28.68/8.69 ---------------------------------------- 28.68/8.69 28.68/8.69 (75) QDPSizeChangeProof (EQUIVALENT) 28.68/8.69 By using the subterm criterion [SUBTERM_CRITERION] together with the size-change analysis [AAECC05] we have proven that there are no infinite chains for this DP problem. 28.68/8.69 28.68/8.69 From the DPs we obtained the following set of size-change graphs: 28.68/8.69 *f11822_0_nextEntry_NONNULL(java.lang.Object(javaUtilEx.HashMap$HashIterator(java.lang.Object(javaUtilEx.HashMap$Entry(x7:0)))), java.lang.Object(javaUtilEx.HashMap$Entry(java.lang.Object(javaUtilEx.HashMap$Entry(x7:0)))), java.lang.Object(javaUtilEx.HashMap$Entry(x7:0))) -> f11822_0_nextEntry_NONNULL(java.lang.Object(javaUtilEx.HashMap$HashIterator(x7:0)), java.lang.Object(javaUtilEx.HashMap$Entry(x7:0)), x7:0) 28.68/8.69 The graph contains the following edges 1 > 2, 2 > 2, 3 >= 2, 1 > 3, 2 > 3, 3 > 3 28.68/8.69 28.68/8.69 28.68/8.69 ---------------------------------------- 28.68/8.69 28.68/8.69 (76) 28.68/8.69 YES 28.68/8.69 28.68/8.69 ---------------------------------------- 28.68/8.69 28.68/8.69 (77) 28.68/8.69 Obligation: 28.68/8.69 SCC of termination graph based on JBC Program. 28.68/8.69 SCC contains nodes from the following methods: javaUtilEx.juHashMapCreateIteratorKeyLoop.main([Ljava/lang/String;)V 28.68/8.69 SCC calls the following helper methods: 28.68/8.69 Performed SCC analyses: 28.68/8.69 *Used field analysis yielded the following read fields: 28.68/8.69 *javaUtilEx.HashMap$HashIterator: [index] 28.68/8.69 *Marker field analysis yielded the following relations that could be markers: 28.68/8.69 *javaUtilEx.HashMap$HashIterator.index > i3960 (Introduced counter i4652) 28.68/8.69 ---------------------------------------- 28.68/8.69 28.68/8.69 (78) SCCToIRSProof (SOUND) 28.68/8.69 Transformed FIGraph SCCs to intTRSs. Log: 28.68/8.69 Generated rules. Obtained 23 IRulesP rules: 28.68/8.69 f11047_0__init__GE(EOS(STATIC_11047), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i3960)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i3960)), java.lang.Object(ARRAY(i3959)), i3960, i3959, i4652) -> f11053_0__init__Load(EOS(STATIC_11053), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i3960)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i3960)), java.lang.Object(ARRAY(i3959)), i4652) :|: i3960 < i3959 28.68/8.69 f11053_0__init__Load(EOS(STATIC_11053), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i3960)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i3960)), java.lang.Object(ARRAY(i3959)), i4652) -> f11057_0__init__Load(EOS(STATIC_11057), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i3960)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i3960)), java.lang.Object(ARRAY(i3959)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i3960)), i4652) :|: TRUE 28.68/8.69 f11057_0__init__Load(EOS(STATIC_11057), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i3960)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i3960)), java.lang.Object(ARRAY(i3959)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i3960)), i4652) -> f11063_0__init__Load(EOS(STATIC_11063), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i3960)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i3960)), java.lang.Object(ARRAY(i3959)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i3960)), java.lang.Object(ARRAY(i3959)), i4652) :|: TRUE 28.68/8.69 f11063_0__init__Load(EOS(STATIC_11063), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i3960)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i3960)), java.lang.Object(ARRAY(i3959)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i3960)), java.lang.Object(ARRAY(i3959)), i4652) -> f11068_0__init__Duplicate(EOS(STATIC_11068), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i3960)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i3960)), java.lang.Object(ARRAY(i3959)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i3960)), java.lang.Object(ARRAY(i3959)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i3960)), i4652) :|: TRUE 28.68/8.69 f11068_0__init__Duplicate(EOS(STATIC_11068), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i3960)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i3960)), java.lang.Object(ARRAY(i3959)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i3960)), java.lang.Object(ARRAY(i3959)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i3960)), i4652) -> f11074_0__init__FieldAccess(EOS(STATIC_11074), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i3960)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i3960)), java.lang.Object(ARRAY(i3959)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i3960)), java.lang.Object(ARRAY(i3959)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i3960)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i3960)), i4652) :|: TRUE 28.68/8.69 f11074_0__init__FieldAccess(EOS(STATIC_11074), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i3960)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i3960)), java.lang.Object(ARRAY(i3959)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i3960)), java.lang.Object(ARRAY(i3959)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i3960)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i3960)), i4652) -> f11079_0__init__Duplicate(EOS(STATIC_11079), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i3960)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i3960)), java.lang.Object(ARRAY(i3959)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i3960)), java.lang.Object(ARRAY(i3959)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i3960)), i3960, i4652) :|: TRUE 28.68/8.69 f11079_0__init__Duplicate(EOS(STATIC_11079), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i3960)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i3960)), java.lang.Object(ARRAY(i3959)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i3960)), java.lang.Object(ARRAY(i3959)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i3960)), i3960, i4652) -> f11086_0__init__ConstantStackPush(EOS(STATIC_11086), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i3960)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i3960)), java.lang.Object(ARRAY(i3959)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i3960)), java.lang.Object(ARRAY(i3959)), i3960, java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i3960)), i3960, i4652) :|: TRUE 28.68/8.69 f11086_0__init__ConstantStackPush(EOS(STATIC_11086), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i3960)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i3960)), java.lang.Object(ARRAY(i3959)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i3960)), java.lang.Object(ARRAY(i3959)), i3960, java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i3960)), i3960, i4652) -> f11093_0__init__IntArithmetic(EOS(STATIC_11093), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i3960)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i3960)), java.lang.Object(ARRAY(i3959)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i3960)), java.lang.Object(ARRAY(i3959)), i3960, java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i3960)), i3960, 1, i4652) :|: TRUE 28.68/8.69 f11093_0__init__IntArithmetic(EOS(STATIC_11093), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i3960)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i3960)), java.lang.Object(ARRAY(i3959)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i3960)), java.lang.Object(ARRAY(i3959)), i3960, java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i3960)), i3960, matching1, i4652) -> f11099_0__init__FieldAccess(EOS(STATIC_11099), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i3960)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i3960)), java.lang.Object(ARRAY(i3959)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i3960)), java.lang.Object(ARRAY(i3959)), i3960, java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i3960)), i3960 + 1, i4652) :|: i3960 >= 0 && matching1 = 1 28.68/8.69 f11099_0__init__FieldAccess(EOS(STATIC_11099), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i3960)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i3960)), java.lang.Object(ARRAY(i3959)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i3960)), java.lang.Object(ARRAY(i3959)), i3960, java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i3960)), i4024, i4652) -> f11101_0__init__ArrayAccess(EOS(STATIC_11101), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4024)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4024)), java.lang.Object(ARRAY(i3959)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4024)), java.lang.Object(ARRAY(i3959)), i3960, i4652 + 1) :|: i4652 >= 0 28.68/8.69 f11101_0__init__ArrayAccess(EOS(STATIC_11101), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4024)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4024)), java.lang.Object(ARRAY(i3959)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4024)), java.lang.Object(ARRAY(i3959)), i3960, i4652) -> f11105_0__init__ArrayAccess(EOS(STATIC_11105), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4024)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4024)), java.lang.Object(ARRAY(i3959)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4024)), java.lang.Object(ARRAY(i3959)), i3960, i4652) :|: TRUE 28.68/8.69 f11105_0__init__ArrayAccess(EOS(STATIC_11105), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4024)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4024)), java.lang.Object(ARRAY(i3959)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4024)), java.lang.Object(ARRAY(i3959)), i3960, i4652) -> f11121_0__init__Duplicate(EOS(STATIC_11121), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4024)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4024)), java.lang.Object(ARRAY(i3959)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4024)), o6511, i4652) :|: i3960 < i3959 28.68/8.69 f11121_0__init__Duplicate(EOS(STATIC_11121), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4024)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4024)), java.lang.Object(ARRAY(i3959)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4024)), o6511, i4652) -> f11128_0__init__FieldAccess(EOS(STATIC_11128), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4024)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4024)), java.lang.Object(ARRAY(i3959)), o6511, java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4024)), o6511, i4652) :|: TRUE 28.68/8.69 f11128_0__init__FieldAccess(EOS(STATIC_11128), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4024)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4024)), java.lang.Object(ARRAY(i3959)), o6511, java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4024)), o6511, i4652) -> f11136_0__init__NONNULL(EOS(STATIC_11136), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4024)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4024)), java.lang.Object(ARRAY(i3959)), o6511, i4652) :|: TRUE 28.68/8.69 f11136_0__init__NONNULL(EOS(STATIC_11136), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4024)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4024)), java.lang.Object(ARRAY(i3959)), NULL, i4652) -> f11146_0__init__NONNULL(EOS(STATIC_11146), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4024)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4024)), java.lang.Object(ARRAY(i3959)), NULL, i4652) :|: TRUE 28.68/8.69 f11146_0__init__NONNULL(EOS(STATIC_11146), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4024)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4024)), java.lang.Object(ARRAY(i3959)), NULL, i4652) -> f11155_0__init__JMP(EOS(STATIC_11155), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4024)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4024)), java.lang.Object(ARRAY(i3959)), i4652) :|: TRUE 28.68/8.69 f11155_0__init__JMP(EOS(STATIC_11155), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4024)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4024)), java.lang.Object(ARRAY(i3959)), i4652) -> f11161_0__init__Load(EOS(STATIC_11161), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4024)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4024)), java.lang.Object(ARRAY(i3959)), i4652) :|: TRUE 28.68/8.69 f11161_0__init__Load(EOS(STATIC_11161), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4024)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4024)), java.lang.Object(ARRAY(i3959)), i4652) -> f11021_0__init__Load(EOS(STATIC_11021), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4024)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i4024)), java.lang.Object(ARRAY(i3959)), i4652) :|: TRUE 28.68/8.69 f11021_0__init__Load(EOS(STATIC_11021), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i3960)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i3960)), java.lang.Object(ARRAY(i3959)), i4652) -> f11026_0__init__FieldAccess(EOS(STATIC_11026), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i3960)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i3960)), java.lang.Object(ARRAY(i3959)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i3960)), i4652) :|: TRUE 28.68/8.69 f11026_0__init__FieldAccess(EOS(STATIC_11026), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i3960)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i3960)), java.lang.Object(ARRAY(i3959)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i3960)), i4652) -> f11031_0__init__Load(EOS(STATIC_11031), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i3960)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i3960)), java.lang.Object(ARRAY(i3959)), i3960, i4652) :|: TRUE 28.68/8.69 f11031_0__init__Load(EOS(STATIC_11031), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i3960)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i3960)), java.lang.Object(ARRAY(i3959)), i3960, i4652) -> f11036_0__init__ArrayLength(EOS(STATIC_11036), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i3960)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i3960)), java.lang.Object(ARRAY(i3959)), i3960, java.lang.Object(ARRAY(i3959)), i4652) :|: TRUE 28.68/8.69 f11036_0__init__ArrayLength(EOS(STATIC_11036), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i3960)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i3960)), java.lang.Object(ARRAY(i3959)), i3960, java.lang.Object(ARRAY(i3959)), i4652) -> f11041_0__init__GE(EOS(STATIC_11041), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i3960)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i3960)), java.lang.Object(ARRAY(i3959)), i3960, i3959, i4652) :|: i3959 >= 0 28.68/8.69 f11041_0__init__GE(EOS(STATIC_11041), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i3960)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i3960)), java.lang.Object(ARRAY(i3959)), i3960, i3959, i4652) -> f11047_0__init__GE(EOS(STATIC_11047), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i3960)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i3960)), java.lang.Object(ARRAY(i3959)), i3960, i3959, i4652) :|: i3960 < i3959 28.68/8.69 Combined rules. Obtained 1 IRulesP rules: 28.68/8.69 f11047_0__init__GE(EOS(STATIC_11047), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i3960:0)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i3960:0)), java.lang.Object(ARRAY(i3959:0)), i3960:0, i3959:0, i4652:0) -> f11047_0__init__GE(EOS(STATIC_11047), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i3960:0 + 1)), java.lang.Object(javaUtilEx.HashMap$HashIterator(javaUtilEx.HashMap$KeyIterator(EOC), i3960:0 + 1)), java.lang.Object(ARRAY(i3959:0)), i3960:0 + 1, i3959:0, i4652:0 + 1) :|: i3960:0 + 1 < i3959:0 && i3960:0 > -1 && i3959:0 > -1 && i4652:0 > -1 28.68/8.69 Filtered constant ground arguments: 28.68/8.69 f11047_0__init__GE(x1, x2, x3, x4, x5, x6, x7) -> f11047_0__init__GE(x2, x3, x4, x5, x6, x7) 28.68/8.69 EOS(x1) -> EOS 28.68/8.69 javaUtilEx.HashMap$HashIterator(x1, x2) -> javaUtilEx.HashMap$HashIterator(x2) 28.68/8.69 javaUtilEx.HashMap$KeyIterator(x1) -> javaUtilEx.HashMap$KeyIterator 28.68/8.69 Filtered duplicate arguments: 28.68/8.69 f11047_0__init__GE(x1, x2, x3, x4, x5, x6) -> f11047_0__init__GE(x2, x3, x4, x5, x6) 28.68/8.69 Finished conversion. Obtained 1 rules.P rules: 28.68/8.69 f11047_0__init__GE(java.lang.Object(javaUtilEx.HashMap$HashIterator(i3960:0)), java.lang.Object(ARRAY(i3959:0)), i3960:0, i3959:0, i4652:0, i3960:0, i3959:0) -> f11047_0__init__GE(java.lang.Object(javaUtilEx.HashMap$HashIterator(i3960:0 + 1)), java.lang.Object(ARRAY(i3959:0)), i3960:0 + 1, i3959:0, i4652:0 + 1, i3960:0 + 1, i3959:0) :|: i3960:0 > -1 && i3960:0 + 1 < i3959:0 && i4652:0 > -1 && i3959:0 > -1 28.68/8.69 28.68/8.69 ---------------------------------------- 28.68/8.69 28.68/8.69 (79) 28.68/8.69 Obligation: 28.68/8.69 Rules: 28.68/8.69 f11047_0__init__GE(java.lang.Object(javaUtilEx.HashMap$HashIterator(i3960:0)), java.lang.Object(ARRAY(i3959:0)), i3960:0, i3959:0, i4652:0, i3960:0, i3959:0) -> f11047_0__init__GE(java.lang.Object(javaUtilEx.HashMap$HashIterator(i3960:0 + 1)), java.lang.Object(ARRAY(i3959:0)), i3960:0 + 1, i3959:0, i4652:0 + 1, i3960:0 + 1, i3959:0) :|: i3960:0 > -1 && i3960:0 + 1 < i3959:0 && i4652:0 > -1 && i3959:0 > -1 28.68/8.69 28.68/8.69 ---------------------------------------- 28.68/8.69 28.68/8.69 (80) IRSFormatTransformerProof (EQUIVALENT) 28.68/8.69 Reformatted IRS to match normalized format (transformed away non-linear left-hand sides, !=, / and %). 28.68/8.69 ---------------------------------------- 28.68/8.69 28.68/8.69 (81) 28.68/8.69 Obligation: 28.68/8.69 Rules: 28.68/8.69 f11047_0__init__GE(java.lang.Object(javaUtilEx.HashMap$HashIterator(i3960:0)), java.lang.Object(ARRAY(i3959:0)), i3960:0, i3959:0, i4652:0, i3960:0, i3959:0) -> f11047_0__init__GE(java.lang.Object(javaUtilEx.HashMap$HashIterator(arith)), java.lang.Object(ARRAY(i3959:0)), arith, i3959:0, arith1, arith, i3959:0) :|: i3960:0 > -1 && i3960:0 + 1 < i3959:0 && i4652:0 > -1 && i3959:0 > -1 && arith = i3960:0 + 1 && arith1 = i4652:0 + 1 && arith = i3960:0 + 1 && arith = i3960:0 + 1 28.68/8.69 28.68/8.69 ---------------------------------------- 28.68/8.69 28.68/8.69 (82) IRSwTTerminationDigraphProof (EQUIVALENT) 28.68/8.69 Constructed termination digraph! 28.68/8.69 Nodes: 28.68/8.69 (1) f11047_0__init__GE(java.lang.Object(javaUtilEx.HashMap$HashIterator(i3960:0)), java.lang.Object(ARRAY(i3959:0)), i3960:0, i3959:0, i4652:0, i3960:0, i3959:0) -> f11047_0__init__GE(java.lang.Object(javaUtilEx.HashMap$HashIterator(arith)), java.lang.Object(ARRAY(i3959:0)), arith, i3959:0, arith1, arith, i3959:0) :|: i3960:0 > -1 && i3960:0 + 1 < i3959:0 && i4652:0 > -1 && i3959:0 > -1 && arith = i3960:0 + 1 && arith1 = i4652:0 + 1 && arith = i3960:0 + 1 && arith = i3960:0 + 1 28.68/8.69 28.68/8.69 Arcs: 28.68/8.69 (1) -> (1) 28.68/8.69 28.68/8.69 This digraph is fully evaluated! 28.68/8.69 ---------------------------------------- 28.68/8.69 28.68/8.69 (83) 28.68/8.69 Obligation: 28.68/8.69 28.68/8.69 Termination digraph: 28.68/8.69 Nodes: 28.68/8.69 (1) f11047_0__init__GE(java.lang.Object(javaUtilEx.HashMap$HashIterator(i3960:0)), java.lang.Object(ARRAY(i3959:0)), i3960:0, i3959:0, i4652:0, i3960:0, i3959:0) -> f11047_0__init__GE(java.lang.Object(javaUtilEx.HashMap$HashIterator(arith)), java.lang.Object(ARRAY(i3959:0)), arith, i3959:0, arith1, arith, i3959:0) :|: i3960:0 > -1 && i3960:0 + 1 < i3959:0 && i4652:0 > -1 && i3959:0 > -1 && arith = i3960:0 + 1 && arith1 = i4652:0 + 1 && arith = i3960:0 + 1 && arith = i3960:0 + 1 28.68/8.69 28.68/8.69 Arcs: 28.68/8.69 (1) -> (1) 28.68/8.69 28.68/8.69 This digraph is fully evaluated! 28.68/8.69 28.68/8.69 ---------------------------------------- 28.68/8.69 28.68/8.69 (84) IntTRSCompressionProof (EQUIVALENT) 28.68/8.69 Compressed rules. 28.68/8.69 ---------------------------------------- 28.68/8.69 28.68/8.69 (85) 28.68/8.69 Obligation: 28.68/8.69 Rules: 28.68/8.69 f11047_0__init__GE(java.lang.Object(javaUtilEx.HashMap$HashIterator(i3960:0:0)), java.lang.Object(ARRAY(i3959:0:0)), i3960:0:0, i3959:0:0, i4652:0:0, i3960:0:0, i3959:0:0) -> f11047_0__init__GE(java.lang.Object(javaUtilEx.HashMap$HashIterator(i3960:0:0 + 1)), java.lang.Object(ARRAY(i3959:0:0)), i3960:0:0 + 1, i3959:0:0, i4652:0:0 + 1, i3960:0:0 + 1, i3959:0:0) :|: i4652:0:0 > -1 && i3959:0:0 > -1 && i3960:0:0 + 1 < i3959:0:0 && i3960:0:0 > -1 28.68/8.69 28.68/8.69 ---------------------------------------- 28.68/8.69 28.68/8.69 (86) TempFilterProof (SOUND) 28.68/8.69 Used the following sort dictionary for filtering: 28.68/8.69 f11047_0__init__GE(VARIABLE, VARIABLE, INTEGER, INTEGER, INTEGER, INTEGER, INTEGER) 28.68/8.69 java.lang.Object(VARIABLE) 28.68/8.69 javaUtilEx.HashMap$HashIterator(INTEGER) 28.68/8.69 ARRAY(INTEGER) 28.68/8.69 Replaced non-predefined constructor symbols by 0. 28.68/8.69 ---------------------------------------- 28.68/8.69 28.68/8.69 (87) 28.68/8.69 Obligation: 28.68/8.69 Rules: 28.68/8.69 f11047_0__init__GE(c, c1, i3960:0:0, i3959:0:0, i4652:0:0, i3960:0:0, i3959:0:0) -> f11047_0__init__GE(c2, c3, c4, i3959:0:0, c5, c6, i3959:0:0) :|: c6 = i3960:0:0 + 1 && (c5 = i4652:0:0 + 1 && (c4 = i3960:0:0 + 1 && (c3 = 0 && (c2 = 0 && (c1 = 0 && c = 0))))) && (i4652:0:0 > -1 && i3959:0:0 > -1 && i3960:0:0 + 1 < i3959:0:0 && i3960:0:0 > -1) 28.68/8.69 28.68/8.69 ---------------------------------------- 28.68/8.69 28.68/8.69 (88) PolynomialOrderProcessor (EQUIVALENT) 28.68/8.69 Found the following polynomial interpretation: 28.68/8.69 [f11047_0__init__GE(x, x1, x2, x3, x4, x5, x6)] = c*x + c1*x1 - x2 + x3 28.68/8.69 28.68/8.69 The following rules are decreasing: 28.68/8.69 f11047_0__init__GE(c, c1, i3960:0:0, i3959:0:0, i4652:0:0, i3960:0:0, i3959:0:0) -> f11047_0__init__GE(c2, c3, c4, i3959:0:0, c5, c6, i3959:0:0) :|: c6 = i3960:0:0 + 1 && (c5 = i4652:0:0 + 1 && (c4 = i3960:0:0 + 1 && (c3 = 0 && (c2 = 0 && (c1 = 0 && c = 0))))) && (i4652:0:0 > -1 && i3959:0:0 > -1 && i3960:0:0 + 1 < i3959:0:0 && i3960:0:0 > -1) 28.68/8.69 The following rules are bounded: 28.68/8.69 f11047_0__init__GE(c, c1, i3960:0:0, i3959:0:0, i4652:0:0, i3960:0:0, i3959:0:0) -> f11047_0__init__GE(c2, c3, c4, i3959:0:0, c5, c6, i3959:0:0) :|: c6 = i3960:0:0 + 1 && (c5 = i4652:0:0 + 1 && (c4 = i3960:0:0 + 1 && (c3 = 0 && (c2 = 0 && (c1 = 0 && c = 0))))) && (i4652:0:0 > -1 && i3959:0:0 > -1 && i3960:0:0 + 1 < i3959:0:0 && i3960:0:0 > -1) 28.68/8.69 28.68/8.69 ---------------------------------------- 28.68/8.69 28.68/8.69 (89) 28.68/8.69 YES 28.68/8.73 EOF