AttributeSetインタフェースで表します。  
 AttributeSetインタフェースは、java.util.Mapインタフェースに似ています: キーと値のマップを提供します。各キーは一意であり、複数の値を含めることはできません。 ただし、AttributeSetインタフェースは、Java Print Service APIの要件に対応するためのインタフェースです。 AttributeSetの要件は次のとおりです。 
AttributeSetのEachキーはカテゴリに対応しており、キーの値は、キーで表されるカテゴリに属する属性値の1つのみです。 したがって、Mapとは異なり、AttributeSetはキーの可能な値を制限: 属性カテゴリは、そのカテゴリに属していない属性値に設定できません。 Attributeインタフェースを実装するOnly属性を属性セットに追加できます。AttributeSetに存在できます。 たとえば、属性セットにすでにMedia属性が含まれている場合、別のMedia属性を追加すると、最初の属性が上書きされます。 Likeは単一の属性で、属性セットにはロールがあります。 ロールは、AttributeSetサブインタフェースによって定義されます。このサブインタフェースは、「属性ロール」セクションに記載されているAttributeサブインタフェースをパラレル化します。 AttributeSetサブインタフェースは次のとおりです: PrintRequestAttributeSet, PrintJobAttributeSet, DocAttributeSetおよびPrintServiceAttributeSet。 属性セットの役割によって、構成される属性の種類が決まります。たとえば、印刷要求の属性セットを、印刷要求の属性だけで構成できます。 
The Java Print Service APIには、AttributeSetインタフェースの具体的な実装としてHashAttributeSetが含まれていますが、開発者は独自の実装を提供できます。 HashAttributeSetを直接使用するのではなく、アプリケーションはHashAttributeSetのサブクラスの1つを使用: HashPrintRequestAttributeSet, HashPrintJobAttributeSet, HashDocumentAttributeSetおよびHashPrintServiceAttributeSet。 これらのサブクラスは、対応するAttributeSetサブインタフェースを実装します。 たとえば、PrintRequestAttributeSetはAttributeSetを拡張し、HashPrintRequestAttributeSetはPrintRequestAttributeSetの具体的な実装です。 HashPrintRequestAttributeSetまたはPrintRequestAttributeSetの実装で作成された属性セットには、リクエスト属性のみを含めることができます。 
サブクラスとは異なり、HashAttributeSetには任意の種類の属性を含めることができます。 アプリケーションは、複数の種類の属性を含むセットが必要な場合に、HashAttributeSetを直接使用します。 1つの例は、PrintServiceのgetUnsupportedAttributesメソッドによって返されるセットです。 サポートされない属性が返されたときに、その属性は複数の属性機能に属している可能性があります。 
印刷要求の指定は印刷アプリケーションの主要な機能であるため、単一の属性と同様に、多くのアプリケーションは要求属性セットを作成します。 リクエスト属性セットを作成するには、HashPrintRequestAttributeSetクラスのコンストラクタの1つを使用します: 
PrintRequestAttributeSet aset = new HashPrintRequestAttributeSet();次の項では、セットに追加できる、より一般的に使用される属性の一部について説明します。