添加和删​​除有序的Arraylist

时间:2017-05-21 21:04:25

标签: java arrays arraylist

我需要根据Object内部的属性将Object添加到有序的ArrayList中。我知道如何使用.add方法添加对象,但我不知道如何使用compareTo()方法为它搜索正确的位置。如果Object包含某个String,我还需要从ArrayList中删除一个Object,但我无法弄清楚如何从ArrayList访问Object属性。

房地产经纪人对象

/**
 * Constructor for Realtor object using parameter
 * @param readData - array of data from line
 */ 
public Realtor(String[]readData){
    licenseNumber = readData[2];
    firstName = readData[3];
    lastName = readData[4];
    phoneNumber = readData[5];
    commission = Double.parseDouble(readData[6]);
}

RealtorLogImpl

public class RealtorLogImpl {

    private ArrayList<Realtor> realtorList;

     /**
     * Add Realtor object to ordered list
     * @param obj - Realtor object
     */
    public void add(Realtor obj){

       //needs to be added into correct place depending on Realtor licenseNumber
        realtorList.add(obj);
    }

    /**
     * Delete Realtor object from list if license matches
     * and return true if successful
     * @param license
     * @return 
     */
    public boolean remove (String license){
      //need to remove Realtor with specific licenseNumber and return true if successful
    }

3 个答案:

答案 0 :(得分:1)

我假设你正在使用java 8.其中一些东西还没有在java 7中实现,所以记住这一点。

首先,要删除我建议使用arraylist上的removeif() method的项目。这需要一个lambda表达式,可能类似于x -> x.getString().equals("someString")

其次,您可以将对象添加到数组中,然后只需sort数组。您只需编写一个比较器来对其进行排序。

答案 1 :(得分:1)

这是一些基本代码;我这里没有编译器,所以你可能会发现小错误/错别字。

我确信您可以使用更好的课程,而不是管理自己的有序列表。

要插入:

public bool add(Realtor obj) {
    int idx = 0;
    for (Realtor s : realtorList) {
        if (s.licenseNumber.equals(item.licenseNumber)) {
           return false; // Already there
        }
        if (s.licenseNumber.compareTo(item.licenseNumber) > 0) {
           orderedList.add(idx, item);
           return true; // Inserted
        }
        idx++;
    }
    orderedList.add(item);
    return true; // Appended
}

要删除:

public bool deleteItem(String license) {
    int idx = 0;
    for (Realtor s : realtorList) {
        if (s.licenseNumber.equals(license)) {
           realtorList.remove(idx);
           return true; // Removed
        }
    }
    return false; // Not found
}

答案 2 :(得分:1)

要回答您的问题,请查看以下代码段(需要Java 8)并根据您的需求进行调整:

public static void main(String[] args) {

    final List<String> list = new ArrayList<>();
    list.add("Element 1");
    list.add("Element 2");
    list.add("Element 3");

    /*
     * Insert at a specific position (add "Element 2.5" between "Element 2" and "Element 3")
     */
    Optional<String> elementToInsertAfter = list.stream().filter(element -> element.equals("Element 2")).findFirst();
    if(elementToInsertAfter.isPresent()) {
        list.set(list.indexOf(elementToInsertAfter.get()) + 1, "Element 2.5");
    }

    /*
     * Remove a particular element (in this case where name equals "Element 2")
     */
    list.removeIf(element -> element.equals("Element 2"));
}

#add(element)只是在列表中添加一个元素。如果是ArrayList,它会在最后添加。如果要在特定位置插入元素,则需要使用#set(index,element)

但是,不要手动将元素插入特定位置,而应使用比较器。见java.util.List.sort(Comparator<? super E> e)