Java ArrayList.remove(int索引)不使用非匿名类对象
ArrayList.remove(int index)正在处理ActionListener类的匿名实例:- DeleteModule.java:-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
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) ;