2013-02-27 32 views
5

khi tôi sử dụng ArrayList trong Java, có một số thứ mà tôi không hiểu. Đây là mã khởi tạo của tôi:ArrayList <Integer> với phương thức get/remove

ArrayList<Integer> list = new ArrayList <Integer>(); 
list.add (0); 
list.add (1); 

đôi khi tôi cần phải xoá một đối tượng bằng cách chỉ số của nó:

list.remove (0) // delete the object in the first box 

nhưng đôi khi tôi muốn xóa một đối tượng bằng cách nội dung của nó:

list.remove (0) // delete the object HAS Which value of 0 

mã này rất mơ hồ. Để làm rõ những gì tôi muốn làm điều đó trong mã, tôi chỉ định kiểu như thế này:

list.remove ((Object) 0) // delete the object which has a value of 0 

Nếu tôi không AC, cách duy nhất để biết được phương pháp này được gọi là là để đưa con trỏ chuột vào phương pháp để xem: java.util.ArrayList.remove boolean (đối tượng đối tượng)

Java Nhưng nó tạo sự khác biệt như thế nào? có con trỏ phương pháp không? Có cách nào không rõ ràng hơn để thực hiện việc này không?

cảm ơn bạn rất nhiều, xin lỗi vì tiếng Anh của tôi.

PS: Tôi nên nói rằng cuối cùng tôi đã sử dụng SparseIntArray nhưng tôi tò mò

Trả lời

8

Đối với các stater. List#remove(index) trả về đối tượng đã bị xóa khỏi danh sách. List#remove(Object) trả về một boolean.

Tuy nhiên, trong trường hợp đặc biệt này. bạn có thể làm.

ArrayList<Integer> list = new ArrayList <Integer>(); 
     list.add (0); 
     list.add (1); 
     System.out.println(list.remove(new Integer(0))); 
+0

vâng tôi nhận thấy điều này. nhưng nếu tôi không sử dụng giá trị trả lại, tôi tự hỏi làm thế nào Java làm cho sự khác biệt, làm thế nào autoboxing hoạt động. –

+0

@juliendumortier Nó chỉ phân loại khó hiểu trong kịch bản cụ thể này. nhưng nếu bạn nghĩ về nó nói chung trong trường hợp đối tượng là như thế nào. 'list.remove (động vật)' hoặc 'list.remove (watever)'. – PermGenError

+0

ok cảm ơn! câu hỏi cuối cùng. System.out.println (danh sách.loại bỏ ((số nguyên) 0); đây là một thực hành tốt/xấu? (điều này tránh tạo ra một thể hiện mới). –

2

Bất cứ khi nào có một sự nhập nhằng trong Java (khi có nhiều phương pháp chữ ký có thể phù hợp với các loại hình các thông số tại thời gian biên dịch), sử dụng dàn diễn viên để lựa chọn phương pháp đúng là sự lựa chọn duy nhất của bạn. Tất nhiên, bạn có thể truyền tham số đến biến cục bộ trước lời gọi thực tế, nhưng điều này không làm cho nó rõ ràng hơn cho người đọc - truyền tham số trực tiếp nơi nó được sử dụng là tùy chọn tốt nhất, theo ý kiến ​​của tôi, để làm rõ được gọi là. Bằng cách này, lý do khiến API trở nên vô cùng quan trọng trong trường hợp này là tại thời điểm API được tạo, không có Boxing tự động nên không thể viết mã mơ hồ ngay từ đầu. Tuy nhiên việc thay đổi phương pháp để làm cho nó rõ ràng sẽ là một thay đổi đột phá. Kể từ khi lưu trữ Integer trong một arraylist không phải là tuyệt vời của một ý tưởng anyway hầu hết thời gian, họ quyết định để cho chúng ta sống với sự bực mình nhỏ.

1

Nếu nó chỉ là sự mơ hồ với phương pháp remove() trong Integer ArrayList được làm phiền bạn, bạn có thể kéo dài tuổi ArrayList để thực hiện của riêng bạn:

public class MyIntArrayList extends ArrayList<Integer> { 

    boolean removeByObject(Integer intObj) { 
     return super.remove(intObj); 
    } 

    Integer removeByIndex(int index) { 
     return super.remove(index); 
    } 

} 
0

Bạn có thể sử dụng list.remove(new Integer(0)) để chắc chắn loại bỏ các đối tượng

Các vấn đề liên quan