容器的制作(Collation和Map)

来源:互联网 发布:第十二个天体 知乎 编辑:程序博客网 时间:2024/05/22 14:13

1、定义一个类,类里面有一个属性col,类型是集合类型Collection,实现下列方法:可以向col里面添加数据、修改数据、查询数据、删除数据。也就是把这个col当作一个数据存储的容器,对其实现数据的增删改查的方法。(因为涉及到集合就必须要考虑泛型,我这里都用了Object类型,所以这里是不够完善的).

import java.util.ArrayList;import java.util.Collection;import java.util.Iterator;public class MyCollection {//根据工程需要,下面的实现可以选择不同的集合类如:List(ArrayList,LinkedList),Set(HashSet,TreeSet)private Collection col = new ArrayList();//增public boolean add(Object obj){return col.add(obj);}//删public boolean delete(Object obj){return col.remove(obj);}//改public boolean update(Object oldObj, Object newObj){Object objs[] = col.toArray();col.clear();boolean boo=false;for(int i=0;i<objs.length;i++){if(objs[i].equals(oldObj)){col.add(newObj);//替换boo = true;}else{col.add(objs[i]);//照搬}}return boo;}//查(全,单,条件)public Collection getAll(){return col;}public Collection getByCondition(String str){Collection resCol = new ArrayList();Iterator it = col.iterator();  //用迭代器遍历while(it.hasNext()){Object obj = it.next();if(obj.toString().indexOf(str)>=0){   //符合查找条件resCol.add(obj);}}return resCol;}}
public class Person{private String name;private int age;private String addr;public Person(String name, int age, String addr) {super();this.name = name;this.age = age;this.addr = addr;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public String getAddr() {return addr;}public void setAddr(String addr) {this.addr = addr;}@Overridepublic String toString() {return name + "," + age+","+addr;}}

下面进行容器的测试: 这使用的是Juit

        @Testpublic void test3(){MyCollection col = new MyCollection();col.add("a111111");col.add("a3223");col.add("a5454451");col.add("freerer111");col.add( new Person("Jack",22,"湖南"));col.add( new Person("小李",22,"武侠"));col.add( new Person("张三",22,"天涯"));//用迭代器遍历Collection colAll = col.getByCondition("a");  //查出所有带'a'的元素Iterator it = colAll.iterator();while(it.hasNext()){System.out.println(it.next());}}

2、把上题的Collection改成使用Map实现。其实差不多,只是涉及到Map中的键值对<key,value>问题
附代码如下:
import java.util.ArrayList;import java.util.Collection;import java.util.HashMap;import java.util.Iterator;import java.util.Map;import java.util.Map.Entry;import java.util.Set;public class MyMap {//根据工程需要,下面的实现可以选择不同的集合类如:HashMap, TreeMapprivate Map map = new HashMap();//增,改public Object put(Object key, Object value){return map.put(key,value); //返回被替换的对象即对象}//删/** * @param key 被移除对象的键值 * @return 返回被移除的对象 */public Object delete(Object key){return map.remove(key);//返回被移除的对象}//改--本方法可以不要,直接和"增"合并public Object update(Object key, Object newObj){return map.put(key, newObj);}//查(全,单,条件)public Map getAll(){return map;}public Map getByCondition(String str){Map resMap = new HashMap();Set set = map.entrySet();Iterator it = set.iterator();while(it.hasNext()){Entry en =(Entry) it.next();if(en.getValue().toString().indexOf(str)>=0){resMap.put(en.getKey(), en.getValue());}}return resMap;}}
下面进行测试:
  @Testpublic void test(){Map map = new HashMap();map.put("1","a111111");map.put("2","a3223");map.put("a1","a5454451");map.put("ww","freerer111");map.put("qq", new Person("Jack",22,"湖南"));map.put(1, new Person("小李",22,"武侠"));map.put(23.1, new Person("张三",22,"天涯"));//增强for循环只能读不能改for( Object obj: map.entrySet() ){Entry en = (Entry)obj;System.out.println(en.getKey()+":"+en.getValue());  //将所有的信息输出}}