Trong java ngoài cách duyệt mảng bằng vòng lặp for, for each, while, do while thì còn cách nào không?

Cho em hỏi trong java ngoài cách duyệt mảng bằng vòng lặp for, for each, while, do while thì còn cách nào không ạ?
Hiện tại em đang có code như thế này cho em hỏi có cách nào tối ưu thời gian chạy của nó hơn không ạ?

Đề bài: Nhiệm vụ của bạn là viết một chương trình của một từ điển đơn giản, thực hiện các lệnh sau:

  • insert str : chèn xâu str vào từ điển hiện tại.
  • find str : nếu hiện tại, xâu str nằm trong từ điển thì trả về "yes" , ngược lại là "no" .

Với đầu vào là một tập các lệnh insertfind và ban đầu từ điển sẽ rỗng. Bạn hãy trả về một mảng kết quả có n phần tử, trong đó n chính là số lượng lệnh find có trong input và kết quả thứ i chính là lần find thứ i .

Lưu ý: Các lệnh sẽ được thực hiện theo thứ tự.

Đầu vào/Đầu ra:

  • [Giới hạn thời gian chạy]: 1 giây với C++, 6 giây với Java và C#, 8s với Python, GO và Js.
  • [Giới hạn bộ nhớ]: 128 MB
  • [Đầu vào] array of strings arr_op
    1 ≤ arr_op.size() ≤ 2 x 105
    Đảm bảo arr[i] chỉ có thể là một trong 2 dạng "insert str" hoặc "find str"
    1 ≤ str.size() ≤ 12
    Đảm bảo xâu str chỉ là chứa 1 trong 4 ký tự 'A', 'C', 'G', 'T' .
  • [Đầu ra] Array of String
    Một mảng có n phần tử, trong đó n là số lượng lệnh find và phần từ thứ i là kết quả của lần find thứ i.

Code của em:

static String[] dictionary(String[] arr_op) {
    ArrayList<String> temp = new ArrayList<>();
    ArrayList<String> result = new ArrayList<>();
    for (int i = 0; i < arr_op.length; i++) {
        if (arr_op[i].contains("insert")) {
            temp.add(arr_op[i].substring(7));
        } else {
            if (temp.contains(arr_op[i].substring(5)) == true ) {
                result.add("yes");
            } else {
                result.add("no");
            }
        }
    }
    return result.toArray(new String[0]);
}

Em cảm ơn nhiều ạ.