Is there a no-duplicate List implementation out there?

后端 未结 11 683
悲哀的现实
悲哀的现实 2020-11-29 00:53

I know about SortedSet, but in my case I need something that implements List, and not Set. So is there an implementation out there, in the API or e

11条回答
  •  迷失自我
    2020-11-29 00:56

    I just made my own UniqueList in my own little library like this:

    package com.bprog.collections;//my own little set of useful utilities and classes
    
    import java.util.HashSet;
    import java.util.ArrayList;
    import java.util.List;
    /**
    *
    * @author Jonathan
    */
    public class UniqueList {
    
    private HashSet masterSet = new HashSet();
    private ArrayList growableUniques;
    private Object[] returnable;
    
    public UniqueList() {
        growableUniques = new ArrayList();
    }
    
    public UniqueList(int size) {
        growableUniques = new ArrayList(size);
    }
    
    public void add(Object thing) {
        if (!masterSet.contains(thing)) {
            masterSet.add(thing);
            growableUniques.add(thing);
        }
    }
    
    /**
     * Casts to an ArrayList of unique values
     * @return 
     */
    public List getList(){
        return growableUniques;
    }
    
    public Object get(int index) {
        return growableUniques.get(index);
    }
    
    public Object[] toObjectArray() {
        int size = growableUniques.size();
        returnable = new Object[size];
        for (int i = 0; i < size; i++) {
            returnable[i] = growableUniques.get(i);
        }
        return returnable;
        }
    }
    

    I have a TestCollections class that looks like this:

    package com.bprog.collections;
    import com.bprog.out.Out;
    /**
    *
    * @author Jonathan
    */
    public class TestCollections {
        public static void main(String[] args){
            UniqueList ul = new UniqueList();
            ul.add("Test");
            ul.add("Test");
            ul.add("Not a copy");
            ul.add("Test"); 
            //should only contain two things
            Object[] content = ul.toObjectArray();
            Out.pl("Array Content",content);
        }
    }
    

    Works fine. All it does is it adds to a set if it does not have it already and there's an Arraylist that is returnable, as well as an object array.

提交回复
热议问题