PriorityBlockingQueue là gì?
PriorityBlockingQueue là hàng đợi không giới hạn (unbounded) tuân theo thứ tự ưu tiên (priority order). Nó không cho phép phần tử null và rất hữu ích trong xử lý đa luồng để tránh lỗi OutOfMemoryError khi hàng đợi đầy (vì nó không bao giờ đầy).
Ví dụ: Kiểm tra phần tử tồn tại với contains()
Bước 1 & 2: Tạo project và Layout
Tương tự các ví dụ trước, layout chỉ chứa một TextView id actionEvent.
Bước 3: MainActivity.java
package com.example.myapplication;
import android.os.Build;
import android.os.Bundle;
import android.view.View;
import androidx.annotation.RequiresApi;
import androidx.appcompat.app.AppCompatActivity;
import android.widget.TextView;
import java.util.concurrent.PriorityBlockingQueue;
public class MainActivity extends AppCompatActivity {
private PriorityBlockingQueue<String> priorityBlockingQueue;
@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
priorityBlockingQueue = new PriorityBlockingQueue<>();
final TextView actionEvent = findViewById(R.id.actionEvent);
// Thêm phần tử (sắp xếp theo thứ tự tự nhiên của String: alphabet)
priorityBlockingQueue.add("sai");
priorityBlockingQueue.add("ram");
priorityBlockingQueue.add("krishna");
priorityBlockingQueue.add("prasad");
priorityBlockingQueue.add("ram");
actionEvent.setText("Queue: " + priorityBlockingQueue.toString());
actionEvent.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// Kiểm tra "prasad" có trong queue không
boolean exists = priorityBlockingQueue.contains("prasad");
actionEvent.setText("Contains 'prasad': " + exists); // true
}
});
}
}
Giải thích
Vì String implements Comparable, các phần tử được sắp xếp theo thứ tự bảng chữ cái. contains() duyệt qua nội bộ để tìm kiếm, trả về true nếu tìm thấy.