Java 集合
来源:互联网 发布:网络贵金属 编辑:程序博客网 时间:2024/06/05 21:03
Java 集合
1.
2. Collection 接口存储一组不唯一,无序的对象;
3. List 接口存储一组不唯一,有序(插入顺序)的对象
4. Set 接口存储一组唯一,无序的对象
5. 所有放到List中的都是Object,取出时必须强制类型转换(强转时记得判断instanceof).
6. List中有许多方法是unchecked异常,可能抛出,使用时一定要记得提前判断传入参数,尽量try…catch,捕获到异常时输出异常信息.
7. List中的add()方法返回是boolean,在内存不够用时会返回失败false.
8. List避免重复,插入之前判断contains().
9. Set无法随机访问,必须使用迭代器遍历.
10. Set使用对象equals()方法判断两个对象是不是同一个对象;如果你重写了equals()方法,那么一定要记得重写hashCode()方法!
两对象的hashcode相等不一定两个对象equals;但是如果两个对象equals,那么两个对象的hashcode一定相等;
11. equals()方法注意事项
a. 自反性:对于任何值x, x.equals(x) 都应返回 true。
b. 对称性:对于任何非空引用值 x 和 y,当且仅当 y.equals(x) 返回 true 时,x.equals(y) 才应返回 true。
c. 传递性:对于任何非空引用值 x、y 和 z,如果 x.equals(y) 返回 true,并且 y.equals(z) 返回 true,那么 x.equals(z) 应返回 true。
d. 一致性:对于任何非空引用值 x 和 y,多次调用 x.equals(y) 始终返回 true 或始终返回 false,前提是对象上 equals 比较中所用的信息没有被修改。
e. 对于任何值x ,x.equals(null) 都应返回 false。
12. 另外一个常用的列表类是Vector类,它也实现了List接口,可以实现ArrayList的所有操作
Vector和ArrayList的异同:
1.实现原理、功能相同,可以互用
2.主要区别:
Vector线程安全操作相对较慢
ArrayList重速度轻安全,线程非安全
长度需增长时,Vector默认增长一倍,ArrayList增长50%
Vector可以使用capacity()方法获取实际的空间
13. 当我们在使用形如HashMap、HashSet、HashTable等以Hash开头的集合类时,hashCode()会被隐式调用以来创建哈希映射关系。
14. 所有用于判断相等的字段在hashCode中都要使用
15. hashCode方法的模板:
public int hashCode() { final int PRIME1 = 13; //这里最好是定义成类的属性,最好是素数 final int PRIME2 = 17; … int result= 1; result = PRIME1 * property1; result += PRIMER2 * property2; return result;}
equals重写的模板:(这里引用:http://blog.csdn.net/min123456520/article/details/5194030)
/* * 重写equals必须注意: * 1 自反性:对于任意的引用值x,x.equals(x)一定为true * 2 对称性:对于任意的引用值x 和 y,当x.equals(y)返回true,y.equals(x)也一定返回true * 3 传递性:对于任意的引用值x、y和z,如果x.equals(y)返回true,并且y.equals(z)也返回true,那么x.equals(z)也一定返 回 true * 4 一致性:对于任意的引用值x 和 y,如果用于equals比较的对象信息没有被修改, * 多次调用x.equals(y)要么一致地返回true,要么一致地返回false * 5 非空性:对于任意的非空引用值x,x.equals(null)一定返回false * * 请注意: * 重写equals方法后最好重写hashCode方法,否则两个等价对象可能得到不同的hashCode,这在集合框架中使用可能产生严重后果 */ /* * 1.重写equals方法修饰符必须是public,因为是重写的Object的方法. * 2.参数类型必须是Object. */ public boolean equals(Object other){ //重写equals方法,后面最好重写hashCode方法 if(this == other) //先检查是否其自反性,后比较other是否为空。这样效率高 return true; if(other == null) return false; if( !(other instanceof Cat)) return false; final Cat cat = (Cat)other; if( !getName().equals(cat.getName())) return false; if( !getBirthday().equals(cat.getBirthday())) return false; return true; }
hashCode()方法重写的模板:(这里引用:http://blog.csdn.net/min123456520/article/details/5194030)
public int hashCode(){ //hashCode主要是用来提高hash系统的//查询效率。当hashCode中不进行任何操作时,可以直接让其返回 一常数,或者不进行重写。 int result = getName().hashCode(); result = 29 * result +getBirthday().hashCode(); return result; //return 0; }
- Java集合:集合框架
- java集合---set集合
- JAVA 集合 的 集合
- 【集合】Java集合对比
- JAVA集合-Map集合
- JAVA集合-Set集合
- JAVA集合-List集合
- java集合------Map集合
- Java集合----List集合
- Java集合----Set集合
- Java集合----Map集合
- JAVA集合
- JAVA集合
- Java集合
- JAVA集合
- Java集合
- Java集合
- java 集合
- org.aspectj aspectjweaver 报错
- reboot mode
- java字符转换问题
- 383. Ransom Note 难度:easy
- [LeetCode]202. Happy Number
- Java 集合
- [UIKBBlurredKeyView candidateList]: unrecognized selector sent to instance
- [JAVA] float,double精度
- hive metastore日志中报错message:Metastore contains multiple versions
- HTTP长连接和短连接原理浅析
- web.xml 各版本
- redis缓存接口设计
- ubuntu安装jdk出现的问题Failed to extract the files
- Java 文件操作