A few systematic differences between Rust’s collections and those in other languages.
러스트 컬렉션과 다른 언어의 컬렉션 간의 차이
First, moves and borrowing are everywhere. Rust uses moves to avoid deep-copying values.
모든 컬렉션에 이동와 차용이 적용됨! 값을 딥카피하는 것을 막음.
That’s why the method Vec<T>::push(item) takes its argument by value, not by reference.
이것이 Vec<T>::push(item) 메서드가 값을 인수로 받지 레퍼런스를 인수로 받지 않는 이유임
The value is moved into the vector.
값 자체가 벡터로 이동 (이 세부적인 프로세스는 어떻게 될까?)
Second, Rust doesn’t have invalidation errors—the kind of dangling-pointer bug where a collection is resized, or otherwise changed, while the program is holding a pointer to data inside it.
두번째로, 러스트는 무효화오류가 없음 무효화오류는 콜렉션이 리사이즈 됐을 때나 바뀌었을때 프로그래밍이 그 안에있는 데이터에 포인터를 잡고있으면 발생하는 오류임.
Finally, Rust does not have null, so we’ll see Options in places where other languages would use null.
러스트는 널값이 없음. → null이 쓰이는 모든 곳에는 Options가 있음.
Vec<T>
VecDeque<T>
BinaryHeap<T>
HashMap<K, V>
BTreeMap<K, V>
HashMap<K, V>
, but it keeps the entries sorted by key.
BTreeMap<String, i32>
stores its entries in String comparison order. Unless you need the entries to stay sorted, a HashMap is faster.
HashSet<T>