Java ArrayList.remove(int索引)不使用非匿名类对象

Java ArrayList.remove(int索引)不使用非匿名类对象,java,collections,arraylist,anonymous-class,Java,Collections,Arraylist,Anonymous Class,ArrayList.remove(int index)正在处理ActionListener类的匿名实例:- DeleteModule.java:- import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.ArrayList; import javax.swing.JButton; import javax.swing

ArrayList.remove(int index)正在处理ActionListener类的匿名实例:-

DeleteModule.java:-

import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JTextField;



class MyFrame extends JFrame{

    private ArrayList<String> list = new ArrayList<String>() ; 
    private JButton btn = new JButton("Enter index to delete : ") ;
    private JTextField fld = new JTextField() ;

    MyFrame(){
        populateList() ;

        setLayout(new GridLayout(1, 2)) ;
        setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE) ;
        setSize(400, 60) ;

        btn.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                list.remove( Integer.parseInt( fld.getText() ) ) ;
                JOptionPane.showConfirmDialog(null, list, "Total Elements : " + list.size(), JOptionPane.DEFAULT_OPTION, JOptionPane.PLAIN_MESSAGE) ;
            }
        });

        add(btn) ;
        add(fld) ;

        setTitle("Total Elements : " + list.size()) ;

        setVisible(true) ;
    }

    private void populateList(){
        for(int i = 1 ; i <= 5 ; ++i){
            list.add("Key " + i) ;
        }
    }
}

public class DeleteModule {

    public static void main(String[] args) {
        new MyFrame() ;
    }
}
导入java.awt.GridLayout;
导入java.awt.event.ActionEvent;
导入java.awt.event.ActionListener;
导入java.util.ArrayList;
导入javax.swing.JButton;
导入javax.swing.JFrame;
导入javax.swing.JOptionPane;
导入javax.swing.JTextField;
类MyFrame扩展了JFrame{
private ArrayList list=new ArrayList();
私有JButton btn=newjbutton(“输入要删除的索引:”);
私有JTextField fld=新JTextField();
MyFrame(){
大众主义者();
setLayout(新的GridLayout(1,2));
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
设置大小(400,60);
btn.addActionListener(新ActionListener(){
@凌驾
已执行的公共无效操作(操作事件e){
remove(Integer.parseInt(fld.getText());
showConfirmDialog(null,列表,“元素总数:+list.size(),JOptionPane.DEFAULT\u选项,JOptionPane.PLAIN\u消息);
}
});
添加(btn);
添加(fld);
setTitle(“元素总数:+list.size());
setVisible(真);
}
私有void populateList(){
对于(int i=1;i类有两个
remove
方法:

  • 获取
    对象
    并尝试从列表中删除该对象的对象,以及
  • 获取
    int
    索引并在该索引处删除列表中的对象的方法
您将变量
i
声明为
整数
,因此它也是一个
对象
。因此您将调用
remove(Object)
方法。当您尝试删除
i
时,不会发生任何事情,因为列表中包含
s,而不是
整数
s

您需要做的是将变量
i
声明为
int
,给它一个默认值
0
(不能将
null
赋值给
int
),并更改行

boolean b = list.remove(i) ;


因为
remove(int)
返回从列表中删除的对象,而不是指示是否删除任何内容的
boolean

出现问题的原因是您正在调用
list.remove(object)
而不是
list.remove(int)
。因为
i
是一个
整数
(或
对象
)而不是基元类型,JVM认为您正在尝试删除对象而不是实际索引;因此返回false,因为列表中没有
整数
对象

只需将代码替换为以下代码:

int i;
try{
   i = Integer.parseInt(deleteIndexText.getText().trim()) ;
   boolean b = (list.remove(i) != null);

   JOptionPane.showConfirmDialog(null, list + "\n\n" + "Deleted : " + b + " from index " + i, "List size : " + list.size(), JOptionPane.DEFAULT_OPTION, JOptionPane.PLAIN_MESSAGE) ;
   setTitle("Total Pairs : " + list.size()) ;
   deleteIndexText.setText("") ;
}
catch(NumberFormatException nfe){
   JOptionPane.showConfirmDialog(null, "Enter numeric value in range.", "Error", JOptionPane.DEFAULT_OPTION, JOptionPane.PLAIN_MESSAGE) ;
   deleteIndexText.setText("") ;
}       
是的,Java可以改变表单

Integer i = 2, j = new Integer(10);
i = i + j;
System.out.println(i.toString());

很好,但是
int
Integer
不是相同的类型:)

在Demo.java中,您应该使用:

 boolean b = (list.remove(i.intValue()) != null)
而不是

 boolean b = list.remove(i) ;
原因如下。ArrayList有两个删除函数:一个以int(不是整数!)作为参数,另一个以Object作为参数


在第一个示例中,您使用了第一个remove(当您使用intValue()转换为int时)。在第二个示例中,您试图删除由整数表示的对象(该整数显然不在集合中)。

okz,我承认我的愚蠢错误,thnx a ton guyz…我标记此帖子已回答:)
 boolean b = (list.remove(i.intValue()) != null)
 boolean b = list.remove(i) ;