• 6
name

A PHP Error was encountered

Severity: Notice

Message: Undefined index: userid

Filename: views/question.php

Line Number: 191

Backtrace:

File: /home/prodcxja/public_html/questions/application/views/question.php
Line: 191
Function: _error_handler

File: /home/prodcxja/public_html/questions/application/controllers/Questions.php
Line: 433
Function: view

File: /home/prodcxja/public_html/questions/index.php
Line: 315
Function: require_once

Try this...

    ArrayList<String> values=new ArrayList<String>();
    HashSet<String> hashSet = new HashSet<String>();
    hashSet.addAll(values);
    values.clear();
    values.addAll(hashSet);

Happy coding...

  • 69
Reply Report

Try below code,

ArrayList<String> values=new ArrayList<String>();
String newValue;

// repeated additions:
if (!values.contains(newValue)) {values.add(newValue);}
  • 29
Reply Report

I think a real neat solution for enforcing unique array lists is this one, if it's not too much code for what you're trying to achieve.

public class UniqueOverridingList extends ArrayList {

    public enum LAST_RESULT {
        ADD, OVERRIDE, NOTHING;
    }

    private LAST_RESULT lastResult;

    public boolean add(T obj) {
        for (int i = 0; i < size(); i++) {
            if (obj.equals(get(i))) {
                set(i, obj);
                lastResult = LAST_RESULT.OVERRIDE;
                return true;
            }
        }
        boolean b = super.add(obj);
        if (b) {
            lastResult = LAST_RESULT.ADD;
        } else {
            lastResult = LAST_RESULT.NOTHING;
        }
        return b;
    }

    public boolean addAll(Collection c) {
        boolean result = true;
        for (T t : c) {
            if (!add(t)) {
                result = false;
            }
        }
        return result;
    }

    public LAST_RESULT getLastResult() {
        return lastResult;
    }

}
  • 2
Reply Report

The class David Hedlund suggested can be made a lot shorter:

public class UniqueArrayList extends ArrayList {
    /**
     * Only add the object if there is not
     * another copy of it in the list
     */
    public boolean add(T obj) {
        if(this.contains(obj))
           return false;
        return super.add(obj);
    }

    public boolean addAll(Collection c) {
        boolean result = false;
        for (T t : c) {
            if (add(t)) {
                result = true;
            }
        }
        return result;
    }
}

The addAll operation is modified too. The documentation states:

Returns: true if this list changed as a result of the call.

I modified the method to reflect this behaviour. There's still one problem. The documentation of the addAll() method also states:

Appends all of the elements in the specified collection to the end of this list, in the order that they are returned by the specified collection's iterator.

The order might be broken by using this method. A possible workaround for this problem might be not supporting the addAll method.

  • 1
Reply Report