我的ArrayList

时间:2017-12-15 09:52:01

标签: android arraylist unique

我有下一堂课:

private class LocoList{
    String Id;
    String Name;
    String Latitude;
    String Longitude;

    LocoList(String LocationId, String LocationName,  String 
        LocationLatitude, String LocationLongitude){

        this.Id = LocationId;
        this.Name = LocationName;
        this.Latitude = LocationLatitude;
        this.Longitude = LocationLongitude;
        }

    @Override public boolean equals(Object obj) {
        if (obj == this) { return true; }
        if (obj == null || obj.getClass() != this.getClass()) { return false; }
        NearLocoList guest = (NearLocoList) obj;
        return Id == guest.Id;
    }

    @Override
    public int hashCode() {
        return Objects.hash(Id);
    }

}

用于下一个数组:

private ArrayList<LocoList> myLocations = new ArrayList<>();

要填充我的arrayList,我使用下一个方法:

private void getLocoDatabase(LatLng PoI) {

    double mLatitude, mLongitude;
    mLatitude = PoI.latitude;
    mLongitude = PoI.longitude;

    ArrayList<ArrayList<Object>> dataLocation =
            mDBhelperMA.getLocations(mLatitude, mLongitude);

   for (int i = 0; i < dataLocation.size(); i++) {
        ArrayList<Object> row = dataLocation.get(i);

  if (!myLocations.contains(new LocoList(row.get(0).toString(), row.get(1).toString(), row.get(2).toString(),row.get(3).toString) {
        myLocations.add(new LocoList(row.get(0).toString(), row.get(1).toString(), row.get(2).toString(),row.get(3).toString);
        }
    }
}

我的问题是需要为不同的LatLng调用GetLocoDatabase几次,并希望避免重复的值。

我必须要做的就是myLocations ArrayList上的唯一值?要避免两次或两次以上相同的位置。

3 个答案:

答案 0 :(得分:2)

你必须做两件事:

  • override默认为equals()/ hashCode()实现
  • 从使用List / ArrayList更改为Set / HashSet,例如

您必须了解不同的集合类具有不同的属性。当&#34;唯一性&#34;是你最关心的问题,然后使用集合,而不是列表。

答案 1 :(得分:0)

覆盖LocoList中的equals方法,并确定两个LocoList对象被视为相等的条件。

然后,当将对象添加到arraylist时,执行.contains检查并仅在值不存在时添加

- 编辑 -

如何使用等于

@Override 
public boolean equals(Object obj) {        
    if (obj != null) { 
        LocoList compareObj = (LocoList) obj;
        if (compareObj.id == id)
            return true;
    }
    return false;
}

如何使用包含

LocoList myObj = new LocoList(row.get(0).toString(), row.get(1).toString(),
                      row.get(2).toString(), row.get(3).toString;
if (!myLocations.contains(myObj) {
    myLocations.add(myObj);
}

答案 2 :(得分:0)

您可以使用set来strore列表

Set<String> set = new LinkedHashSet<>(list);

 Set<String> set = new LinkedHashSet<>;
set .addAll(list);
list.clear();
list.addAll(set )