Java - ทำไมเราจึงเรียกอาร์เรย์ว่า“ เวกเตอร์”?


20

ฉันกำลังอ่านหนังสือเกี่ยวกับ Java Programming และต้องการยืนยันว่าฉันเข้าใจคำจำกัดความของคำว่า "vector" วิกิพีเดียบอกว่าเวกเตอร์คือ "อาร์เรย์หนึ่งมิติ" แหล่งhttp://en.wikipedia.org/wiki/Vector

การเรียกอาเรย์นั้นง่ายกว่านี้หรือไม่? มีเหตุผลใดบ้างที่เราจำเป็นต้องใช้ภาษาแฟนซีเช่น "เวกเตอร์"? มีความแตกต่างระหว่างอาร์เรย์และเวกเตอร์หรือไม่?


ป้อนคำอธิบายรูปภาพที่นี่

ที่มา: แคร็กสัมภาษณ์การเข้ารหัสรุ่นที่ 4 โดย Gayle McDowell หน้า 47

คำถามที่พบบ่อย
Q - ทำไมคุณไม่โพสต์สิ่งนี้บน english.stackexchange.com?
- เพราะฉันคิดว่ามี แต่วิทยาการคอมพิวเตอร์ที่มุ่งเน้นผู้คนเท่านั้นที่จะได้คำตอบที่ดี


1
เวกเตอร์นั้นไม่เหมือนกับ ArrayLists นั่นก็เพราะการซิงโครไนซ์ในตัว ข้อมูลเพิ่มเติมได้ที่นี่: stackoverflow.com/questions/2986296/…
Jeroen Vannevel

นอกหัวข้อ: คำว่า "vector" ไม่ได้ใช้แค่ใน Java 1.ไลบรารี C ++ มีstd::vector<…>("อาร์เรย์" ขนาดไดนามิก) 2. CLR (. NET runtime) ยังแยกความแตกต่างระหว่าง "อาร์เรย์" และ "เวกเตอร์" ซึ่งกรณีหลังเป็นกรณีพิเศษของอดีตคือมิติเดียวและ zero-based) ความแตกต่างนั้นสำคัญเนื่องจากมีการปรับให้เหมาะสมพิเศษสำหรับเวกเตอร์ 3.ในคณิตศาสตร์บางครั้งn -tuple ของจำนวนจริงก็เรียกว่า "เวกเตอร์"
stakx

1
@JeroenVannevel ฉันคิดว่าคุณสร้างความสับสนระหว่างคลาส Vector และแนวคิดของเวกเตอร์ซึ่งถือได้ว่าเป็นอาร์เรย์ที่มีมิติเดียว
C.Champagne

โอทีถ้าคุณต้องการคำตอบจากวิทยาการคอมพิวเตอร์ทำไมโพสต์ที่นี่ไม่ใช่ cs.stackexchange? และทำไมธง Java? จากสิ่งที่ฉันจำได้จากคลาสการเขียนโปรแกรมของฉันมีอาร์เรย์แล้วมีลิสต์ลิสต์ ยกเว้นอาร์เรย์, คอนเทนเนอร์ (เวกเตอร์, รายการ, แผนที่, ฮีปและอื่น ๆ ) ถูกนำไปใช้เป็นรายการที่ลิงก์
imel96

2
ทำไมเราจึงเรียกอาร์เรย์ว่าเวกเตอร์
m3th0dman

คำตอบ:


35

ในการใช้งานทั่วไป "อาเรย์" อาจหมายถึงอาเรย์แบบมิติเดียวหรืออาเรย์หลายมิติ นอกจากนี้ในวิชาคณิตศาสตร์เมทริกซ์เป็นอาร์เรย์ 2 มิติในขณะที่เวกเตอร์เป็นอาร์เรย์ 1 มิติ


8
หัวข้อนอก: ในคณิตศาสตร์ "สเกลาร์" คืออาร์เรย์ 0 มิติหรือไม่
stakx

6
@stakx: ใช่ถูกต้องแล้ว โดยทั่วไปแล้วเซนต์คิตส์และเนวิสเป็นเพียงสเกลาร์เท่านั้นไม่มีใครจะเรียกมันว่า "อาร์เรย์ 0 มิติ" ได้ แต่ความคิดนั้นถูกต้อง
Greg Hewgill

2
มันแม่นยำกว่าที่จะบอกว่าพวกเขาเป็นเทนเซอร์ จาก Wolfram Mathworld: "เทนเซอร์เป็นลักษณะทั่วไปของสเกลาร์ (ที่ไม่มีดัชนี), เวกเตอร์ (ที่มีดัชนีเดียว), และเมทริกซ์ (ที่มีดัชนีสองดัชนี) ไปเป็นจำนวนดัชนีโดยพลการ" (Rowland, Todd และ Weisstein, Eric W. "Tensor." จาก MathWorld - ทรัพยากรเว็บ Wolfram mathworld.wolfram.com/Tensor.html )
SOFe

สำหรับสิ่งที่มีค่าในทางคณิตศาสตร์เวกเตอร์ไม่ใช่อาร์เรย์ 1 มิติ เวกเตอร์เป็นองค์ประกอบของปริภูมิเวกเตอร์นั่นคือชุดที่องค์ประกอบสามารถเพิ่มและคูณด้วยสเกลาร์ได้
mlainz

เวกเตอร์สเปซที่มีชื่อเสียงที่สุดคือ R ^ n ชุดของ "อาร์เรย์" ของตัวเลขพร้อมการเพิ่มและการคูณองค์ประกอบ ชุดของฟังก์ชั่นที่แท้จริงเป็นพื้นที่เวคเตอร์ แต่โดยทั่วไปแล้วคนมักจะไม่คิดว่าฟังก์ชั่นเป็นอาร์เรย์ อาเรย์ของตัวละครจะไม่ใช่เวกเตอร์สเปซเนื่องจากไม่มีตัวเลือกการเพิ่มและการคูณที่ชัดเจน ในศัพท์แสงคณิตศาสตร์อาร์เรย์เป็น tuple หรือลำดับที่แน่นอน ดูen.wikipedia.org/wiki/Vector_(mathematics_and_physics)สำหรับตัวอย่างเพิ่มเติมของ tuples ที่ไม่ใช่เวกเตอร์
mlainz

10

เวกเตอร์ไม่ใช่อาร์เรย์อย่างแน่นอน ไม่ใช่คนคลาสสิกอย่างไรก็ตาม มันเป็นอาร์เรย์แบบไดนามิก สามารถปรับขนาดได้ตามต้องการแทนที่จะเป็นขนาดคงที่ พวกเขาจึงคล้ายกับ ArrayLists แต่ไม่เหมือนกัน

ArrayLists แตกต่างจากเวกเตอร์เวกเตอร์ในการที่ประสานการดำเนินงานของแต่ละบุคคลซึ่งเป็นสิ่งที่คุณไม่ต้องการเพื่อวัตถุประสงค์ในการทำงานพร้อมกันโดยเฉพาะอย่างยิ่งต่อจอนสกีต ดังนั้น Vector จึงถูกคัดค้านใน ArrayList แต่บางคนก็ยังเรียกมันว่า Vector

ชื่อที่ได้มาจากเดิมระยะทางคณิตศาสตร์สำหรับเมทริกซ์ 1 มิติ นี่คือทั้งๆที่มีโครงสร้างจริงเป็นn-tuple


2
ฉันคิดว่าคุณสร้างความสับสนระหว่างคลาส Vector และแนวคิดของเวกเตอร์ซึ่งถือได้ว่าเป็นอาร์เรย์ที่มีมิติเดียวและ ils มีความเฉพาะเจาะจงกับ Java Java
C.Champagne

@ C.Champagne เขาใช้ตัวอย่าง Java ดังนั้นนั่นคือสิ่งที่ฉันให้เขา ฉันได้เพิ่มคำจำกัดความสำหรับโครงสร้างทางคณิตศาสตร์ซึ่งในทางเทคนิคแล้วไม่ใช่ "เวกเตอร์" อย่างใดอย่างหนึ่ง
วิศวกรโลก

2
ฉันอยู่กับ @ C.Champagne ถ้าพวกเขาหมายถึง Vector (คลาส) ข้อความจะใช้ cap V พวกเขาใช้ตัวพิมพ์เล็ก v ซึ่งบ่งชี้ถึงนิยามคลาสสิก (ไม่ใช่คลาส) ของเวกเตอร์
Rig

อืมพาหะจะเรียกว่าเป็นพาหะในวิชาคณิตศาสตร์ คุณหมายถึงอะไร "ไม่ใช่เทคนิค 'เวกเตอร์' อย่างใดอย่างหนึ่ง?
Andres F.

@AndresF ชุดของตัวเลขเช่นอาร์เรย์หรือ "Vector" จะเป็น n-tuple คือความเข้าใจของฉันเพราะเป็นชุดของค่าที่ไม่ต่อเนื่อง
วิศวกรโลก

4

โดยทั่วไปเวกเตอร์และอาเรย์เป็นสิ่งเดียวกันและใช้แทนกันได้เมื่อโปรแกรม ที่อยู่ในสถานที่ส่วนใหญ่ดังนั้นคุณไม่ควรกังวลมากเกี่ยวกับเวลาส่วนใหญ่

ที่กล่าวว่าภาษานั้นไม่แน่ชัดและบางครั้งเรามีคำที่มีความหมายแตกต่างกันในบริบทที่แตกต่างกันซึ่งท้ายที่สุดมีความหมายเหมือนกันหรือคำเดียวที่มีความหมายต่างกันสองคำขึ้นไป

ใน C อาร์เรย์คือชุดขององค์ประกอบข้อมูลประเภทเดียวกันที่เก็บไว้ในหน่วยความจำต่อเนื่อง Java สืบทอดความหมายนั้น มันไม่เหมือนกับรายการหรือเวกเตอร์เนื่องจากอาร์เรย์มีพื้นฐานมากกว่าสิ่งอื่น

เวกเตอร์เป็นโครงสร้างทางคณิตศาสตร์ที่กำหนดให้เป็นวัตถุที่สามารถเพิ่มไปยังวัตถุที่เป็นประเภทเดียวกันอื่นหรือคูณด้วยจริง (หรือซับซ้อน) จำนวนใด ๆ ที่เกิดในเวกเตอร์ของชนิดเดียวกันอีก นอกจากนี้ยังมีคุณสมบัติอื่น ๆ ที่มีประโยชน์มาก

เวกเตอร์มีมิติ มันคือจำนวนเวกเตอร์ต่าง ๆ ขั้นต่ำที่ต้องรวมเข้าด้วยกันเพื่อให้ได้เวกเตอร์ที่เป็นไปได้ทุกประเภทนั้น ความเร็วและความเร่งเป็นเวกเตอร์ 3 มิติเนื่องจากพื้นที่มี 3 ทิศทางพื้นฐานและโดยการเพิ่มทวีคูณของสามทิศทางเหล่านั้นคุณจะได้ตำแหน่งใดก็ได้ในอวกาศ ตำแหน่งในระนาบเป็นเวกเตอร์ 2 มิติและตัวเลขแต่ละตัวคือเวกเตอร์ 1 มิติ

วิธีหนึ่งในการแสดงเวกเตอร์ของมิติ nคือการใช้อาร์เรย์ขององค์ประกอบ nแต่ละอันแทนจำนวนเวกเตอร์ฐานแต่ละอันที่คุณต้องเพิ่มเพื่อไปยังเวกเตอร์ของคุณ

เนื่องจากคุณสามารถแสดงเวกเตอร์โดยใช้อาราอิลิเมนต์ได้ตามเวลาจึงทำให้ทั้งสองแนวคิดมีความเท่าเทียมกัน ดังนั้นในหลาย ๆ ที่พวกเขาเพียงแค่เป็นสิ่งเดียวกันและในบางภาษาที่เรียกว่าเวกเตอร์

กรณีที่หนึ่งคำมีสองความหมายที่แตกต่างกันก็คือตัวอย่างเช่นมิติ ตัวอย่างนิยามของวิกิพีเดียของเวกเตอร์เป็นอาร์เรย์ 1 มิติเป็นตัวอย่าง คุณไม่ได้พูดถึงมิติเวคเตอร์ที่นี่ คุณกำลังพูดถึงการเป็นตัวแทนคอมพิวเตอร์ของโครงสร้างข้อมูล เวกเตอร์ 3 มิติสามารถแทนได้ด้วยอาร์เรย์ "1 มิติ" ขนาด 3 ตัวเลขในบรรทัด เมทริกซ์ 3x3 สามารถแสดงโดยอาร์เรย์ "2 มิติ" ซึ่งเป็นสิ่งที่โปรแกรมเมอร์เรียกว่าอาร์เรย์ของอาร์เรย์ ทเมทริกซ์ 3x3 ยังเป็นเวกเตอร์ทางคณิตศาสตร์ของมิติ 9 (เนื่องจากมีคุณสมบัติทั้งหมดของเวกเตอร์) และมีตัวเลข 9 ตัว งั้นเหรอ?

อย่างไรก็ตามฉันคิดว่าคำตอบนั้นง่าย: ไม่ต้องกังวล ทุกอย่างขึ้นอยู่กับบริบท คำสองคำที่มีต้นกำเนิดที่แตกต่างกัน แต่ในบริบทของโครงสร้างข้อมูลเมื่อพวกเขากล่าวว่าเวกเตอร์พวกเขาหมายถึงว่าอาร์เรย์


ฉันไม่คิดว่านี่เป็นเรื่องจริง ในเอกสารเกือบทั้งหมดที่ฉันใช้ข้าม Array หมายถึงขนาดคงที่ Vector หมายถึงโครงสร้างสามารถ (แต่ไม่จำเป็นต้องเป็น) ขนาดแบบไดนามิก คำจำกัดความทางคณิตศาสตร์ของคำศัพท์นั้นทำให้เข้าใจผิดอย่างไม่น่าเชื่อในบริบทของการเขียนโปรแกรม
Chuu

-1

คำตอบข้างต้นอธิบายว่าทำไมคลาสนี้แตกต่างจาก "Array" - และฉันสงสัยว่าเหตุผลที่ใช้ชื่อที่แตกต่างคือเพราะโปรแกรมเมอร์ได้รับความช่วยเหลือโดยมีเนมสเปซที่มีการจัดระเบียบอย่างดี - กล่าวอีกนัยหนึ่ง ชัดเจนว่าคุณหมายถึงคลาสใดในขณะที่ถ้าคลาสที่คล้ายกันทั้งหมดเป็นเพียงอาร์เรย์ดังนั้นมันจะไม่ชัดเจน


-1

ฉันคิดว่าคำว่า "vector" มาจาก st ++ ของ c ++ :: vector มันปรากฏตัวต่อหน้า Java และ C #


3
โปรด (อย่างยิ่ง) พิจารณาเพิ่มการอ้างอิงภายนอกเพื่อสำรองความคิดเห็นของคุณ

-1

มันเป็นเพียงแค่การแก้ไขเลอะเทอะ

Java เวอร์ชันก่อนหน้าไม่ได้รวม ArrayList แทนที่จะใช้ ArrayList จะใช้ Vector ArrayList ถูกเพิ่มเข้ามาในภายหลังและตอนนี้ใช้แทน Vector เพื่อวัตถุประสงค์ส่วนใหญ่ ฉันคาดหวังว่าหนังสือเล่มนี้จะถูกเขียนก่อนที่จะเพิ่ม ArrayList และเมื่อข้อความได้รับการปรับปรุงการอ้างอิงถึงเวกเตอร์นี้ไม่ได้

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

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


1
"รุ่นก่อน ... มี" แล้วอะไรjava.util.Vectorล่ะ
Reinstate Monica - M. Schröder

1
เลิกใช้แล้วคืออะไร java.util.Vector คือ :-)
Brian Knoblauch

-1

คำว่า vector มาจากวิศวกรรม / ฟิสิกส์ เวกเตอร์แสดงเส้น 2 และ 3 มิติที่มีทิศทาง ตัวอย่างเช่นสมมุติว่ากระสุนปืนมีความเร็วแนวนอน 20 m / s และความเร็วแนวตั้ง 10 m / s ดังนั้นคุณจะแสดงสิ่งนี้เป็น (20,10) มันบินไปทางขวาในแนวทแยงดังนั้นตอนนี้ดูว่าเวกเตอร์ความเร็วเชิงคณิตศาสตร์กลายเป็นอาร์เรย์เวกเตอร์ได้อย่างไร


-2

เราไม่เรียกอาร์เรย์เวกเตอร์ไม่ว่าคุณจะเข้าใจผิดซอร์สของคุณหรือเข้าใจผิดซอร์ส Java หรือทั้งสองอย่าง
อาร์เรย์เป็นโครงสร้างข้อมูลที่แตกต่างกันมากจาก Vector ซึ่งแตกต่างจากรายการอีกครั้ง (ซึ่งโค้ดที่คุณวางใช้)

แน่นอนว่าเวกเตอร์ทางคณิตศาสตร์ใน Java สามารถนำไปใช้งานโดยใช้หนึ่งในสามกลไกและภายใต้ประทุนทั้งคู่หรือทั้งเวกเตอร์และลิสต์อาจถูกนำมาใช้โดยใช้อาร์เรย์

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.