JAvaの集合フレームワーク:set,listとmap
7069 ワード
集合フレームワークは,集合を表すために規定された統一的な標準的なアーキテクチャである.任意の集合フレームワークは、対外インタフェース、インタフェースの実装、および集合演算のアルゴリズムの3つの大きなブロックを含む.今日は主に3つの集合フレームワーク構造,すなわちArrayList,HashSet,HashMapを学習した.
1.Listインタフェース(ArrayList)
Listは相対的に秩序化された集合を提供し,集合の長さを自分で変えることができ,要素の繰返しを可能にする
ArrayListの特徴:線形、秩序、長さが可変で、下付きがあります.
以下にArrayListの実装と遍歴を示す
2.Setインタフェース(HashSet)
Setインタフェースは無秩序な集合を提供し、彼のオブジェクトは特定の方法でソートされず、単純にオブジェクトを集合に追加するだけなので、重複オブジェクトの出現は許されない.
HashSet特徴:無秩序、長さ可変、繰り返し不可
以下はHashSetの実現と遍歴である
3.Mapインタフェース(HashMap)
Mapはマッピングされた対応関係の集合を提供し、key値が重複できないペアのキー値ペアで構成され、valueは可能である.また、同じキーが入力されている場合は置換されます
HashMapの特徴:無秩序、key繰り返し不可
以下にHashMapの実装と遍歴を示す
以下は,集合フレームワーク構造で解決した小さな問題について,それぞれ並べ替えと統計的繰返し回数である.
1並べ替えを繰り返すクラス
2統計重複文字数のクラス
3テストクラス
答えは
1 2 5 9 25 34 37 7
-----------------------
34 2
1 1
2 1
5 2
37 1
76 1
25 1
9 1
1.Listインタフェース(ArrayList)
Listは相対的に秩序化された集合を提供し,集合の長さを自分で変えることができ,要素の繰返しを可能にする
ArrayListの特徴:線形、秩序、長さが可変で、下付きがあります.
以下にArrayListの実装と遍歴を示す
public static void main(String args[]) {
// ArrayList
java.util.ArrayList<String> list = new java.util.ArrayList<String>();
// 10
for (int i = 0; i < 10; i++) {
String s = " " + i;
list.add(s);
}
// :
for (int i = 0; i < list.size(); i++) {
//
String str = list.get(i);
System.out.print(str + "\t");
}
System.out.println();
// :
java.util.Iterator<String> iter = list.iterator();
//
while (iter.hasNext()) {
//
String str = iter.next();
System.out.print(str + "\t");
}
System.out.println();
// : for
for (String str : list) {
System.out.print(str + "\t");
}
}
2.Setインタフェース(HashSet)
Setインタフェースは無秩序な集合を提供し、彼のオブジェクトは特定の方法でソートされず、単純にオブジェクトを集合に追加するだけなので、重複オブジェクトの出現は許されない.
HashSet特徴:無秩序、長さ可変、繰り返し不可
以下はHashSetの実現と遍歴である
public static void main(String[] args) {
// HashSet
java.util.HashSet<String> sets = new java.util.HashSet<String>();
// 10
for (int i = 0; i < 10; i++) {
String s = " " + i;
sets.add(s);
}
// , , add()
boolean b = sets.add(" 2");
boolean b1 = sets.add(" 10");
System.out.println(b + "<>" + b1);
// :
java.util.Iterator<String> iter = sets.iterator();
while (iter.hasNext()) {
String str = iter.next();
System.out.print(str + "\t");
}
System.out.println();
// : for
for(String str:sets){
System.out.print(str+"\t");
}
}
3.Mapインタフェース(HashMap)
Mapはマッピングされた対応関係の集合を提供し、key値が重複できないペアのキー値ペアで構成され、valueは可能である.また、同じキーが入力されている場合は置換されます
HashMapの特徴:無秩序、key繰り返し不可
以下にHashMapの実装と遍歴を示す
// HashMap
java.util.HashMap<Integer, String> maps = new java.util.HashMap<Integer, String>();
//
for (int i = 0; i < 10; i++) {
int num = i;
String name = " " + i;
maps.put(num, name);
}
// , K ,
maps.put(10, " 5");
maps.put(4, " ");
// :
// K Set
java.util.Set<Integer> set = maps.keySet();
// K , set
java.util.Iterator<Integer> iter = set.iterator();
while(iter.hasNext()){
// key
int num = iter.next();
// key Value
String name = maps.get(num);
System.out.println(num+"\t"+name);
}
}
以下は,集合フレームワーク構造で解決した小さな問題について,それぞれ並べ替えと統計的繰返し回数である.
1並べ替えを繰り返すクラス
public class uniqueorder {
int i = 0;
int[] orderarray = new int[i];
//
public void add(int a){
int[] addarray = new int[i+1];
for(int j=0;j<i;j++){
addarray[j]=orderarray[j];
}
addarray[i] = a;
orderarray = addarray;
i++;
}
// ,
public int operate(){
int j=0;
// set ( )
java.util.HashSet<Integer> hset = new java.util.HashSet<Integer>();
for(int a=0;a<i;a++){
hset.add(orderarray[a]);
}
// ( orderarray)
java.util.Iterator<Integer> iter = hset.iterator();
while(iter.hasNext()){
int k = iter.next();
int[] iterarray = new int[j+1];
for(int a=0;a<j;a++){
iterarray[a]=orderarray[a];
}
iterarray[j] = k;
orderarray =iterarray;
j++;
}
// ( )
for(int a=0;a<j;a++){
for(int b=j-1;b>a;b--){
if(orderarray[b]<orderarray[b-1]){
int temp=orderarray[b-1];
orderarray[b-1]=orderarray[b];
orderarray[b]=temp;
}
}
}
return j;
}
// ( )
public int pop(int index){
int v=orderarray[index];
return v;
}
}
2統計重複文字数のクラス
public class countrepeat {
int i = 0;
int[] orderarray = new int[i];
//
public void add(int a){
int[] addarray = new int[i+1];
for(int j=0;j<i;j++){
addarray[j]=orderarray[j];
}
addarray[i] = a;
orderarray = addarray;
i++;
}
//
public void operate(){
// hashmap
java.util.HashMap<Integer, Integer> hmap = new java.util.HashMap<Integer, Integer>();
// set ( )
java.util.HashSet<Integer> hset = new java.util.HashSet<Integer>();
for(int a=0;a<i;a++){
hset.add(orderarray[a]);
if(!hmap.containsKey(orderarray[a])){
hmap.put(orderarray[a], 1);
}else if(hmap.containsKey(orderarray[a])){
int v=hmap.get(orderarray[a])+1;
hmap.put(orderarray[a], v);
}
}
//
java.util.Iterator<Integer> iter = hset.iterator();
while(iter.hasNext()){
int k = iter.next();
int v = hmap.get(k);
System.out.println(k+"\t"+v);
}
}
}
3テストクラス
public static void main(String[] args) {
//
int[] testarray = {2,34,5,25,1,34,5,76,37,9};
//
uniqueorder uo = new uniqueorder();
countrepeat cr = new countrepeat();
//
for(int i=0;i<10;i++){
uo.add(testarray[i]);
cr.add(testarray[i]);
}
int k=uo.operate();
for(int i=0;i<k;i++){
System.out.print(uo.pop(i)+"\t");
}
System.out.println();
System.out.println("-----------------------");
cr.operate();
}
答えは
1 2 5 9 25 34 37 7
-----------------------
34 2
1 1
2 1
5 2
37 1
76 1
25 1
9 1