package com.jpexs.decompiler.flash.amf.amf3; import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; import java.util.List; import java.util.Set; /** * Set which maintains orders elements by time they were added * * @param <E> */ public class ListSet<E> implements Set<E> { private final List<E> list = new ArrayList<>(); public ListSet() { } public ListSet(Collection<? extends E> c) { addAll(c); } @Override public int size() { return list.size(); } @Override public boolean isEmpty() { return list.isEmpty(); } @Override public boolean contains(Object o) { return list.contains(o); } @Override public Iterator<E> iterator() { return list.iterator(); } @Override public Object[] toArray() { return list.toArray(); } @Override public <E> E[] toArray(E[] a) { return (E[]) list.toArray(a); } @Override public boolean add(E e) { if (!contains(e)) { list.add(e); return true; } return false; } @Override public boolean remove(Object o) { return list.remove(o); } @Override public boolean containsAll(Collection<?> c) { return list.containsAll(c); } @Override public boolean addAll(Collection<? extends E> c) { boolean modified = false; for (E e : c) { if (add(e)) { modified = true; } } return modified; } @Override public boolean retainAll(Collection<?> c) { return list.retainAll(c); } @Override public boolean removeAll(Collection<?> c) { return list.removeAll(c); } @Override public void clear() { list.clear(); } }