JAVA集合笔记
来源:互联网 发布:流星蝴蝶剑轻功 知乎 编辑:程序博客网 时间:2024/05/29 02:34
java集合类主要由两个接口派生:Collection 和 Map
Collection:Set(无序集合,元素不可重复)、Queue、List(有序集合,元素可以重复)。
Map:HashMap、Hashtable、TreeMap。
1、Set集合
Set集合不允许包含相同的元素,Set判断两个对象相同不是使用==运算符,而是根据equals方法。
1.1、HashSet
HashSet不是同步的,如果多个线程同时访问,必须通过代码保证其同步。
HashSet集合判断两个元素相等的标准是两个对象通过equals方法比较相等,并且两个对象的hashCode()方法返回值也相等。
//类A的equals方法总是返回true,但没有重写其hashCode()方法class A{public boolean equals(Object obj){return true;}}//类B的hashCode()方法总是返回1,但没有重写其equals()方法class B{public int hashCode(){return 1;}}//类C的hashCode()方法总是返回2,且重写了其equals()方法class C{public int hashCode(){return 2;}public boolean equals(Object obj){return true;}}public class HashSetTest{public static void main(String[] atgs){HashSet books = new HashSet();books.add(new A());books.add(new A());books.add(new B());books.add(new B());books.add(new C());books.add(new C());System.out.println(books);}}上面程序结果为:
[B@1,B@1,C@2,A@5483cd,A@9931f5]
当把一个对象放入HashSet中时,如果需要重写equals()方法,则也应该重写其hashCode()方法。
LinkedHashSet类是HashSet的子类,它使用链表维护元素的次序,当遍历LinkedHashSet中的元素时,会按元素的添加顺序来访问集合中的元素。
2.2、TreeSet
TreeSet类是SortedSet接口的实现类,可以确保元素处于排序状态。与HashSet集合采用hash算法来决定元素的存储位置不同,TreeSet采用红黑树的数据结构来存储集合元素。Tree支持两种排序方法:自然排序和定制排序。默认为自然排序。
自然排序:TreeSet会调用集合元素的compareTo(Object obj)方法来比较元素之间的大小关系,然后进行升序排列。如果试图把一个对象添加到TreeSet时,则该对象的类必须实现Comparable接口,否则程序将会抛出异常。
定制排序:如果需要实现定制排序,例如以降序排列,则可以通过Comparator接口的帮助。
class M{int age;public M(int age){this.age = age;}public String toString(){return "M[age:]"+age+"]";}}public class TreeSetTest{public static void main(String[] args){TreeSet ts = new TreeSet(new Comparator(){public int compare(Object o1,Object o2){M m1 = (M)o1;M m2 = (M)o2;return m1.age>m2.age?-1:m1.age<m2.age?1:0;}});ts.add(new M(5));ts.add(new M(-3));ts.add(new M(9));System.out.println(ts);}}
结果为:M[age:9],M[age:5],M[age:-3]
- Java集合类笔记
- java集合框架笔记
- Java集合学习笔记
- JAVA学习笔记--集合
- java学习笔记--集合
- JAVA集合学习笔记
- JAVA集合类笔记
- java集合笔记
- java笔记 集合总结
- java笔记 Map集合
- Java集合笔记
- JAVA集合笔记
- java笔记之集合
- Java(集合框架)笔记
- java集合类笔记
- java笔记之集合
- java集合练习笔记
- Java学习笔记-集合
- android截屏命令
- 我的助理辞职了(原文)
- The Google File System中文版附英文资源链接(下)
- 线程之路五:消费者生产者
- unity实现窗口提示代码
- JAVA集合笔记
- MFC状态栏的编程--动态时间,进度栏和鼠标位置显示
- list.h链表练习
- 面试智力题 — 时针与分针夹角度数问题
- eclipse tomcat 直接启动
- sql 2008 远程过程调用失败 0x800706be
- 地址格式 inet_pton() int_ntop()
- Oracle中有效小数处理
- java连接MySql数据库