Java ArrayList แทนที่ที่ดัชนีเฉพาะ


212

ฉันต้องการความช่วยเหลือเกี่ยวกับจาวานี้ ฉันสร้าง ArrayList ของหลอดไฟและฉันพยายามเปลี่ยนหลอดไฟที่ดัชนีเฉพาะด้วยหลอดไฟอื่น ดังนั้นด้วยหัวข้อต่อไปนี้ฉันจะดำเนินการอย่างไร

public void replaceBulb(int index, Bulbs theBulb) {

}

9
สำหรับสิ่งที่คุ้มค่าฉันกำลังดูอินเตอร์เฟสรายการสำหรับ "แทนที่", "ใส่" หรือ "แทรก" ฉันไม่คิดว่าจะมองหาชุด
GuiSim

2
@GuiSim ส่วนต่อประสานรายการนั้นไม่นานคุณสามารถอ่านได้ทั้งหมดในครั้งเดียวใน 5 นาที ...

2
ฉันกำลังใช้การเติมข้อความอัตโนมัติของ Eclipse ไม่ได้ดูผ่านอินเทอร์เฟซ
GuiSim

คำตอบ:


367

ลองใช้set(int index, E element)วิธีการในรายการอินเตอร์เฟส


3
ใช่แล้ว แต่คุณอาจคิดว่าจะแก้ไขเพราะคำตอบของคุณนำไปสู่ความจริงเช่น set () วิธีการเป็นวิธีคงที่ซึ่งไม่ได้ใช่ไหม
Android Killer

9
คง @AndroidKiller มันเป็นArrayList.set();แต่เมื่อคุณเรียกมันว่าอยู่ในรายชื่อของคุณเองก็ไม่ได้:myArrayList.set(int, E);
whitfin

ปัญหาในวิธีนี้คือมันจะพ่น arrayOutOfBoundException ในกรณีที่ arrayList ไม่ได้เริ่มต้น ฉันต้องการที่จะใส่องค์ประกอบที่ดัชนีด้านขวานอกเหนือจากนั้นไม่แน่ใจว่ามีวิธีการทำเช่นนั้นหรือไม่
Bionix1441

@ Bionix1441 แม้ว่ารายการได้รับการเริ่มต้นก็ยังคงเป็นไปได้ที่จะพยายามที่จะตั้งค่าสำหรับดัชนีที่ไม่มีอยู่ ดังนั้นคุณเพียงแค่ต้องแน่ใจว่าดัชนีของคุณถูกต้อง
TotoroTotoro

126

คุณสามารถแทนที่รายการที่ตำแหน่งเฉพาะโดยใช้วิธีการตั้งค่าของ ArrayList ดังนี้

list.set( your_index, your_item );

แต่องค์ประกอบควรมีอยู่ที่ดัชนีที่คุณส่งผ่านเมธอด set () ซึ่งจะทำให้เกิดข้อยกเว้น


1
@ vaxquis โอเคคุณโปรดเขียน java 8 แล้วปล่อย เราอยู่ที่นี่เพื่อใช้ ;) ดังนั้นควรตอบคำถามเสมอดังนั้นโปรดอ่านคำถามก่อน และปัญหาคืออะไรถ้ามันคืนค่าก่อนหน้าถ้าคุณต้องการค่านั้นคุณสามารถใช้ค่าอื่นทิ้งได้ มันกำลังแทนที่ค่าเก่าและนั่นก็คือ
Android Killer

1
@ vaxquis คุณอ่านความคิดเห็นของฉันก่อนหน้านี้หรือไม่ คำตอบที่กล่าวถึงอย่างชัดเจนควรเป็นไปตามคำถามเสมอ บุคคลที่ถามคำถามเขาบอกว่าเขาต้องการแทนที่องค์ประกอบดังนั้นนั่นหมายความว่าเขามีรายการอาร์เรย์ที่มีองค์ประกอบอยู่ในนั้น ชัดเจนแล้วครับ ???
Android Killer

1
@vaxquis สิ่งที่คุณพิจารณาผู้สมัครใหม่จะรู้เรื่องนี้ดังนั้นปัญหาเหล่านี้จึงไม่สมเหตุสมผล ยังฉันได้แก้ไขเพื่อให้คุณมีความสุข :)
Android Killer

2
การเป็นมือใหม่หมายความว่าใครบางคนไม่ทราบวิธีการเขียนโค้ดอย่างถูกต้อง มันผิดเสมอที่จะให้รหัสที่ไม่ถูกต้องและไม่มีข้อแก้ตัวเพราะมันสามารถและมักจะสร้างความสับสนให้กับผู้เริ่มต้น การให้ตัวอย่างโค้ดที่ถูกต้องและเป็นของตัวเองคือ StackOverflow เกี่ยวกับอะไร ขอบคุณสำหรับการปรับปรุงคำตอบของคุณ



7
public void setItem(List<Item> dataEntity, Item item) {
    int itemIndex = dataEntity.indexOf(item);
    if (itemIndex != -1) {
        dataEntity.set(itemIndex, item);
    }
}

1
วิธีนี้จะใช้งานได้หากรายการใหม่มีค่าเท่ากับรายการเก่าในรูปของวิธี equals () ใช่ไหม
spikemanuk

@spikemanuk ขึ้นอยู่กับการใช้งาน 'equals ()' method ใน 'Item' หากความเสมอภาคขึ้นอยู่กับ 'id' ของ 'รายการ' รหัสนี้สามารถใช้แทน 'รายการ: {id = 1, ชื่อ = London} โดย' รายการ: {id = 1, ชื่อ = ปารีส}
Aniruddha Jagtap
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.