[{"data":1,"prerenderedAt":3081},["ShallowReactive",2],{"page-\u002Frust\u002F14-collections":3},{"id":4,"title":5,"body":6,"description":43,"extension":3074,"meta":3075,"navigation":3076,"path":3077,"seo":3078,"stem":3079,"__hash__":3080},"content\u002Frust\u002F14-collections.md","14 — Collections (Vec, String, HashMap, and more)",{"type":7,"value":8,"toc":3034},"minimark",[9,26,34,193,198,207,229,300,304,385,389,503,507,677,681,730,734,869,873,965,971,1158,1162,1171,1261,1270,1333,1337,1519,1523,1629,1633,1767,1770,1847,1856,2103,2123,2129,2132,2194,2198,2240,2254,2257,2312,2321,2526,2533,2634,2637,2644,2660,2667,2761,2771,2847,2851,2912,2916,3007,3011,3027,3030],[10,11,13,14,18,19,18,22,25],"h1",{"id":12},"_14-collections-vec-string-hashmap-and-more","14 — Collections (",[15,16,17],"code",{},"Vec",", ",[15,20,21],{},"String",[15,23,24],{},"HashMap",", and more)",[27,28,30,33],"h2",{"id":29},"vect-the-growable-array",[15,31,32],{},"Vec\u003CT>"," — The Growable Array",[35,36,38],"code-wrapper",{"language":37},"rust",[39,40,44],"pre",{"className":41,"code":42,"language":37,"meta":43,"style":43},"language-rust shiki shiki-themes github-light github-dark","let mut v: Vec\u003Ci32> = Vec::new();\nv.push(1);\nv.push(2);\nlet v2 = vec![1, 2, 3];          \u002F\u002F macro shortcut\nlet v3 = vec![0; 5];              \u002F\u002F [0, 0, 0, 0, 0]\n","",[15,45,46,92,114,130,164],{"__ignoreMap":43},[47,48,51,55,58,62,65,69,72,75,78,81,83,86,89],"span",{"class":49,"line":50},"line",1,[47,52,54],{"class":53},"svdQ7","let",[47,56,57],{"class":53}," mut",[47,59,61],{"class":60},"ssxIu"," v",[47,63,64],{"class":53},":",[47,66,68],{"class":67},"sIsaT"," Vec",[47,70,71],{"class":60},"\u003C",[47,73,74],{"class":67},"i32",[47,76,77],{"class":60},"> ",[47,79,80],{"class":53},"=",[47,82,68],{"class":67},[47,84,85],{"class":53},"::",[47,87,88],{"class":67},"new",[47,90,91],{"class":60},"();\n",[47,93,95,98,101,104,107,111],{"class":49,"line":94},2,[47,96,97],{"class":60},"v",[47,99,100],{"class":53},".",[47,102,103],{"class":67},"push",[47,105,106],{"class":60},"(",[47,108,110],{"class":109},"snvgF","1",[47,112,113],{"class":60},");\n",[47,115,117,119,121,123,125,128],{"class":49,"line":116},3,[47,118,97],{"class":60},[47,120,100],{"class":53},[47,122,103],{"class":67},[47,124,106],{"class":60},[47,126,127],{"class":109},"2",[47,129,113],{"class":60},[47,131,133,135,138,140,143,146,148,150,152,154,157,160],{"class":49,"line":132},4,[47,134,54],{"class":53},[47,136,137],{"class":60}," v2 ",[47,139,80],{"class":53},[47,141,142],{"class":67}," vec!",[47,144,145],{"class":60},"[",[47,147,110],{"class":109},[47,149,18],{"class":60},[47,151,127],{"class":109},[47,153,18],{"class":60},[47,155,156],{"class":109},"3",[47,158,159],{"class":60},"];          ",[47,161,163],{"class":162},"sdCPZ","\u002F\u002F macro shortcut\n",[47,165,167,169,172,174,176,178,181,184,187,190],{"class":49,"line":166},5,[47,168,54],{"class":53},[47,170,171],{"class":60}," v3 ",[47,173,80],{"class":53},[47,175,142],{"class":67},[47,177,145],{"class":60},[47,179,180],{"class":109},"0",[47,182,183],{"class":60},"; ",[47,185,186],{"class":109},"5",[47,188,189],{"class":60},"];              ",[47,191,192],{"class":162},"\u002F\u002F [0, 0, 0, 0, 0]\n",[194,195,197],"h3",{"id":196},"memory-model","Memory Model",[199,200,201,203,204,64],"p",{},[15,202,17],{}," is ",[15,205,206],{},"(ptr, len, capacity)",[208,209,210,217,223],"ul",{},[211,212,213,216],"li",{},[15,214,215],{},"ptr"," → heap allocation",[211,218,219,222],{},[15,220,221],{},"len"," → number of elements currently stored",[211,224,225,228],{},[15,226,227],{},"capacity"," → allocated space; pushing beyond doubles capacity (amortized O(1))",[35,230,231],{"language":37},[39,232,234],{"className":41,"code":233,"language":37,"meta":43,"style":43},"let mut v = Vec::with_capacity(100);   \u002F\u002F pre-allocate for perf\nv.push(1);\nprintln!(\"{:?}\", v.capacity());\n",[15,235,236,265,279],{"__ignoreMap":43},[47,237,238,240,242,245,247,249,251,254,256,259,262],{"class":49,"line":50},[47,239,54],{"class":53},[47,241,57],{"class":53},[47,243,244],{"class":60}," v ",[47,246,80],{"class":53},[47,248,68],{"class":67},[47,250,85],{"class":53},[47,252,253],{"class":67},"with_capacity",[47,255,106],{"class":60},[47,257,258],{"class":109},"100",[47,260,261],{"class":60},");   ",[47,263,264],{"class":162},"\u002F\u002F pre-allocate for perf\n",[47,266,267,269,271,273,275,277],{"class":49,"line":94},[47,268,97],{"class":60},[47,270,100],{"class":53},[47,272,103],{"class":67},[47,274,106],{"class":60},[47,276,110],{"class":109},[47,278,113],{"class":60},[47,280,281,284,286,290,293,295,297],{"class":49,"line":116},[47,282,283],{"class":67},"println!",[47,285,106],{"class":60},[47,287,289],{"class":288},"sJ6F3","\"{:?}\"",[47,291,292],{"class":60},", v",[47,294,100],{"class":53},[47,296,227],{"class":67},[47,298,299],{"class":60},"());\n",[194,301,303],{"id":302},"indexing-slicing","Indexing & Slicing",[35,305,306],{"language":37},[39,307,309],{"className":41,"code":308,"language":37,"meta":43,"style":43},"v[0];            \u002F\u002F panics on OOB\nv.get(0);        \u002F\u002F Option\u003C&T> — safe\n&v[1..3];        \u002F\u002F slice, panics on OOB\nv.get(1..3);     \u002F\u002F Option\u003C&[T]>\n",[15,310,311,324,343,363],{"__ignoreMap":43},[47,312,313,316,318,321],{"class":49,"line":50},[47,314,315],{"class":60},"v[",[47,317,180],{"class":109},[47,319,320],{"class":60},"];            ",[47,322,323],{"class":162},"\u002F\u002F panics on OOB\n",[47,325,326,328,330,333,335,337,340],{"class":49,"line":94},[47,327,97],{"class":60},[47,329,100],{"class":53},[47,331,332],{"class":67},"get",[47,334,106],{"class":60},[47,336,180],{"class":109},[47,338,339],{"class":60},");        ",[47,341,342],{"class":162},"\u002F\u002F Option\u003C&T> — safe\n",[47,344,345,348,350,352,355,357,360],{"class":49,"line":116},[47,346,347],{"class":53},"&",[47,349,315],{"class":60},[47,351,110],{"class":109},[47,353,354],{"class":53},"..",[47,356,156],{"class":109},[47,358,359],{"class":60},"];        ",[47,361,362],{"class":162},"\u002F\u002F slice, panics on OOB\n",[47,364,365,367,369,371,373,375,377,379,382],{"class":49,"line":132},[47,366,97],{"class":60},[47,368,100],{"class":53},[47,370,332],{"class":67},[47,372,106],{"class":60},[47,374,110],{"class":109},[47,376,354],{"class":53},[47,378,156],{"class":109},[47,380,381],{"class":60},");     ",[47,383,384],{"class":162},"\u002F\u002F Option\u003C&[T]>\n",[194,386,388],{"id":387},"iteration","Iteration",[35,390,391],{"language":37},[39,392,394],{"className":41,"code":393,"language":37,"meta":43,"style":43},"for x in &v { \u002F* x: &i32 *\u002F }\nfor x in &mut v { \u002F* x: &mut i32 *\u002F }\nfor x in v { \u002F* consumes v, x: i32 *\u002F }   \u002F\u002F ownership move\nv.iter();        \u002F\u002F iterator over &T\nv.iter_mut();    \u002F\u002F over &mut T\nv.into_iter();   \u002F\u002F consumes v, yields T (or &T for &Vec)\n",[15,395,396,419,438,457,472,487],{"__ignoreMap":43},[47,397,398,401,404,407,410,413,416],{"class":49,"line":50},[47,399,400],{"class":53},"for",[47,402,403],{"class":60}," x ",[47,405,406],{"class":53},"in",[47,408,409],{"class":53}," &",[47,411,412],{"class":60},"v { ",[47,414,415],{"class":162},"\u002F* x: &i32 *\u002F",[47,417,418],{"class":60}," }\n",[47,420,421,423,425,427,430,433,436],{"class":49,"line":94},[47,422,400],{"class":53},[47,424,403],{"class":60},[47,426,406],{"class":53},[47,428,429],{"class":53}," &mut",[47,431,432],{"class":60}," v { ",[47,434,435],{"class":162},"\u002F* x: &mut i32 *\u002F",[47,437,418],{"class":60},[47,439,440,442,444,446,448,451,454],{"class":49,"line":116},[47,441,400],{"class":53},[47,443,403],{"class":60},[47,445,406],{"class":53},[47,447,432],{"class":60},[47,449,450],{"class":162},"\u002F* consumes v, x: i32 *\u002F",[47,452,453],{"class":60}," }   ",[47,455,456],{"class":162},"\u002F\u002F ownership move\n",[47,458,459,461,463,466,469],{"class":49,"line":132},[47,460,97],{"class":60},[47,462,100],{"class":53},[47,464,465],{"class":67},"iter",[47,467,468],{"class":60},"();        ",[47,470,471],{"class":162},"\u002F\u002F iterator over &T\n",[47,473,474,476,478,481,484],{"class":49,"line":166},[47,475,97],{"class":60},[47,477,100],{"class":53},[47,479,480],{"class":67},"iter_mut",[47,482,483],{"class":60},"();    ",[47,485,486],{"class":162},"\u002F\u002F over &mut T\n",[47,488,490,492,494,497,500],{"class":49,"line":489},6,[47,491,97],{"class":60},[47,493,100],{"class":53},[47,495,496],{"class":67},"into_iter",[47,498,499],{"class":60},"();   ",[47,501,502],{"class":162},"\u002F\u002F consumes v, yields T (or &T for &Vec)\n",[194,504,506],{"id":505},"insert-remove-swap","Insert \u002F Remove \u002F Swap",[35,508,509],{"language":37},[39,510,512],{"className":41,"code":511,"language":37,"meta":43,"style":43},"v.insert(0, 99);   \u002F\u002F O(n) — shifts\nv.remove(0);       \u002F\u002F O(n)\nv.swap_remove(0);  \u002F\u002F O(1) — reorders\nv.pop();           \u002F\u002F Option\u003CT>\nv.clear();\nv.truncate(2);\nv.retain(|x| *x > 0);   \u002F\u002F filter in place\nv.drain(1..3);          \u002F\u002F removes range, returns iterator\n",[15,513,514,537,556,575,590,601,616,653],{"__ignoreMap":43},[47,515,516,518,520,523,525,527,529,532,534],{"class":49,"line":50},[47,517,97],{"class":60},[47,519,100],{"class":53},[47,521,522],{"class":67},"insert",[47,524,106],{"class":60},[47,526,180],{"class":109},[47,528,18],{"class":60},[47,530,531],{"class":109},"99",[47,533,261],{"class":60},[47,535,536],{"class":162},"\u002F\u002F O(n) — shifts\n",[47,538,539,541,543,546,548,550,553],{"class":49,"line":94},[47,540,97],{"class":60},[47,542,100],{"class":53},[47,544,545],{"class":67},"remove",[47,547,106],{"class":60},[47,549,180],{"class":109},[47,551,552],{"class":60},");       ",[47,554,555],{"class":162},"\u002F\u002F O(n)\n",[47,557,558,560,562,565,567,569,572],{"class":49,"line":116},[47,559,97],{"class":60},[47,561,100],{"class":53},[47,563,564],{"class":67},"swap_remove",[47,566,106],{"class":60},[47,568,180],{"class":109},[47,570,571],{"class":60},");  ",[47,573,574],{"class":162},"\u002F\u002F O(1) — reorders\n",[47,576,577,579,581,584,587],{"class":49,"line":132},[47,578,97],{"class":60},[47,580,100],{"class":53},[47,582,583],{"class":67},"pop",[47,585,586],{"class":60},"();           ",[47,588,589],{"class":162},"\u002F\u002F Option\u003CT>\n",[47,591,592,594,596,599],{"class":49,"line":166},[47,593,97],{"class":60},[47,595,100],{"class":53},[47,597,598],{"class":67},"clear",[47,600,91],{"class":60},[47,602,603,605,607,610,612,614],{"class":49,"line":489},[47,604,97],{"class":60},[47,606,100],{"class":53},[47,608,609],{"class":67},"truncate",[47,611,106],{"class":60},[47,613,127],{"class":109},[47,615,113],{"class":60},[47,617,619,621,623,626,628,631,634,636,639,642,645,648,650],{"class":49,"line":618},7,[47,620,97],{"class":60},[47,622,100],{"class":53},[47,624,625],{"class":67},"retain",[47,627,106],{"class":60},[47,629,630],{"class":53},"|",[47,632,633],{"class":60},"x",[47,635,630],{"class":53},[47,637,638],{"class":53}," *",[47,640,641],{"class":60},"x ",[47,643,644],{"class":53},">",[47,646,647],{"class":109}," 0",[47,649,261],{"class":60},[47,651,652],{"class":162},"\u002F\u002F filter in place\n",[47,654,656,658,660,663,665,667,669,671,674],{"class":49,"line":655},8,[47,657,97],{"class":60},[47,659,100],{"class":53},[47,661,662],{"class":67},"drain",[47,664,106],{"class":60},[47,666,110],{"class":109},[47,668,354],{"class":53},[47,670,156],{"class":109},[47,672,673],{"class":60},");          ",[47,675,676],{"class":162},"\u002F\u002F removes range, returns iterator\n",[194,678,680],{"id":679},"capacity-management","Capacity Management",[35,682,683],{"language":37},[39,684,686],{"className":41,"code":685,"language":37,"meta":43,"style":43},"v.shrink_to_fit();\nv.reserve(10);\nv.reserve_exact(10);\n",[15,687,688,699,715],{"__ignoreMap":43},[47,689,690,692,694,697],{"class":49,"line":50},[47,691,97],{"class":60},[47,693,100],{"class":53},[47,695,696],{"class":67},"shrink_to_fit",[47,698,91],{"class":60},[47,700,701,703,705,708,710,713],{"class":49,"line":94},[47,702,97],{"class":60},[47,704,100],{"class":53},[47,706,707],{"class":67},"reserve",[47,709,106],{"class":60},[47,711,712],{"class":109},"10",[47,714,113],{"class":60},[47,716,717,719,721,724,726,728],{"class":49,"line":116},[47,718,97],{"class":60},[47,720,100],{"class":53},[47,722,723],{"class":67},"reserve_exact",[47,725,106],{"class":60},[47,727,712],{"class":109},[47,729,113],{"class":60},[194,731,733],{"id":732},"sorting-searching","Sorting & Searching",[35,735,736],{"language":37},[39,737,739],{"className":41,"code":738,"language":37,"meta":43,"style":43},"v.sort();\nv.sort_by(|a, b| b.cmp(a));\nv.sort_by_key(|x| x.abs());\nv.sort_unstable_by_key(|x| *x);    \u002F\u002F faster, non-stable\nv.dedup();                        \u002F\u002F remove consecutive duplicates (after sort)\nv.binary_search(&5);              \u002F\u002F Option\u003Cusize> on sorted vec\n",[15,740,741,752,781,808,833,848],{"__ignoreMap":43},[47,742,743,745,747,750],{"class":49,"line":50},[47,744,97],{"class":60},[47,746,100],{"class":53},[47,748,749],{"class":67},"sort",[47,751,91],{"class":60},[47,753,754,756,758,761,763,765,768,770,773,775,778],{"class":49,"line":94},[47,755,97],{"class":60},[47,757,100],{"class":53},[47,759,760],{"class":67},"sort_by",[47,762,106],{"class":60},[47,764,630],{"class":53},[47,766,767],{"class":60},"a, b",[47,769,630],{"class":53},[47,771,772],{"class":60}," b",[47,774,100],{"class":53},[47,776,777],{"class":67},"cmp",[47,779,780],{"class":60},"(a));\n",[47,782,783,785,787,790,792,794,796,798,801,803,806],{"class":49,"line":116},[47,784,97],{"class":60},[47,786,100],{"class":53},[47,788,789],{"class":67},"sort_by_key",[47,791,106],{"class":60},[47,793,630],{"class":53},[47,795,633],{"class":60},[47,797,630],{"class":53},[47,799,800],{"class":60}," x",[47,802,100],{"class":53},[47,804,805],{"class":67},"abs",[47,807,299],{"class":60},[47,809,810,812,814,817,819,821,823,825,827,830],{"class":49,"line":132},[47,811,97],{"class":60},[47,813,100],{"class":53},[47,815,816],{"class":67},"sort_unstable_by_key",[47,818,106],{"class":60},[47,820,630],{"class":53},[47,822,633],{"class":60},[47,824,630],{"class":53},[47,826,638],{"class":53},[47,828,829],{"class":60},"x);    ",[47,831,832],{"class":162},"\u002F\u002F faster, non-stable\n",[47,834,835,837,839,842,845],{"class":49,"line":166},[47,836,97],{"class":60},[47,838,100],{"class":53},[47,840,841],{"class":67},"dedup",[47,843,844],{"class":60},"();                        ",[47,846,847],{"class":162},"\u002F\u002F remove consecutive duplicates (after sort)\n",[47,849,850,852,854,857,859,861,863,866],{"class":49,"line":489},[47,851,97],{"class":60},[47,853,100],{"class":53},[47,855,856],{"class":67},"binary_search",[47,858,106],{"class":60},[47,860,347],{"class":53},[47,862,186],{"class":109},[47,864,865],{"class":60},");              ",[47,867,868],{"class":162},"\u002F\u002F Option\u003Cusize> on sorted vec\n",[194,870,872],{"id":871},"edge-cases","Edge Cases",[208,874,875,887,895,908,916,930,946,957],{},[211,876,877,883,884,100],{},[878,879,880],"strong",{},[15,881,882],{},"v.push(v[0])",": borrow error (mutable borrow while reading). Copy first: ",[15,885,886],{},"let x = v[0]; v.push(x);",[211,888,889,894],{},[878,890,891],{},[15,892,893],{},"Vec::with_capacity(0)",": valid; first push triggers alloc.",[211,896,897,903,904,907],{},[878,898,899,900,902],{},"Empty ",[15,901,17],{}," is non-null",": ",[15,905,906],{},"Vec::new()"," doesn't allocate; capacity 0.",[211,909,910,915],{},[878,911,912],{},[15,913,914],{},"Vec\u003COption\u003CT>>",": not niche-optimized; uses full space.",[211,917,918,921,922,925,926,929],{},[878,919,920],{},"ZST elements",": a ",[15,923,924],{},"Vec\u003C()>"," has ",[15,927,928],{},"capacity = usize::MAX","; never actually allocates.",[211,931,932,938,939,942,943,100],{},[878,933,934,937],{},[15,935,936],{},"vec![]"," macro"," is hygienic — supports any ",[15,940,941],{},"T: Clone"," for ",[15,944,945],{},"vec![v; n]",[211,947,948,953,954,100],{},[878,949,950],{},[15,951,952],{},"Vec::leak",": leak into ",[15,955,956],{},"&'static mut [T]",[211,958,959,964],{},[878,960,961],{},[15,962,963],{},"Vec::spare_capacity_mut"," for unsafe manual writes.",[27,966,968,970],{"id":967},"string-owned-utf-8-string",[15,969,21],{}," — Owned UTF-8 String",[35,972,973],{"language":37},[39,974,976],{"className":41,"code":975,"language":37,"meta":43,"style":43},"let s = String::new();\nlet s = String::from(\"hi\");\nlet s: String = \"hi\".to_string();\nlet s: String = \"hi\".to_owned();\ns.push_str(\" world\");\ns.push('!');\ns.replace(\"hi\", \"bye\");\ns.to_lowercase();\ns.split(' ').collect::\u003CVec\u003C_>>();\n",[15,977,978,996,1018,1042,1063,1080,1095,1115,1126],{"__ignoreMap":43},[47,979,980,982,985,987,990,992,994],{"class":49,"line":50},[47,981,54],{"class":53},[47,983,984],{"class":60}," s ",[47,986,80],{"class":53},[47,988,989],{"class":67}," String",[47,991,85],{"class":53},[47,993,88],{"class":67},[47,995,91],{"class":60},[47,997,998,1000,1002,1004,1006,1008,1011,1013,1016],{"class":49,"line":94},[47,999,54],{"class":53},[47,1001,984],{"class":60},[47,1003,80],{"class":53},[47,1005,989],{"class":67},[47,1007,85],{"class":53},[47,1009,1010],{"class":67},"from",[47,1012,106],{"class":60},[47,1014,1015],{"class":288},"\"hi\"",[47,1017,113],{"class":60},[47,1019,1020,1022,1025,1027,1029,1032,1035,1037,1040],{"class":49,"line":116},[47,1021,54],{"class":53},[47,1023,1024],{"class":60}," s",[47,1026,64],{"class":53},[47,1028,989],{"class":67},[47,1030,1031],{"class":53}," =",[47,1033,1034],{"class":288}," \"hi\"",[47,1036,100],{"class":53},[47,1038,1039],{"class":67},"to_string",[47,1041,91],{"class":60},[47,1043,1044,1046,1048,1050,1052,1054,1056,1058,1061],{"class":49,"line":132},[47,1045,54],{"class":53},[47,1047,1024],{"class":60},[47,1049,64],{"class":53},[47,1051,989],{"class":67},[47,1053,1031],{"class":53},[47,1055,1034],{"class":288},[47,1057,100],{"class":53},[47,1059,1060],{"class":67},"to_owned",[47,1062,91],{"class":60},[47,1064,1065,1068,1070,1073,1075,1078],{"class":49,"line":166},[47,1066,1067],{"class":60},"s",[47,1069,100],{"class":53},[47,1071,1072],{"class":67},"push_str",[47,1074,106],{"class":60},[47,1076,1077],{"class":288},"\" world\"",[47,1079,113],{"class":60},[47,1081,1082,1084,1086,1088,1090,1093],{"class":49,"line":489},[47,1083,1067],{"class":60},[47,1085,100],{"class":53},[47,1087,103],{"class":67},[47,1089,106],{"class":60},[47,1091,1092],{"class":288},"'!'",[47,1094,113],{"class":60},[47,1096,1097,1099,1101,1104,1106,1108,1110,1113],{"class":49,"line":618},[47,1098,1067],{"class":60},[47,1100,100],{"class":53},[47,1102,1103],{"class":67},"replace",[47,1105,106],{"class":60},[47,1107,1015],{"class":288},[47,1109,18],{"class":60},[47,1111,1112],{"class":288},"\"bye\"",[47,1114,113],{"class":60},[47,1116,1117,1119,1121,1124],{"class":49,"line":655},[47,1118,1067],{"class":60},[47,1120,100],{"class":53},[47,1122,1123],{"class":67},"to_lowercase",[47,1125,91],{"class":60},[47,1127,1129,1131,1133,1136,1138,1141,1144,1146,1149,1151,1153,1155],{"class":49,"line":1128},9,[47,1130,1067],{"class":60},[47,1132,100],{"class":53},[47,1134,1135],{"class":67},"split",[47,1137,106],{"class":60},[47,1139,1140],{"class":288},"' '",[47,1142,1143],{"class":60},")",[47,1145,100],{"class":53},[47,1147,1148],{"class":67},"collect",[47,1150,85],{"class":53},[47,1152,71],{"class":60},[47,1154,17],{"class":67},[47,1156,1157],{"class":60},"\u003C_>>();\n",[194,1159,1161],{"id":1160},"utf-8-invariant","UTF-8 Invariant",[199,1163,1164,1166,1167,1170],{},[15,1165,21],{}," is a ",[15,1168,1169],{},"Vec\u003Cu8>"," with the invariant that bytes are valid UTF-8. You can't push arbitrary bytes:",[35,1172,1173],{"language":37},[39,1174,1176],{"className":41,"code":1175,"language":37,"meta":43,"style":43},"let bytes = vec![0xffu8];\n\u002F\u002F String::from_utf8(bytes).unwrap();  \u002F\u002F ERROR: invalid UTF-8\nString::from_utf8(bytes).unwrap_err(); \u002F\u002F ok\nString::from_utf8_lossy(&[0xffu8, b'h']);  \u002F\u002F \"�h\"\n",[15,1177,1178,1200,1208,1231],{"__ignoreMap":43},[47,1179,1180,1182,1185,1187,1189,1191,1194,1197],{"class":49,"line":50},[47,1181,54],{"class":53},[47,1183,1184],{"class":60}," bytes ",[47,1186,80],{"class":53},[47,1188,142],{"class":67},[47,1190,145],{"class":60},[47,1192,1193],{"class":109},"0xff",[47,1195,1196],{"class":67},"u8",[47,1198,1199],{"class":60},"];\n",[47,1201,1202,1205],{"class":49,"line":94},[47,1203,1204],{"class":162},"\u002F\u002F String::from_utf8(bytes).unwrap();",[47,1206,1207],{"class":162},"  \u002F\u002F ERROR: invalid UTF-8\n",[47,1209,1210,1212,1214,1217,1220,1222,1225,1228],{"class":49,"line":116},[47,1211,21],{"class":67},[47,1213,85],{"class":53},[47,1215,1216],{"class":67},"from_utf8",[47,1218,1219],{"class":60},"(bytes)",[47,1221,100],{"class":53},[47,1223,1224],{"class":67},"unwrap_err",[47,1226,1227],{"class":60},"(); ",[47,1229,1230],{"class":162},"\u002F\u002F ok\n",[47,1232,1233,1235,1237,1240,1242,1244,1246,1248,1250,1252,1255,1258],{"class":49,"line":132},[47,1234,21],{"class":67},[47,1236,85],{"class":53},[47,1238,1239],{"class":67},"from_utf8_lossy",[47,1241,106],{"class":60},[47,1243,347],{"class":53},[47,1245,145],{"class":60},[47,1247,1193],{"class":109},[47,1249,1196],{"class":67},[47,1251,18],{"class":60},[47,1253,1254],{"class":288},"b'h'",[47,1256,1257],{"class":60},"]);  ",[47,1259,1260],{"class":162},"\u002F\u002F \"�h\"\n",[194,1262,1264,1266,1267],{"id":1263},"string-vs-str",[15,1265,21],{}," vs ",[15,1268,1269],{},"&str",[1271,1272,1273,1288],"table",{},[1274,1275,1276],"thead",{},[1277,1278,1279,1284],"tr",{},[1280,1281,1282],"th",{},[15,1283,21],{},[1280,1285,1286],{},[15,1287,1269],{},[1289,1290,1291,1300,1308,1319],"tbody",{},[1277,1292,1293,1297],{},[1294,1295,1296],"td",{},"Owned, growable",[1294,1298,1299],{},"Borrowed view",[1277,1301,1302,1305],{},[1294,1303,1304],{},"Heap",[1294,1306,1307],{},"Heap\u002Fstack\u002Fstatic",[1277,1309,1310,1316],{},[1294,1311,1312,1315],{},[15,1313,1314],{},"mut"," to grow",[1294,1317,1318],{},"Read-only",[1277,1320,1321,1327],{},[1294,1322,1323,1324,1326],{},"Can convert to ",[15,1325,1269],{}," freely",[1294,1328,1329,1330,1332],{},"Can be obtained from ",[15,1331,21],{}," cheaply",[194,1334,1336],{"id":1335},"common-conversions","Common Conversions",[35,1338,1339],{"language":37},[39,1340,1342],{"className":41,"code":1341,"language":37,"meta":43,"style":43},"let s: String = String::from(\"hi\");\nlet r: &str = &s;\nlet r: &str = s.as_str();\nlet owned: String = r.to_string();\nlet bytes: Vec\u003Cu8> = s.into_bytes();\nlet s: String = String::from_utf8(bytes).unwrap();\nlet s: String = unsafe { String::from_utf8_unchecked(bytes) };   \u002F\u002F fast, dangerous\n",[15,1343,1344,1368,1389,1412,1433,1461,1488],{"__ignoreMap":43},[47,1345,1346,1348,1350,1352,1354,1356,1358,1360,1362,1364,1366],{"class":49,"line":50},[47,1347,54],{"class":53},[47,1349,1024],{"class":60},[47,1351,64],{"class":53},[47,1353,989],{"class":67},[47,1355,1031],{"class":53},[47,1357,989],{"class":67},[47,1359,85],{"class":53},[47,1361,1010],{"class":67},[47,1363,106],{"class":60},[47,1365,1015],{"class":288},[47,1367,113],{"class":60},[47,1369,1370,1372,1375,1377,1379,1382,1384,1386],{"class":49,"line":94},[47,1371,54],{"class":53},[47,1373,1374],{"class":60}," r",[47,1376,64],{"class":53},[47,1378,409],{"class":53},[47,1380,1381],{"class":67},"str",[47,1383,1031],{"class":53},[47,1385,409],{"class":53},[47,1387,1388],{"class":60},"s;\n",[47,1390,1391,1393,1395,1397,1399,1401,1403,1405,1407,1410],{"class":49,"line":116},[47,1392,54],{"class":53},[47,1394,1374],{"class":60},[47,1396,64],{"class":53},[47,1398,409],{"class":53},[47,1400,1381],{"class":67},[47,1402,1031],{"class":53},[47,1404,1024],{"class":60},[47,1406,100],{"class":53},[47,1408,1409],{"class":67},"as_str",[47,1411,91],{"class":60},[47,1413,1414,1416,1419,1421,1423,1425,1427,1429,1431],{"class":49,"line":132},[47,1415,54],{"class":53},[47,1417,1418],{"class":60}," owned",[47,1420,64],{"class":53},[47,1422,989],{"class":67},[47,1424,1031],{"class":53},[47,1426,1374],{"class":60},[47,1428,100],{"class":53},[47,1430,1039],{"class":67},[47,1432,91],{"class":60},[47,1434,1435,1437,1440,1442,1444,1446,1448,1450,1452,1454,1456,1459],{"class":49,"line":166},[47,1436,54],{"class":53},[47,1438,1439],{"class":60}," bytes",[47,1441,64],{"class":53},[47,1443,68],{"class":67},[47,1445,71],{"class":60},[47,1447,1196],{"class":67},[47,1449,77],{"class":60},[47,1451,80],{"class":53},[47,1453,1024],{"class":60},[47,1455,100],{"class":53},[47,1457,1458],{"class":67},"into_bytes",[47,1460,91],{"class":60},[47,1462,1463,1465,1467,1469,1471,1473,1475,1477,1479,1481,1483,1486],{"class":49,"line":489},[47,1464,54],{"class":53},[47,1466,1024],{"class":60},[47,1468,64],{"class":53},[47,1470,989],{"class":67},[47,1472,1031],{"class":53},[47,1474,989],{"class":67},[47,1476,85],{"class":53},[47,1478,1216],{"class":67},[47,1480,1219],{"class":60},[47,1482,100],{"class":53},[47,1484,1485],{"class":67},"unwrap",[47,1487,91],{"class":60},[47,1489,1490,1492,1494,1496,1498,1500,1503,1506,1508,1510,1513,1516],{"class":49,"line":618},[47,1491,54],{"class":53},[47,1493,1024],{"class":60},[47,1495,64],{"class":53},[47,1497,989],{"class":67},[47,1499,1031],{"class":53},[47,1501,1502],{"class":53}," unsafe",[47,1504,1505],{"class":60}," { ",[47,1507,21],{"class":67},[47,1509,85],{"class":53},[47,1511,1512],{"class":67},"from_utf8_unchecked",[47,1514,1515],{"class":60},"(bytes) };   ",[47,1517,1518],{"class":162},"\u002F\u002F fast, dangerous\n",[194,1520,1522],{"id":1521},"byte-oriented-operations","Byte-Oriented Operations",[35,1524,1525],{"language":37},[39,1526,1528],{"className":41,"code":1527,"language":37,"meta":43,"style":43},"let s = \"hello\";\nfor b in s.bytes() { \u002F* u8 *\u002F }\nfor c in s.chars() { \u002F* char *\u002F }\nfor (i, c) in s.char_indices() { \u002F* (byte_offset, char) *\u002F }\ns.as_bytes();      \u002F\u002F &[u8]\n",[15,1529,1530,1544,1568,1591,1614],{"__ignoreMap":43},[47,1531,1532,1534,1536,1538,1541],{"class":49,"line":50},[47,1533,54],{"class":53},[47,1535,984],{"class":60},[47,1537,80],{"class":53},[47,1539,1540],{"class":288}," \"hello\"",[47,1542,1543],{"class":60},";\n",[47,1545,1546,1548,1551,1553,1555,1557,1560,1563,1566],{"class":49,"line":94},[47,1547,400],{"class":53},[47,1549,1550],{"class":60}," b ",[47,1552,406],{"class":53},[47,1554,1024],{"class":60},[47,1556,100],{"class":53},[47,1558,1559],{"class":67},"bytes",[47,1561,1562],{"class":60},"() { ",[47,1564,1565],{"class":162},"\u002F* u8 *\u002F",[47,1567,418],{"class":60},[47,1569,1570,1572,1575,1577,1579,1581,1584,1586,1589],{"class":49,"line":116},[47,1571,400],{"class":53},[47,1573,1574],{"class":60}," c ",[47,1576,406],{"class":53},[47,1578,1024],{"class":60},[47,1580,100],{"class":53},[47,1582,1583],{"class":67},"chars",[47,1585,1562],{"class":60},[47,1587,1588],{"class":162},"\u002F* char *\u002F",[47,1590,418],{"class":60},[47,1592,1593,1595,1598,1600,1602,1604,1607,1609,1612],{"class":49,"line":132},[47,1594,400],{"class":53},[47,1596,1597],{"class":60}," (i, c) ",[47,1599,406],{"class":53},[47,1601,1024],{"class":60},[47,1603,100],{"class":53},[47,1605,1606],{"class":67},"char_indices",[47,1608,1562],{"class":60},[47,1610,1611],{"class":162},"\u002F* (byte_offset, char) *\u002F",[47,1613,418],{"class":60},[47,1615,1616,1618,1620,1623,1626],{"class":49,"line":166},[47,1617,1067],{"class":60},[47,1619,100],{"class":53},[47,1621,1622],{"class":67},"as_bytes",[47,1624,1625],{"class":60},"();      ",[47,1627,1628],{"class":162},"\u002F\u002F &[u8]\n",[194,1630,1632],{"id":1631},"concatenation","Concatenation",[35,1634,1635],{"language":37},[39,1636,1638],{"className":41,"code":1637,"language":37,"meta":43,"style":43},"let s = String::from(\"a\") + \"b\" + \"c\";   \u002F\u002F + takes String by value, &str args\nlet s = [\"a\", \"b\", \"c\"].concat();\nlet s = format!(\"{}-{}\", \"a\", \"b\");\nlet s: String = \"a\".to_string() + \"b\";\n",[15,1639,1640,1680,1713,1739],{"__ignoreMap":43},[47,1641,1642,1644,1646,1648,1650,1652,1654,1656,1659,1662,1665,1668,1671,1674,1677],{"class":49,"line":50},[47,1643,54],{"class":53},[47,1645,984],{"class":60},[47,1647,80],{"class":53},[47,1649,989],{"class":67},[47,1651,85],{"class":53},[47,1653,1010],{"class":67},[47,1655,106],{"class":60},[47,1657,1658],{"class":288},"\"a\"",[47,1660,1661],{"class":60},") ",[47,1663,1664],{"class":53},"+",[47,1666,1667],{"class":288}," \"b\"",[47,1669,1670],{"class":53}," +",[47,1672,1673],{"class":288}," \"c\"",[47,1675,1676],{"class":60},";   ",[47,1678,1679],{"class":162},"\u002F\u002F + takes String by value, &str args\n",[47,1681,1682,1684,1686,1688,1691,1693,1695,1698,1700,1703,1706,1708,1711],{"class":49,"line":94},[47,1683,54],{"class":53},[47,1685,984],{"class":60},[47,1687,80],{"class":53},[47,1689,1690],{"class":60}," [",[47,1692,1658],{"class":288},[47,1694,18],{"class":60},[47,1696,1697],{"class":288},"\"b\"",[47,1699,18],{"class":60},[47,1701,1702],{"class":288},"\"c\"",[47,1704,1705],{"class":60},"]",[47,1707,100],{"class":53},[47,1709,1710],{"class":67},"concat",[47,1712,91],{"class":60},[47,1714,1715,1717,1719,1721,1724,1726,1729,1731,1733,1735,1737],{"class":49,"line":116},[47,1716,54],{"class":53},[47,1718,984],{"class":60},[47,1720,80],{"class":53},[47,1722,1723],{"class":67}," format!",[47,1725,106],{"class":60},[47,1727,1728],{"class":288},"\"{}-{}\"",[47,1730,18],{"class":60},[47,1732,1658],{"class":288},[47,1734,18],{"class":60},[47,1736,1697],{"class":288},[47,1738,113],{"class":60},[47,1740,1741,1743,1745,1747,1749,1751,1754,1756,1758,1761,1763,1765],{"class":49,"line":132},[47,1742,54],{"class":53},[47,1744,1024],{"class":60},[47,1746,64],{"class":53},[47,1748,989],{"class":67},[47,1750,1031],{"class":53},[47,1752,1753],{"class":288}," \"a\"",[47,1755,100],{"class":53},[47,1757,1039],{"class":67},[47,1759,1760],{"class":60},"() ",[47,1762,1664],{"class":53},[47,1764,1667],{"class":288},[47,1766,1543],{"class":60},[194,1768,872],{"id":1769},"edge-cases-1",[208,1771,1772,1792,1800,1808,1825],{},[211,1773,1774,1780,1781,1783,1784,1787,1788,1791],{},[878,1775,1776,1779],{},[15,1777,1778],{},"s[0]"," panics",": there's no byte indexing of ",[15,1782,21],{},". Use ",[15,1785,1786],{},"s.as_bytes()[0]"," for bytes, ",[15,1789,1790],{},"s.chars().nth(0)"," for chars.",[211,1793,1794,1799],{},[878,1795,1796,1779],{},[15,1797,1798],{},"s[1..4]"," if not on char boundary.",[211,1801,1802,1807],{},[878,1803,1804],{},[15,1805,1806],{},"String::remove(i)",": byte-indexed; must be on char boundary.",[211,1809,1810,1816,1817,1820,1821,1824],{},[878,1811,1812,1815],{},[15,1813,1814],{},"split('\\n')"," doesn't include trailing empty",": use ",[15,1818,1819],{},"split_terminator","\u002F",[15,1822,1823],{},"split_inclusive"," for variations.",[211,1826,1827,1840,1841,1843,1844,100],{},[878,1828,1829,1832,1833,1836,1837],{},[15,1830,1831],{},"lines()"," splits on ",[15,1834,1835],{},"\\n"," and ",[15,1838,1839],{},"\\r\\n",", but ",[15,1842,1814],{}," doesn't strip ",[15,1845,1846],{},"\\r",[27,1848,1850,1836,1853],{"id":1849},"hashmapk-v-and-btreemapk-v",[15,1851,1852],{},"HashMap\u003CK, V>",[15,1854,1855],{},"BTreeMap\u003CK, V>",[35,1857,1858],{"language":37},[39,1859,1861],{"className":41,"code":1860,"language":37,"meta":43,"style":43},"use std::collections::HashMap;\nlet mut m: HashMap\u003CString, i32> = HashMap::new();\nm.insert(\"a\".into(), 1);\nm.entry(\"b\".into()).or_insert(2);\nm.entry(\"a\".into()).and_modify(|v| *v += 1).or_insert(0);\nlet v = m.get(\"a\");          \u002F\u002F Option\u003C&i32>\nlet v = m.get_key_value(\"a\");\nm.remove(\"a\");\nfor (k, v) in &m { \u002F* ... *\u002F }\n",[15,1862,1863,1882,1916,1941,1972,2026,2049,2070,2084],{"__ignoreMap":43},[47,1864,1865,1868,1871,1873,1876,1878,1880],{"class":49,"line":50},[47,1866,1867],{"class":53},"use",[47,1869,1870],{"class":67}," std",[47,1872,85],{"class":53},[47,1874,1875],{"class":67},"collections",[47,1877,85],{"class":53},[47,1879,24],{"class":67},[47,1881,1543],{"class":60},[47,1883,1884,1886,1888,1891,1893,1896,1898,1900,1902,1904,1906,1908,1910,1912,1914],{"class":49,"line":94},[47,1885,54],{"class":53},[47,1887,57],{"class":53},[47,1889,1890],{"class":60}," m",[47,1892,64],{"class":53},[47,1894,1895],{"class":67}," HashMap",[47,1897,71],{"class":60},[47,1899,21],{"class":67},[47,1901,18],{"class":60},[47,1903,74],{"class":67},[47,1905,77],{"class":60},[47,1907,80],{"class":53},[47,1909,1895],{"class":67},[47,1911,85],{"class":53},[47,1913,88],{"class":67},[47,1915,91],{"class":60},[47,1917,1918,1921,1923,1925,1927,1929,1931,1934,1937,1939],{"class":49,"line":116},[47,1919,1920],{"class":60},"m",[47,1922,100],{"class":53},[47,1924,522],{"class":67},[47,1926,106],{"class":60},[47,1928,1658],{"class":288},[47,1930,100],{"class":53},[47,1932,1933],{"class":67},"into",[47,1935,1936],{"class":60},"(), ",[47,1938,110],{"class":109},[47,1940,113],{"class":60},[47,1942,1943,1945,1947,1950,1952,1954,1956,1958,1961,1963,1966,1968,1970],{"class":49,"line":132},[47,1944,1920],{"class":60},[47,1946,100],{"class":53},[47,1948,1949],{"class":67},"entry",[47,1951,106],{"class":60},[47,1953,1697],{"class":288},[47,1955,100],{"class":53},[47,1957,1933],{"class":67},[47,1959,1960],{"class":60},"())",[47,1962,100],{"class":53},[47,1964,1965],{"class":67},"or_insert",[47,1967,106],{"class":60},[47,1969,127],{"class":109},[47,1971,113],{"class":60},[47,1973,1974,1976,1978,1980,1982,1984,1986,1988,1990,1992,1995,1997,1999,2001,2003,2005,2008,2011,2014,2016,2018,2020,2022,2024],{"class":49,"line":166},[47,1975,1920],{"class":60},[47,1977,100],{"class":53},[47,1979,1949],{"class":67},[47,1981,106],{"class":60},[47,1983,1658],{"class":288},[47,1985,100],{"class":53},[47,1987,1933],{"class":67},[47,1989,1960],{"class":60},[47,1991,100],{"class":53},[47,1993,1994],{"class":67},"and_modify",[47,1996,106],{"class":60},[47,1998,630],{"class":53},[47,2000,97],{"class":60},[47,2002,630],{"class":53},[47,2004,638],{"class":53},[47,2006,2007],{"class":60},"v ",[47,2009,2010],{"class":53},"+=",[47,2012,2013],{"class":109}," 1",[47,2015,1143],{"class":60},[47,2017,100],{"class":53},[47,2019,1965],{"class":67},[47,2021,106],{"class":60},[47,2023,180],{"class":109},[47,2025,113],{"class":60},[47,2027,2028,2030,2032,2034,2036,2038,2040,2042,2044,2046],{"class":49,"line":489},[47,2029,54],{"class":53},[47,2031,244],{"class":60},[47,2033,80],{"class":53},[47,2035,1890],{"class":60},[47,2037,100],{"class":53},[47,2039,332],{"class":67},[47,2041,106],{"class":60},[47,2043,1658],{"class":288},[47,2045,673],{"class":60},[47,2047,2048],{"class":162},"\u002F\u002F Option\u003C&i32>\n",[47,2050,2051,2053,2055,2057,2059,2061,2064,2066,2068],{"class":49,"line":618},[47,2052,54],{"class":53},[47,2054,244],{"class":60},[47,2056,80],{"class":53},[47,2058,1890],{"class":60},[47,2060,100],{"class":53},[47,2062,2063],{"class":67},"get_key_value",[47,2065,106],{"class":60},[47,2067,1658],{"class":288},[47,2069,113],{"class":60},[47,2071,2072,2074,2076,2078,2080,2082],{"class":49,"line":655},[47,2073,1920],{"class":60},[47,2075,100],{"class":53},[47,2077,545],{"class":67},[47,2079,106],{"class":60},[47,2081,1658],{"class":288},[47,2083,113],{"class":60},[47,2085,2086,2088,2091,2093,2095,2098,2101],{"class":49,"line":1128},[47,2087,400],{"class":53},[47,2089,2090],{"class":60}," (k, v) ",[47,2092,406],{"class":53},[47,2094,409],{"class":53},[47,2096,2097],{"class":60},"m { ",[47,2099,2100],{"class":162},"\u002F* ... *\u002F",[47,2102,418],{"class":60},[208,2104,2105,2117],{},[211,2106,2107,2109,2110,1820,2113,2116],{},[15,2108,24],{}," uses hashing (SipHash by default, secure but slower; use ",[15,2111,2112],{},"FxHashMap",[15,2114,2115],{},"AHashMap"," for perf).",[211,2118,2119,2122],{},[15,2120,2121],{},"BTreeMap"," keeps keys sorted (binary tree), iteration is ordered, lookups are O(log n) vs HashMap's amortized O(1).",[194,2124,2126,2128],{"id":2125},"entry-api",[15,2127,1949],{}," API",[199,2130,2131],{},"The idiomatic way to \"insert if absent, else modify\":",[35,2133,2134],{"language":37},[39,2135,2137],{"className":41,"code":2136,"language":37,"meta":43,"style":43},"m.entry(key).or_insert_with(|| expensive_default());\n*m.entry(key).or_insert(0) += 1;\n",[15,2138,2139,2165],{"__ignoreMap":43},[47,2140,2141,2143,2145,2147,2150,2152,2155,2157,2160,2163],{"class":49,"line":50},[47,2142,1920],{"class":60},[47,2144,100],{"class":53},[47,2146,1949],{"class":67},[47,2148,2149],{"class":60},"(key)",[47,2151,100],{"class":53},[47,2153,2154],{"class":67},"or_insert_with",[47,2156,106],{"class":60},[47,2158,2159],{"class":53},"||",[47,2161,2162],{"class":67}," expensive_default",[47,2164,299],{"class":60},[47,2166,2167,2170,2172,2174,2176,2178,2180,2182,2184,2186,2188,2190,2192],{"class":49,"line":94},[47,2168,2169],{"class":53},"*",[47,2171,1920],{"class":60},[47,2173,100],{"class":53},[47,2175,1949],{"class":67},[47,2177,2149],{"class":60},[47,2179,100],{"class":53},[47,2181,1965],{"class":67},[47,2183,106],{"class":60},[47,2185,180],{"class":109},[47,2187,1661],{"class":60},[47,2189,2010],{"class":53},[47,2191,2013],{"class":109},[47,2193,1543],{"class":60},[194,2195,2197],{"id":2196},"custom-keys","Custom Keys",[35,2199,2200],{"language":37},[39,2201,2203],{"className":41,"code":2202,"language":37,"meta":43,"style":43},"#[derive(Hash, Eq, PartialEq)]\nstruct MyKey { \u002F* ... *\u002F }\n",[15,2204,2205,2226],{"__ignoreMap":43},[47,2206,2207,2210,2213,2215,2218,2220,2223],{"class":49,"line":50},[47,2208,2209],{"class":60},"#[derive(",[47,2211,2212],{"class":67},"Hash",[47,2214,18],{"class":60},[47,2216,2217],{"class":67},"Eq",[47,2219,18],{"class":60},[47,2221,2222],{"class":67},"PartialEq",[47,2224,2225],{"class":60},")]\n",[47,2227,2228,2231,2234,2236,2238],{"class":49,"line":94},[47,2229,2230],{"class":53},"struct",[47,2232,2233],{"class":67}," MyKey",[47,2235,1505],{"class":60},[47,2237,2100],{"class":162},[47,2239,418],{"class":60},[199,2241,2242,2244,2245,2248,2249,2244,2251,100],{},[15,2243,24],{}," requires ",[15,2246,2247],{},"Hash + Eq",". ",[15,2250,2121],{},[15,2252,2253],{},"Ord",[194,2255,872],{"id":2256},"edge-cases-2",[208,2258,2259,2272,2280,2292,2301],{},[211,2260,2261,2264,2265,2267,2268,1820,2270,100],{},[878,2262,2263],{},"Float keys",": not ",[15,2266,2247],{}," (NaN), so can't be in ",[15,2269,24],{},[15,2271,2121],{},[211,2273,2274,2279],{},[878,2275,2276,2278],{},[15,2277,24],{}," iteration order is random"," per run (uses random seed). Don't rely on order.",[211,2281,2282,2287,2288,2291],{},[878,2283,2284],{},[15,2285,2286],{},"BTreeMap::range",": efficient range queries (",[15,2289,2290],{},"m.range('a'..='z')",").",[211,2293,2294,903,2297,2300],{},[878,2295,2296],{},"Capacity",[15,2298,2299],{},"HashMap::with_capacity"," pre-allocates.",[211,2302,2303,2308,2309,100],{},[878,2304,2305],{},[15,2306,2307],{},"mem::take(&mut map[key])",": extract a value, replacing with ",[15,2310,2311],{},"Default",[27,2313,2315,1836,2318],{"id":2314},"hashset-and-btreeset",[15,2316,2317],{},"HashSet",[15,2319,2320],{},"BTreeSet",[35,2322,2323],{"language":37},[39,2324,2326],{"className":41,"code":2325,"language":37,"meta":43,"style":43},"use std::collections::HashSet;\nlet mut s: HashSet\u003Ci32> = HashSet::new();\ns.insert(1);\ns.contains(&1);\ns.remove(&1);\ns.intersection(&other).collect::\u003CHashSet\u003C_>>();\ns.union(&other);\ns.difference(&other);\ns.symmetric_difference(&other);\ns.is_subset(&other);\ns.is_disjoint(&other);\n",[15,2327,2328,2344,2373,2387,2404,2420,2448,2464,2479,2494,2510],{"__ignoreMap":43},[47,2329,2330,2332,2334,2336,2338,2340,2342],{"class":49,"line":50},[47,2331,1867],{"class":53},[47,2333,1870],{"class":67},[47,2335,85],{"class":53},[47,2337,1875],{"class":67},[47,2339,85],{"class":53},[47,2341,2317],{"class":67},[47,2343,1543],{"class":60},[47,2345,2346,2348,2350,2352,2354,2357,2359,2361,2363,2365,2367,2369,2371],{"class":49,"line":94},[47,2347,54],{"class":53},[47,2349,57],{"class":53},[47,2351,1024],{"class":60},[47,2353,64],{"class":53},[47,2355,2356],{"class":67}," HashSet",[47,2358,71],{"class":60},[47,2360,74],{"class":67},[47,2362,77],{"class":60},[47,2364,80],{"class":53},[47,2366,2356],{"class":67},[47,2368,85],{"class":53},[47,2370,88],{"class":67},[47,2372,91],{"class":60},[47,2374,2375,2377,2379,2381,2383,2385],{"class":49,"line":116},[47,2376,1067],{"class":60},[47,2378,100],{"class":53},[47,2380,522],{"class":67},[47,2382,106],{"class":60},[47,2384,110],{"class":109},[47,2386,113],{"class":60},[47,2388,2389,2391,2393,2396,2398,2400,2402],{"class":49,"line":132},[47,2390,1067],{"class":60},[47,2392,100],{"class":53},[47,2394,2395],{"class":67},"contains",[47,2397,106],{"class":60},[47,2399,347],{"class":53},[47,2401,110],{"class":109},[47,2403,113],{"class":60},[47,2405,2406,2408,2410,2412,2414,2416,2418],{"class":49,"line":166},[47,2407,1067],{"class":60},[47,2409,100],{"class":53},[47,2411,545],{"class":67},[47,2413,106],{"class":60},[47,2415,347],{"class":53},[47,2417,110],{"class":109},[47,2419,113],{"class":60},[47,2421,2422,2424,2426,2429,2431,2433,2436,2438,2440,2442,2444,2446],{"class":49,"line":489},[47,2423,1067],{"class":60},[47,2425,100],{"class":53},[47,2427,2428],{"class":67},"intersection",[47,2430,106],{"class":60},[47,2432,347],{"class":53},[47,2434,2435],{"class":60},"other)",[47,2437,100],{"class":53},[47,2439,1148],{"class":67},[47,2441,85],{"class":53},[47,2443,71],{"class":60},[47,2445,2317],{"class":67},[47,2447,1157],{"class":60},[47,2449,2450,2452,2454,2457,2459,2461],{"class":49,"line":618},[47,2451,1067],{"class":60},[47,2453,100],{"class":53},[47,2455,2456],{"class":67},"union",[47,2458,106],{"class":60},[47,2460,347],{"class":53},[47,2462,2463],{"class":60},"other);\n",[47,2465,2466,2468,2470,2473,2475,2477],{"class":49,"line":655},[47,2467,1067],{"class":60},[47,2469,100],{"class":53},[47,2471,2472],{"class":67},"difference",[47,2474,106],{"class":60},[47,2476,347],{"class":53},[47,2478,2463],{"class":60},[47,2480,2481,2483,2485,2488,2490,2492],{"class":49,"line":1128},[47,2482,1067],{"class":60},[47,2484,100],{"class":53},[47,2486,2487],{"class":67},"symmetric_difference",[47,2489,106],{"class":60},[47,2491,347],{"class":53},[47,2493,2463],{"class":60},[47,2495,2497,2499,2501,2504,2506,2508],{"class":49,"line":2496},10,[47,2498,1067],{"class":60},[47,2500,100],{"class":53},[47,2502,2503],{"class":67},"is_subset",[47,2505,106],{"class":60},[47,2507,347],{"class":53},[47,2509,2463],{"class":60},[47,2511,2513,2515,2517,2520,2522,2524],{"class":49,"line":2512},11,[47,2514,1067],{"class":60},[47,2516,100],{"class":53},[47,2518,2519],{"class":67},"is_disjoint",[47,2521,106],{"class":60},[47,2523,347],{"class":53},[47,2525,2463],{"class":60},[27,2527,2529,2532],{"id":2528},"vecdequet-double-ended-queue",[15,2530,2531],{},"VecDeque\u003CT>"," — Double-Ended Queue",[35,2534,2535],{"language":37},[39,2536,2538],{"className":41,"code":2537,"language":37,"meta":43,"style":43},"use std::collections::VecDeque;\nlet mut dq: VecDeque\u003Ci32> = VecDeque::new();\ndq.push_back(1); dq.push_front(0);\ndq.pop_back(); dq.pop_front();\n",[15,2539,2540,2557,2587,2615],{"__ignoreMap":43},[47,2541,2542,2544,2546,2548,2550,2552,2555],{"class":49,"line":50},[47,2543,1867],{"class":53},[47,2545,1870],{"class":67},[47,2547,85],{"class":53},[47,2549,1875],{"class":67},[47,2551,85],{"class":53},[47,2553,2554],{"class":67},"VecDeque",[47,2556,1543],{"class":60},[47,2558,2559,2561,2563,2566,2568,2571,2573,2575,2577,2579,2581,2583,2585],{"class":49,"line":94},[47,2560,54],{"class":53},[47,2562,57],{"class":53},[47,2564,2565],{"class":60}," dq",[47,2567,64],{"class":53},[47,2569,2570],{"class":67}," VecDeque",[47,2572,71],{"class":60},[47,2574,74],{"class":67},[47,2576,77],{"class":60},[47,2578,80],{"class":53},[47,2580,2570],{"class":67},[47,2582,85],{"class":53},[47,2584,88],{"class":67},[47,2586,91],{"class":60},[47,2588,2589,2592,2594,2597,2599,2601,2604,2606,2609,2611,2613],{"class":49,"line":116},[47,2590,2591],{"class":60},"dq",[47,2593,100],{"class":53},[47,2595,2596],{"class":67},"push_back",[47,2598,106],{"class":60},[47,2600,110],{"class":109},[47,2602,2603],{"class":60},"); dq",[47,2605,100],{"class":53},[47,2607,2608],{"class":67},"push_front",[47,2610,106],{"class":60},[47,2612,180],{"class":109},[47,2614,113],{"class":60},[47,2616,2617,2619,2621,2624,2627,2629,2632],{"class":49,"line":132},[47,2618,2591],{"class":60},[47,2620,100],{"class":53},[47,2622,2623],{"class":67},"pop_back",[47,2625,2626],{"class":60},"(); dq",[47,2628,100],{"class":53},[47,2630,2631],{"class":67},"pop_front",[47,2633,91],{"class":60},[199,2635,2636],{},"Ring buffer; O(1) push\u002Fpop on both ends.",[27,2638,2640,2643],{"id":2639},"linkedlistt-rarely-needed",[15,2641,2642],{},"LinkedList\u003CT>"," — Rarely Needed",[199,2645,2646,2649,2650,2652,2653,2656,2657,100],{},[15,2647,2648],{},"std::collections::LinkedList"," is a doubly-linked list. Almost always the wrong choice — use ",[15,2651,2554],{}," instead. Linked lists are cache-unfriendly; their only advantage is O(1) splicing, which Rust's ",[15,2654,2655],{},"LinkedList"," supports via ",[15,2658,2659],{},"append",[27,2661,2663,2666],{"id":2662},"binaryheapt-max-heap",[15,2664,2665],{},"BinaryHeap\u003CT>"," — Max-Heap",[35,2668,2669],{"language":37},[39,2670,2672],{"className":41,"code":2671,"language":37,"meta":43,"style":43},"use std::collections::BinaryHeap;\nlet mut h = BinaryHeap::new();\nh.push(5); h.push(1); h.push(10);\nh.pop();     \u002F\u002F 10\n",[15,2673,2674,2691,2711,2747],{"__ignoreMap":43},[47,2675,2676,2678,2680,2682,2684,2686,2689],{"class":49,"line":50},[47,2677,1867],{"class":53},[47,2679,1870],{"class":67},[47,2681,85],{"class":53},[47,2683,1875],{"class":67},[47,2685,85],{"class":53},[47,2687,2688],{"class":67},"BinaryHeap",[47,2690,1543],{"class":60},[47,2692,2693,2695,2697,2700,2702,2705,2707,2709],{"class":49,"line":94},[47,2694,54],{"class":53},[47,2696,57],{"class":53},[47,2698,2699],{"class":60}," h ",[47,2701,80],{"class":53},[47,2703,2704],{"class":67}," BinaryHeap",[47,2706,85],{"class":53},[47,2708,88],{"class":67},[47,2710,91],{"class":60},[47,2712,2713,2716,2718,2720,2722,2724,2727,2729,2731,2733,2735,2737,2739,2741,2743,2745],{"class":49,"line":116},[47,2714,2715],{"class":60},"h",[47,2717,100],{"class":53},[47,2719,103],{"class":67},[47,2721,106],{"class":60},[47,2723,186],{"class":109},[47,2725,2726],{"class":60},"); h",[47,2728,100],{"class":53},[47,2730,103],{"class":67},[47,2732,106],{"class":60},[47,2734,110],{"class":109},[47,2736,2726],{"class":60},[47,2738,100],{"class":53},[47,2740,103],{"class":67},[47,2742,106],{"class":60},[47,2744,712],{"class":109},[47,2746,113],{"class":60},[47,2748,2749,2751,2753,2755,2758],{"class":49,"line":132},[47,2750,2715],{"class":60},[47,2752,100],{"class":53},[47,2754,583],{"class":67},[47,2756,2757],{"class":60},"();     ",[47,2759,2760],{"class":162},"\u002F\u002F 10\n",[199,2762,2763,2764,2767,2768,64],{},"For a min-heap, wrap with ",[15,2765,2766],{},"Reverse"," or ",[15,2769,2770],{},"std::cmp::Reverse",[35,2772,2773],{"language":37},[39,2774,2776],{"className":41,"code":2775,"language":37,"meta":43,"style":43},"let mut h: BinaryHeap\u003Cstd::cmp::Reverse\u003Ci32>> = BinaryHeap::new();\nh.push(std::cmp::Reverse(5));\n",[15,2777,2778,2819],{"__ignoreMap":43},[47,2779,2780,2782,2784,2787,2789,2791,2794,2796,2798,2800,2802,2804,2806,2809,2811,2813,2815,2817],{"class":49,"line":50},[47,2781,54],{"class":53},[47,2783,57],{"class":53},[47,2785,2786],{"class":60}," h",[47,2788,64],{"class":53},[47,2790,2704],{"class":67},[47,2792,2793],{"class":60},"\u003Cstd",[47,2795,85],{"class":53},[47,2797,777],{"class":60},[47,2799,85],{"class":53},[47,2801,2766],{"class":67},[47,2803,71],{"class":60},[47,2805,74],{"class":67},[47,2807,2808],{"class":60},">> ",[47,2810,80],{"class":53},[47,2812,2704],{"class":67},[47,2814,85],{"class":53},[47,2816,88],{"class":67},[47,2818,91],{"class":60},[47,2820,2821,2823,2825,2827,2829,2832,2834,2836,2838,2840,2842,2844],{"class":49,"line":94},[47,2822,2715],{"class":60},[47,2824,100],{"class":53},[47,2826,103],{"class":67},[47,2828,106],{"class":60},[47,2830,2831],{"class":67},"std",[47,2833,85],{"class":53},[47,2835,777],{"class":67},[47,2837,85],{"class":53},[47,2839,2766],{"class":67},[47,2841,106],{"class":60},[47,2843,186],{"class":109},[47,2845,2846],{"class":60},"));\n",[27,2848,2850],{"id":2849},"other-useful-collections-std-crates","Other Useful Collections (std + crates)",[208,2852,2853,2861,2870,2882,2888,2894,2900,2906],{},[211,2854,2855,18,2857,18,2859],{},[15,2856,2554],{},[15,2858,2317],{},[15,2860,2320],{},[211,2862,2863,2866,2867],{},[15,2864,2865],{},"IndexMap"," (preserves insertion order) — crate ",[15,2868,2869],{},"indexmap",[211,2871,2872,1820,2874,2877,2878,2881],{},[15,2873,2112],{},[15,2875,2876],{},"FxHashSet"," — crate ",[15,2879,2880],{},"fxhash",", fast non-crypto hash",[211,2883,2884,2887],{},[15,2885,2886],{},"ahash::AHashMap"," — fast non-crypto hash",[211,2889,2890,2893],{},[15,2891,2892],{},"smallvec::SmallVec"," — inline storage, avoids heap for small sizes",[211,2895,2896,2899],{},[15,2897,2898],{},"arrayvec::ArrayVec"," — stack-only, fixed capacity",[211,2901,2902,2905],{},[15,2903,2904],{},"bytes::Bytes"," — cheap clone byte buffers (network\u002FIO)",[211,2907,2908,2911],{},[15,2909,2910],{},"ropey"," — large text manipulation (Rope data structure)",[27,2913,2915],{"id":2914},"choosing-a-collection","Choosing a Collection",[1271,2917,2918,2928],{},[1274,2919,2920],{},[1277,2921,2922,2925],{},[1280,2923,2924],{},"You want",[1280,2926,2927],{},"Use",[1289,2929,2930,2939,2948,2957,2966,2975,2984,2998],{},[1277,2931,2932,2935],{},[1294,2933,2934],{},"Sequence, push\u002Fpop back",[1294,2936,2937],{},[15,2938,17],{},[1277,2940,2941,2944],{},[1294,2942,2943],{},"Sequence, both ends",[1294,2945,2946],{},[15,2947,2554],{},[1277,2949,2950,2953],{},[1294,2951,2952],{},"Map with arbitrary keys",[1294,2954,2955],{},[15,2956,24],{},[1277,2958,2959,2962],{},[1294,2960,2961],{},"Map with sorted keys \u002F ranges",[1294,2963,2964],{},[15,2965,2121],{},[1277,2967,2968,2971],{},[1294,2969,2970],{},"Unique elements",[1294,2972,2973],{},[15,2974,2317],{},[1277,2976,2977,2980],{},[1294,2978,2979],{},"Priority queue",[1294,2981,2982],{},[15,2983,2688],{},[1277,2985,2986,2989],{},[1294,2987,2988],{},"Small, known max size",[1294,2990,2991,2994,2995],{},[15,2992,2993],{},"ArrayVec"," \u002F ",[15,2996,2997],{},"SmallVec",[1277,2999,3000,3003],{},[1294,3001,3002],{},"Often-cloned byte buffer",[1294,3004,3005],{},[15,3006,2904],{},[27,3008,3010],{"id":3009},"summary","Summary",[199,3012,3013,3015,3016,3018,3019,1820,3021,3023,3024,3026],{},[15,3014,17],{}," is the workhorse — understand its memory model (capacity doubling, amortized O(1)). ",[15,3017,21],{}," is UTF-8-aware; never confuse bytes with chars. ",[15,3020,24],{},[15,3022,2121],{}," are the map workhorses; the ",[15,3025,1949],{}," API is idiomatic. Pick the right collection for the access pattern.",[199,3028,3029],{},"Next: Iterators and combinators — the functional side of Rust.",[3031,3032,3033],"style",{},"html pre.shiki code .svdQ7, html code.shiki .svdQ7{--shiki-default:#D73A49;--shiki-github-dark:#F97583}html pre.shiki code .ssxIu, html code.shiki .ssxIu{--shiki-default:#24292E;--shiki-github-dark:#E1E4E8}html pre.shiki code .sIsaT, html code.shiki .sIsaT{--shiki-default:#6F42C1;--shiki-github-dark:#B392F0}html pre.shiki code .snvgF, html code.shiki .snvgF{--shiki-default:#005CC5;--shiki-github-dark:#79B8FF}html pre.shiki code .sdCPZ, html code.shiki .sdCPZ{--shiki-default:#6A737D;--shiki-github-dark:#6A737D}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .github-dark .shiki span {color: var(--shiki-github-dark);background: var(--shiki-github-dark-bg);font-style: var(--shiki-github-dark-font-style);font-weight: var(--shiki-github-dark-font-weight);text-decoration: var(--shiki-github-dark-text-decoration);}html.github-dark .shiki span {color: var(--shiki-github-dark);background: var(--shiki-github-dark-bg);font-style: var(--shiki-github-dark-font-style);font-weight: var(--shiki-github-dark-font-weight);text-decoration: var(--shiki-github-dark-text-decoration);}html pre.shiki code .sJ6F3, html code.shiki .sJ6F3{--shiki-default:#032F62;--shiki-github-dark:#9ECBFF}",{"title":43,"searchDepth":94,"depth":94,"links":3035},[3036,3046,3056,3063,3065,3067,3069,3071,3072,3073],{"id":29,"depth":94,"text":3037,"children":3038},"Vec\u003CT> — The Growable Array",[3039,3040,3041,3042,3043,3044,3045],{"id":196,"depth":116,"text":197},{"id":302,"depth":116,"text":303},{"id":387,"depth":116,"text":388},{"id":505,"depth":116,"text":506},{"id":679,"depth":116,"text":680},{"id":732,"depth":116,"text":733},{"id":871,"depth":116,"text":872},{"id":967,"depth":94,"text":3047,"children":3048},"String — Owned UTF-8 String",[3049,3050,3052,3053,3054,3055],{"id":1160,"depth":116,"text":1161},{"id":1263,"depth":116,"text":3051},"String vs &str",{"id":1335,"depth":116,"text":1336},{"id":1521,"depth":116,"text":1522},{"id":1631,"depth":116,"text":1632},{"id":1769,"depth":116,"text":872},{"id":1849,"depth":94,"text":3057,"children":3058},"HashMap\u003CK, V> and BTreeMap\u003CK, V>",[3059,3061,3062],{"id":2125,"depth":116,"text":3060},"entry API",{"id":2196,"depth":116,"text":2197},{"id":2256,"depth":116,"text":872},{"id":2314,"depth":94,"text":3064},"HashSet and BTreeSet",{"id":2528,"depth":94,"text":3066},"VecDeque\u003CT> — Double-Ended Queue",{"id":2639,"depth":94,"text":3068},"LinkedList\u003CT> — Rarely Needed",{"id":2662,"depth":94,"text":3070},"BinaryHeap\u003CT> — Max-Heap",{"id":2849,"depth":94,"text":2850},{"id":2914,"depth":94,"text":2915},{"id":3009,"depth":94,"text":3010},"md",{},true,"\u002Frust\u002F14-collections",{"title":5,"description":43},"rust\u002F14-collections","st3z5yQ0cXDKuANWS9HOuBseUtLA60dsiGKpeReY6XE",1785944093232]