如题
所要实现的方法如下:
(1)单元素添加、删除操作。boolean add(Object o),将对象添加给集合。boolean remove(Object o),如果集合中有与o相匹配的对象,则删除对象o。(2)查询操作。int size(),返回当前集合中元素的数量。boolean isEmpty(),判断集合中是否有任何元素。boolean contains(Object o),查找集合中是否含有对象o。Iterator iterator(),返回一个迭代器,用来访问集合中的各个元素。(3)组操作:作用于元素组或整个集合。boolean containsAll(Collection c),查找集合中是否含有集合c中所有元素。boolean addAll(Collection c),将集合c中所有元素添加给该集合。void clear(),删除集合中所有元素。void removeAll(Collection c),从集合中删除集合c中的所有元素。void retainAll(Collection c),从集合中删除集合c中不包含的元素。
(4)Collection转换为Object数组:Object[] toArray(),返回一个内含集合所有元素的数组。Object[] toArray(Object[] a),返回一个内含集合所有元素的数组。运行期返回的数组和参数a的类型相同。注意:Collection不提供get()方法。如果要遍历Collectin中的元素,就必
十分谢谢
所要实现的方法如下:
(1)单元素添加、删除操作。boolean add(Object o),将对象添加给集合。boolean remove(Object o),如果集合中有与o相匹配的对象,则删除对象o。(2)查询操作。int size(),返回当前集合中元素的数量。boolean isEmpty(),判断集合中是否有任何元素。boolean contains(Object o),查找集合中是否含有对象o。Iterator iterator(),返回一个迭代器,用来访问集合中的各个元素。(3)组操作:作用于元素组或整个集合。boolean containsAll(Collection c),查找集合中是否含有集合c中所有元素。boolean addAll(Collection c),将集合c中所有元素添加给该集合。void clear(),删除集合中所有元素。void removeAll(Collection c),从集合中删除集合c中的所有元素。void retainAll(Collection c),从集合中删除集合c中不包含的元素。
(4)Collection转换为Object数组:Object[] toArray(),返回一个内含集合所有元素的数组。Object[] toArray(Object[] a),返回一个内含集合所有元素的数组。运行期返回的数组和参数a的类型相同。注意:Collection不提供get()方法。如果要遍历Collectin中的元素,就必
十分谢谢
import java.util.Collection;
Class CommonCollection{
private Collection c; public CommonCollection(Collection c){
this.c = c;
} public void add(Object o){
c.add(o);
}
...
}
源代码的文档,想看源代码的话,上你的jdk文件夹下面有个src.zip,源代码全在里面,解压了就能看到
另外这个东西本身不难,只是给你一个参照。剩下的可以照着文档练着自己写写,都是一样的东西。
谢谢
import java.util.Collection;
Class CommonCollection{
private Collection c; public CommonCollection(Collection c){
this.c = c; //这里用到了回调
} public void add(Object o){
c.add(o);
}
...
}public Class Test{
public static void main(String[] args){
ArrayList list = new ArrayList();
CommonCollection cc1 = new CommonCollection(list);
cc1.add("123"); TreeSet set = new TreeSet();
CommonCollection cc2 = new CommonCollection(set);
cc2.add("abc");
}
}或者像这样用反射
public Class Test{
public static void main(String[] args){
Collection list = Class.forName("java.util.ArrayList").newInstance();
CommonCollection cc1 = new CommonCollection(list);
cc1.add("123"); Collection set = Class.forName("java.util.TreeSet").newInstance();
CommonCollection cc2 = new CommonCollection(set);
cc2.add("abc");
}
}
回调的话,就是传进去父类或者接口就可以了,虚拟机会自动判断具体是什么类型。接口本身只提供了方法名,上面的写法实际执行的各个具象类中相关的方法。而Collection本身就是接口。实际项目中如果要写共通的话,用反射或者依赖注入这样的比较多。如果还是不能理解的话,搂主去看看回调的用法就应该会明白了。
java.lang.NoSuchMethodError: main
Exception in thread "main"
我是想把1,2,3输出到控制台上看看,我错哪了呢
public static void main(String[] args){
Collection list;
try {
list = (Collection) Class.forName("java.util.ArrayList").newInstance();
list.add("123");
for(int i=0;i<list.size();i++)
System.out.println(list.toString());
} catch (InstantiationException e) {
e.printStackTrace();
}
}
源代码中 public E remove(int index) {。}方法中的一条语句如下:
elementData[--size] = null; // Let gc do its work
这里的注释// Let gc do its work
是什么意思呢?请详解一下好吗?
Collection list;
list = (Collection) Class.forName("java.util.ArrayList").newInstance();
或者像我这样写:
Collection list = Class.forName("java.util.ArrayList").newInstance();是不能调用 list.toString(); 这个方法的,因为接口Collection中是没有toString()这个方法的。
回调是在别的方法里面调用,而不是在同一个方法里面使用。
另外想查看list里面的数据,也是这样查看的,ArrayList其实就是动态数组,需要指定里面的元素的位置,像这样 list.get(i).toString();还有 (Collection) Class.forName("java.util.ArrayList").newInstance(); 中的(Collection)这样写可能会有问题,向上转形成接口类型没有实际的意义。关于Let gc do its work,gc指的是垃圾回收器,这句话的意思是让垃圾回收器来回收不用的数据。像C/C++里面不用的数据需要程序员自己写回收代码;Java里面不用,都交给垃圾回收器去做的。