一 现看一下该接口的定义: public interface Comparable{ public int compareTo(Object o); } 该接口定义类的自然顺序实现该接口的类就可以按这种方式排序 一般要求: eequals((Object)e)和pareTo((Object)e)==具有相同的值 这样的话我们就称自然顺序就和equals一致 这个接口有什么用呢? 如果数据或者List中的元素实现了该接口的话我们就可以调用Collectionssort或者Arrays方法给他们排序 如果自然顺序和equals不一致的话如果出现在Sorted Map和Set里面 就会出现预想不到的逻辑错误可能你调用add的时候添加不了而集合里面确没有这个元素具体的讨论要接口哈希表的应用 二 java中定义了很多集合类(也叫聚集或者容器)Collection是所有集合类的父接口Collection接口定义了方法没有任何常量定义这里简要说明这些方法 size() 获得集合中元素的个数如果个数大于IntegerMAX_VALUE返回IntegerMAX_VALUE isEmpty() 如果不含任何元素返回true ntains(Object o) 如果包含指定元素返回true erator() 返回迭代器 toArray() 返回数组Object[] toArray(Object[] a) 返回数组Object[]如果a可以包含集合中的元素返回a否则生成一个新的数组 add(Object o) 添加一个元素成功返回true remove(Object o) 删除一个数据成功返回true addAll(Collection c) 添加包含在集合c中的所有元素如果集合有改变返回true removeAll(Collection c) 删除包含在集合c里的所有元素如果集合有改变返回true retainAll(Collection c) 删除不包含在集合c里的所有元素如果集合有改变返回true ntainsAll(Collection c) 如果包含集合c里的所有元素返回true clear() 清除集合调用后isEmpty应该为true equals(Object c) 判断是否相等 hashCode() 返回哈希值 这里有几点要注意的地方: 修改集合的时候如果集合有变化就返回true这个定义是不严格的对于单条纪录来说(addremove) 如果添加或者删除了指定的对象返回true对于add操作如果返回false表示集合已经存在相同的对象而且不 允许重复对于remove操作如果返回false表示集合中并没有这个对象对于批量操作就更不严谨了如果调用 addAll(Collection c)c中有条纪录而结果只添加了一条纪录也返回true但是集合中肯定已经含有其他的 那些元素了否则就应该抛出一个异常也就是说如果返回true的话containsAll(Collection c)应该为true toArray(Object[] a)方法到底有什么呢?因为toArray()方法需要重新生成一个数组虽然Collection内部有 这种数组结构但是必须得生成一个新的数组而不能直接返回内部的数组那样的话Collection就不安全了 toArray(Object[] a)利用现成的a数组(如果可以容纳的话)而不需要重新分配空间 equals()和hashCode()方法有点多余因为在Object中已经定义了这两个方法任何类都继承Object所以显得 多余但是加上也无可厚非 在Java类库中没有直接继承Collection的类都是继承Collection的子接口比如ListSetMap等而且都不相交 也就是不可以既是List又是Set |