Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Android

Cách sử dụng remainingCapacity() trong LinkedBlockingDeque trên Android

Giới thiệu về LinkedBlockingDeque

LinkedBlockingDeque triển khai Collection và AbstractQueue, cung cấp giới hạn tùy chọn (optional bounded) dựa trên nút liên kết. Có thể truyền dung lượng tối đa vào constructor để kiểm soát bộ nhớ.

Phương thức remainingCapacity() trả về số phần tử có thể thêm vào nữa trước khi đạt giới hạn. Nếu không chỉ định dung lượng khi tạo, mặc định là Integer.MAX_VALUE.

Ví dụ minh họa

Bước 1: Tạo project

Android Studio → File → New Project.

Bước 2: Layout

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="https://schemas.android.com/apk/res/android"
    xmlns:app="https://schemas.android.com/apk/res-auto"
    xmlns:tools="https://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:gravity="center"
    android:layout_height="match_parent"
    tools:context=".MainActivity"
    android:orientation="vertical">
    <TextView
        android:id="@+id/actionEvent"
        android:textSize="40sp"
        android:layout_marginTop="30dp"
        android:layout_width="wrap_content"
        android:layout_height="match_parent" />
</LinearLayout>

Bước 3: Code (src/MainActivity.java)

package com.example.myapplication;

import android.os.Build;
import android.os.Bundle;
import android.support.annotation.RequiresApi;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.TextView;
import java.util.concurrent.LinkedBlockingDeque;

public class MainActivity extends AppCompatActivity {
    LinkedBlockingDeque<String> linkedBlockingDeque;

    @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // Tạo deque KHÔNG giới hạn (mặc định)
        linkedBlockingDeque = new LinkedBlockingDeque<>();
        final TextView actionEvent = findViewById(R.id.actionEvent);

        linkedBlockingDeque.add("sai");
        linkedBlockingDeque.add("ram");
        linkedBlockingDeque.add("krishna");
        linkedBlockingDeque.add("prasad");
        linkedBlockingDeque.add("ram");

        actionEvent.setText("" + linkedBlockingDeque);

        actionEvent.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                actionEvent.setText("" + linkedBlockingDeque.remainingCapacity());
            }
        });
    }
}

Kết quả

Vì tạo bằng constructor mặc định (unbounded), click TextView hiển thị: 2147483647

Tạo LinkedBlockingDeque CÓ giới hạn

// Giới hạn 10 phần tử
LinkedBlockingDeque<String> boundedDeque = new LinkedBlockingDeque<>(10);

boundedDeque.add("a"); // size=1
boundedDeque.remainingCapacity(); // trả về 9

Bảng hành vi remainingCapacity()

Constructor remainingCapacity() ban đầu Sau khi add 5 phần tử
new LinkedBlockingDeque<>() Integer.MAX_VALUE Integer.MAX_VALUE
new LinkedBlockingDeque<>(10) 10 5

Lưu ý

  • Chỉ có ý nghĩa khi deque được tạo với dung lượng cố định
  • Với unbounded deque, hãy dùng size() để theo dõi số lượng phần tử
  • Phương thức này thread-safe