001    /**
002     * Copyright (C) 2007-2011, Jens Lehmann
003     *
004     * This file is part of DL-Learner.
005     *
006     * DL-Learner is free software; you can redistribute it and/or modify
007     * it under the terms of the GNU General Public License as published by
008     * the Free Software Foundation; either version 3 of the License, or
009     * (at your option) any later version.
010     *
011     * DL-Learner is distributed in the hope that it will be useful,
012     * but WITHOUT ANY WARRANTY; without even the implied warranty of
013     * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
014     * GNU General Public License for more details.
015     *
016     * You should have received a copy of the GNU General Public License
017     * along with this program.  If not, see <http://www.gnu.org/licenses/>.
018     */
019    
020    package org.dllearner.prolog;
021    
022    import java.util.ArrayList;
023    import java.util.Collection;
024    import java.util.Iterator;
025    import java.util.Set;
026    
027    /**
028     * 
029     * @author Sebastian Bader
030     * 
031     * @param <T>
032     */
033    public class ArrayListSet<T> extends ArrayList<T> implements Set<T> {
034    
035            private static final long serialVersionUID = 1530739499015312204L;
036    
037            public ArrayListSet() {
038                    this(10);
039            }
040    
041            public ArrayListSet(int initialCapacity) {
042                    super(initialCapacity);
043            }
044    
045            public ArrayListSet(Collection<T> c) {
046                    this(c.size());
047                    addAll(c);
048            }
049    
050            @Override
051            public boolean add(T o) {
052                    if (contains(o))
053                            return false;
054                    return super.add(o);
055            }
056    
057            @Override
058            public boolean addAll(Collection<? extends T> c) {
059                    Iterator<? extends T> iter = c.iterator();
060                    boolean ret = false;
061                    while (iter.hasNext()) {
062                            if (add(iter.next())) {
063                                    ret = true;
064                            }
065                    }
066                    return ret;
067            }
068    
069    }