^title List Class

Extends [Sequence](sequence.html).

An indexable contiguous collection of elements. More details [here][lists].

[lists]: ../../lists.html

## Static Methods

### List.**filled**(size, element)

Creates a new list with `size` elements, all set to `element`.

It is a runtime error if `size` is not a nonnegative integer.

### List.**new**()

Creates a new empty list. Equivalent to `[]`.

## Methods

### **add**(item)

Appends `item` to the end of the list.

### **clear**()

Removes all elements from the list.

### **count**

The number of elements in the list.

### **insert**(index, item)

Inserts the `item` at `index` in the list.

    :::wren
    var list = ["a", "b", "c", "d"]
    list.insert(1, "e")
    System.print(list) //> [a, e, b, c, d]

The `index` may be one past the last index in the list to append an element.

    :::wren
    var list = ["a", "b", "c"]
    list.insert(3, "d")
    System.print(list) //> [a, b, c, d]

If `index` is negative, it counts backwards from the end of the list. It bases this on the length of the list *after* inserted the element, so that `-1` will append the element, not insert it before the last element.

    :::wren
    var list = ["a", "b"]
    list.insert(-1, "d")
    list.insert(-2, "c")
    System.print(list) //> [a, b, c, d]

Returns the inserted item.

    :::wren
    System.print(["a", "c"].insert(1, "b")) //> b

It is a runtime error if the index is not an integer or is out of bounds.

### **iterate**(iterator), **iteratorValue**(iterator)

Implements the [iterator protocol][] for iterating over the elements in the
list.

[iterator protocol]: ../../control-flow.html#the-iterator-protocol

### **removeAt**(index)

Removes the element at `index`. If `index` is negative, it counts backwards
from the end of the list where `-1` is the last element. All trailing elements
are shifted up to fill in where the removed element was.

    :::wren
    var list = ["a", "b", "c", "d"]
    list.removeAt(1)
    System.print(list) //> [a, c, d]

Returns the removed item.

    :::wren
    System.print(["a", "b", "c"].removeAt(1)) //> b

It is a runtime error if the index is not an integer or is out of bounds.

### **[**index**]** operator

Gets the element at `index`. If `index` is negative, it counts backwards from
the end of the list where `-1` is the last element.

    :::wren
    var list = ["a", "b", "c"]
    System.print(list[1]) //> b

It is a runtime error if the index is not an integer or is out of bounds.

### **[**index**]=**(item) operator

Replaces the element at `index` with `item`. If `index` is negative, it counts
backwards from the end of the list where `-1` is the last element.

    :::wren
    var list = ["a", "b", "c"]
    list[1] = "new"
    System.print(list) //> [a, new, c]

It is a runtime error if the index is not an integer or is out of bounds.
