@Override
	public Collection<V> values() {
		return new AbstractCollection<V>() {

			@Override
			public boolean add(V e) {
				throw new UnsupportedOperationException();
			}

			@Override
			public void clear() {
				PairMap.this.clear();
			}

			@Override
			public boolean contains(Object o) {
				return values.contains(o);
			}

			@Override
			public boolean isEmpty() {
				return keys.isEmpty();
			}

			@Override
			public Iterator<V> iterator() {
				return new Iterator<V>() {
					Iterator<V> itr = values.iterator();

					@Override
					public boolean hasNext() {
						return itr.hasNext();
					}

					@Override
					public V next() {
						return itr.next();
					}

					@Override
					public void remove() {
						throw new UnsupportedOperationException();
					}
				};
			}

			@Override
			public boolean remove(Object o) {
				throw new UnsupportedOperationException();
			}

			@Override
			public int size() {
				return values.size();
			}
		};
	}
@ Override public Collection < V > values ( ) { return new AbstractCollection < V > ( ) { @ Override public boolean add ( V e ) { throw new UnsupportedOperationException ( ) ; } @ Override public void clear ( ) { PairMap . this . clear ( ) ; } @ Override public boolean contains ( Object o ) { return values . contains ( o ) ; } @ Override public boolean isEmpty ( ) { return keys . isEmpty ( ) ; } @ Override public Iterator < V > iterator ( ) { return new Iterator < V > ( ) { Iterator < V > itr = values . iterator ( ) ; @ Override public boolean hasNext ( ) { return itr . hasNext ( ) ; } @ Override public V next ( ) { return itr . next ( ) ; } @ Override public void remove ( ) { throw new UnsupportedOperationException ( ) ; } } ; } @ Override public boolean remove ( Object o ) { throw new UnsupportedOperationException ( ) ; } @ Override public int size ( ) { return values . size ( ) ; } } ; }
{@inheritDoc}