I have an interface that I want to implement that contains the following method signature:

```
/** 
 * Return an umodifiable ordered collection
 */
public List<String> getItems();

```

In my particular implementation I need the items to be unique. What is the best way to implement this? 

I have considered

```
private List<String> items = new ArrayList<String>();
public List<String> getItems(){
    return Collections.unmodifiableList(items);
}
public void addItem(String s){
    // Inefficient -- has to scan entire list for contains
    if (!items.contains(s)) items.add(s);
}

```

And

```
private LinkedHashSet<String> items = new LinkedHashSet<String>();
public List<String> getItems(){
    // Inefficient -- has to copy the list
    return Collections.unmodifiableList(new ArrayList(items));
}
public void addItem(String s){
    items.add(s);
}

```

I'd really like LinkedHashSet to implement the List interface so I could return it directly from my second approach. Is there a work around or better solution?