/* * Copyright 2013 Guidewire Software, Inc. */ package gw.util; import java.io.Serializable; import java.util.AbstractSet; import java.util.Arrays; import java.util.Collection; import java.util.Iterator; import java.util.Map; import java.util.Set; public class CaseInsensitiveSet<T extends CharSequence> extends AbstractSet<T> implements Set<T>, Serializable { private final Map<T, Object> _map; private static final Object MARKER = new Serializable() { }; public CaseInsensitiveSet() { _map = new CiHashMap<T, Object>(); } public CaseInsensitiveSet(Collection<? extends T> c) { this(); addAll(c); } public CaseInsensitiveSet(T[] stringArray) { this(Arrays.asList(stringArray)); } public CaseInsensitiveSet(int initialCapacity) { _map = new CiHashMap<T, Object>(initialCapacity); } public int size() { return _map.size(); } public boolean isEmpty() { return _map.isEmpty(); } public boolean contains(Object o) { //noinspection SuspiciousMethodCalls return _map.containsKey(o); } public Iterator<T> iterator() { return _map.keySet().iterator(); } public boolean add(T o) { return _map.put(o, MARKER) == null; } public boolean remove(Object o) { return _map.remove(o) == MARKER; } public void clear() { _map.clear(); } }