1. 程式人生 > >Bag集合工具類(apache-commons-collections3.2工具包)在java中的使用

Bag集合工具類(apache-commons-collections3.2工具包)在java中的使用



Bag 是在 org.apache.commons.collections 包中定義的介面 ,也是集合的一種擴充工具類,當然結合用JDK中的map類進行相應的邏輯處理,也能實現Bag類的功能,但apache推出來肯定有它的原因和用處,知道有這麼一個類瞭解它大概的用法,開發的時候真遇到這種情況,知道有這麼個工具在你身邊等著你用呢。

此介面定義原始碼:

public interface Bag extends Collection {

    /**
     * Returns the number of occurrences (cardinality) of the given
     * object currently in the bag. If the object does not exist in the
     * bag, return 0.
     * 
     * @param object  the object to search for
     * @return the number of occurrences of the object, zero if not found
     */
    int getCount(Object object);
}

它 繼承了 java.util.Collection , 而它的實現類都被放在下面的bag 包中:

 Bag,"袋"的意思,肯定是裝“東西”的,之所以有這樣一組型別 , 是因為我們有時候需要在Collection 中存放多個相同物件的拷貝 , 並且需要很方便的取得該物件拷貝的個數 。 需要注意的一點是它雖然繼承JDK中的Collection ,但是如果真把它完全當作java.util.Collection 來用會遇到語義上的問題,HashBag 是 Bag 介面的一個標準實現。而BagUtils 提供一組static 的方法讓呼叫者獲取經過不同裝飾後的 Bag 例項。

看一下具體用法就一目瞭然了:


定義一個簡單輔助類:

package apache_commons_collections;

public class Person {
	public String name;
	public int year;
	
	public Person(){
		
	}
	
	public Person(String name,int year){
		this.name=name;
		this.year=year;
	}
	
	public String getName(){
		return this.name;
	}
	
	public int getYear(){
		return this.year;
	}
}

測試:

package apache_commons_collections;

import org.apache.commons.collections.Bag;
import org.apache.commons.collections.BagUtils;
import org.apache.commons.collections.bag.HashBag;


public class BagTest {
	
	public static void main(String args[]){
		Person p1=new Person("chen",23);
		Person p2=new Person("chen",21);
		Person p3=new Person("chen",11);
		Bag myBag=BagUtils.typedBag(new HashBag(),Person.class);	//例項化一個Bag
		myBag.add(p1,11);	
		myBag.add(p2,143);	
		myBag.add(p3,67);	
		
		System.out.println(myBag.getCount(p1));
		System.out.println(myBag.getCount(p2));
		System.out.println(myBag.getCount(p3));
	}
}

結果:

11
143
67

更加詳細的用法和說明,大家可以http://commons.apache.org/proper/commons-collections/下載原始碼和相應的API文件仔細研究研究。

注意:這組介面違反了 Collection contract這些方法中指定的行為不一樣所指定的行為集合。不合規的方法顯然是標有“(違反)”。使用這個Bag保持謹慎。
這違反了從原始規範的介面。在一個理想世界中,介面將改變解決此問題,但是已經決定維持向後相容性。

相關推薦

Bag集合工具apache-commons-collections3.2工具java的使用

 Bag 是在 org.apache.commons.collections 包中定義的介面 ,也是集合的一種擴充工具類,當然結合用JDK中的map類進行相應的邏輯處理,也能實現Bag類的功能,但

字串工具 org.apache.commons.lang.StringUtils

//null 和 “”操作~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ //判斷是否Null 或者 “” System.out.println(StringUtils.isEmpty(null)); System.out.printl

RDD使用程式設計介面方式轉換為DataFrame的工具針對欄位特別多的

在使用Spark-Sql 時,需要把RDD型別轉換為DataFrame,再使用一些SQL操作,在轉換為DataFrame時有兩種方式一種是通過反射方式,一種是通過程式設計介面方式 程式設計介面的方式比較常用,但是這種方式程式碼量可能比較大,特別是在你的欄位特別多的時候,你需要先把RDD中的型

操作session的工具目前是用在了ssm

package com.ye_0809.util; /** *session工具類 *@Author 何爽 *@Date 2018-9-20 **/ import javax.servlet.http.HttpServletRequest; import javax

單例實現聲音播放工具支援多個聲音同時播放

一直疑惑遊戲裡面的多個音效同時播放是怎麼實現的,今天終於弄明白了,單例實現,看程式碼: YJAudioTool.h #import <Foundation/Foundation.h> #import <AVFoundation/AVFo

org.apache.commons.commons-lang3工具

       本文只是簡單的介紹了commons-lang3中的SystemUtils、StringUtils、ArrayUtils這三個工具類中常用的方法,我已經例舉了很多方法。commons-lang3中可以讓我們寫的程式碼更加的優雅、提供開發效率,最

Java基礎五十九-集合工具Java集框架

1:Stack棧 棧是一種先進後出的資料結構。例如:在文字編輯器上都有撤銷功能,那麼每次使用的時候,最後一次的編輯操作永遠是最先撤銷的,那麼這個功能就是利用棧來實現的,棧的基本操作形式如下。 案例:實現棧的操作 import java.util.Stack;

org.apache.commons.lang3.StringUtils工具常用方法

在開發中,Apache 的 StringUtils 工具類有許多方法比 jdk 實現的方便許多。所有整理了幾個常用的: import org.apache.commons.lang3.StringUtils; public class StringUtilsTest {

apache commons io 2.2工具部分

近段時間,對apache commons io的原始碼做了深入的瞭解,在此把一些見解與大家分享。 首先我選擇了大部分框架還依賴的2.2版本而不是最新的2.4版本(2.5發行版還沒有釋出)進行原始碼的研讀,今天就簡介一下commons io的工具部分。 複製工具類: or

org.apache.commons.beanutils.BeanUtils 工具詳解

1、建立User類 package com.kd.zhouyuan.entity; import java.util.Arrays; import java.util.HashMap; import java.util.Map; public class User {pri

JDK5新特性之線程同步工具

string 兩個人 exec random 主線程 一個人 exce print exchange 一. Semaphore Semaphore能夠控制同一時候訪問資源的線程個數, 比如: 實現一個文件同意的並發訪問數. Semaphore實現的功能就類似廁全部5個坑

導出Excel工具一個主表多個明細表

導出 excel 選擇 ①ExcelData.java(Excel數據封裝類)package com.kentra.util; import java.util.List; import java.util.Map; /** * * 描述:為導出Excel文件封裝數據 * 封裝Excel

MSCL超級工具C#,開發人員必備,開發利器

cnblogs 分頁 導入導出 sqlserve context public 簡單 pac dir MSCL超強工具類庫 是基於C#開發的超強工具類集合,涵蓋了日常B/S或C/S開發的諸多方面,包含上百個常用封裝類(數據庫操作類全面支持Mysql、Access、Oracl

高可用的Spring FTP上傳下載工具已解決上傳過程常見問題

關於 package 輸入 .net rop inpu pasv for factory 前言 最近在項目中需要和ftp服務器進行交互,在網上找了一下關於ftp上傳下載的工具類,大致有兩種。   第一種是單例模式的類。   第二種是另外定義一個Service,直接通過

史上最全的開發工具

scp dbi bug 成對 截圖 depend 時間 sre invoke API銀行卡管理 → BankCheckcheckBankCard : 校驗銀行卡卡號是否合法getBankCardCheckCode: 從不含校驗位的銀行卡卡號采用 Luhm

並發工具等待多線程的CountDownLatch

err 更多 表示 amp throw new 所有 barrier let 前言 ??JDK中為了處理線程之間的同步問題,除了提供鎖機制之外,還提供了幾個非常有用的並發工具類:CountDownLatch、CyclicBarrier、Semphore、Exchanger、

並發工具 Phaser

dex 如果 例子 ride 模擬 問題 個數 在線 運行時 前言 ??JDK中為了處理線程之間的同步問題,除了提供鎖機制之外,還提供了幾個非常有用的並發工具類:CountDownLatch、CyclicBarrier、Semphore、Exchanger、Phaser;

JUC——線程同步輔助工具Exchanger,CompletableFuture

UC syn imp unit change new ace 負責 工具類 Exchanger交換空間 如果現在有兩個線程,一個線程負責生產數據,另外一個線程負責消費數據,那麽這個兩個線程之間一定會存在一個公共的區域,那麽這個區域的實現在JUC包之中稱為Exchanger。

重復造輪子,編寫一個輕量級的異步寫日誌的實用工具LogAsyncWriter

tail arch read 屬性 .info ssa CA TP arp 一說到寫日誌,大家可能推薦一堆的開源日誌框架,如:Log4Net、NLog,這些日誌框架確實也不錯,比較強大也比較靈活,但也正因為又強大又靈活,導致我們使用他們時需要引用一些DLL,同時還要學習各種

asp.net core 微信支付工具H5支付,掃碼支付,公眾號支付,app支付2-H5支付

IV app支付 tno 方式 quest ces sys net ota   上一篇說到微信掃碼支付,今天來分享下微信H5支付,適用場景為手機端非微信瀏覽器調用微信H5支付驚醒網站支付業務處理。申請開通微信H5支付工作不多做介紹,直接上代碼。   首先是微信支付業務類(W