Java 从有序Arraylist添加和删除

Java 从有序Arraylist添加和删除,java,arrays,arraylist,Java,Arrays,Arraylist,我需要根据对象内部的属性向有序ArrayList添加一个对象。我知道如何使用.add方法添加对象,但我不知道如何使用compareTo()方法搜索对象的正确位置。另外,如果对象包含某个字符串,我需要从ArrayList中删除一个对象,但我不知道如何从ArrayList中访问对象属性 房地产经纪人对象 /** * Constructor for Realtor object using parameter * @param readData - array of data from line

我需要根据对象内部的属性向有序ArrayList添加一个对象。我知道如何使用.add方法添加对象,但我不知道如何使用compareTo()方法搜索对象的正确位置。另外,如果对象包含某个字符串,我需要从ArrayList中删除一个对象,但我不知道如何从ArrayList中访问对象属性

房地产经纪人对象

/**
 * 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
    }
公共类RealtorLogImpl{
私人房地产经纪人;
/**
*将Realtor对象添加到有序列表
*@param obj-Realtor对象
*/
公共无效添加(房地产经纪人obj){
//需要添加到正确的位置,具体取决于房地产经纪人许可证号码
realtorList.add(obj);
}
/**
*如果许可证匹配,则从列表中删除Realtor对象
*如果成功,则返回true
*@param许可证
*@返回
*/
公共布尔删除(字符串许可证){
//需要删除具有特定licenseNumber的Realtor,如果成功,则返回true
}

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

首先,要删除项目,我建议在arraylist上使用
removeif()


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

这里是一些基本代码;我这里没有编译器,因此您可能会发现一些小错误/打字错误

我确信有更好的类可以用来代替管理自己的有序列表

插入:

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
}

要回答您的问题,请检查以下代码段(需要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"));
}
publicstaticvoidmain(字符串[]args){
最终列表=新的ArrayList();
列表。添加(“要素1”);
列表。添加(“要素2”);
列表。添加(“要素3”);
/*
*在特定位置插入(在“要素2”和“要素3”之间添加“要素2.5”)
*/
可选elementToInsertAfter=list.stream().filter(元素->元素.equals(“元素2”)).findFirst();
if(elementToInsertAfter.isPresent()){
set(list.indexOf(elementToInsertAfter.get())+1,“Element 2.5”);
}
/*
*删除特定元素(在本例中,名称等于“元素2”)
*/
list.removeIf(element->element.equals(“element 2”);
}
#add(element)
只将一个元素添加到列表中。如果是ArrayList,则将其添加到末尾。如果要在特定位置插入元素,则需要使用
#set(index,element)



但是,您不应该手动将元素插入到特定位置,而是应该使用比较器。请参阅
java.util.List.sort(comparator
List=newarrayList();
if(List.get(13.length()==42){…}
列表中对象的类型是什么?如果类型实际上只是
对象
,元素“包含”字符串意味着什么?首先,对象是否实现了具有“特定字符串”的
.equals()
。如果是,则
.remove(对象)
将起作用。否则,您需要使用
迭代器
,该迭代器将允许您获取对象,然后使用标准方法检索值并进行比较。其次,您真的需要ArrayList(请参阅:)。最好的方法是添加,然后使用适当的比较器进行排序。感谢@KevinO我需要能够访问对象中的值