黑马程序员——java集合框架——Set接口
2015-10-15 10:15
363 查看
------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
集合框架:一组专门用来存储其他对象的类(对象容器类)和接口的设计结构,统称为集合框架。而这组类的功能就是实现各种方式的数据存储。
Collection接口: 1、Set接口:存放的元素是无序并且不包含重复元素
2、List接口:存放的元素是有序并且允许有重复元素
注: 这2种接口中的元素:即对象引用,元素类型都为Object
这2种接口中的重复:是指两个对象用过equals判断相等
这2种接口中的有序:是指元素存入的顺序与取出的顺序相同
Set接口:(三种常见实现类)
1、HashSet类:
不保存元素的加入顺序,根据元素的哈希码进行存放的,所以取出时也可以根据哈希码快速找到
判断元素是否重复的方法:hashCode()和equals()
注:(hashCode()的方法返回值是对象存储的物理地址的一个索引)
允许添加null元素
结果如图:
可以看出HashSet添加的顺序与迭代显示的结果顺序不一致,也验证了HashSet不保存元素加入顺序的特征。
2、LinkedHashSet类:
根据元素的哈希码进行存放,同时用链表记录元素的加入顺序
注:通过链表来存储对象,一般插入和删除效率较高
3、TreeSet类:
使用红黑树结构对加入的元素进行排序存放
注: 1、放入TreeSet类中的元素必须是可“排序”的。
2、对加入的元素,若要实现compareTo()方法,必须实现comparable接口
如果对添加的对象没有实现comparable接口会引发异常:java.lang.ClassCastException
comparable接口强行对实现它的每个类的对象进行整体排序。
实现comparable接口的对象可以用作有序映射表中的键或有序集合中的元素,无序指定比较器
结果如图:
上图出现的结果是因为没有在Student类中实现接口Comparable
如果实现了Comparable接口:
结果如图:
java集合框架——Set接口
简介:集合框架:一组专门用来存储其他对象的类(对象容器类)和接口的设计结构,统称为集合框架。而这组类的功能就是实现各种方式的数据存储。
Collection接口: 1、Set接口:存放的元素是无序并且不包含重复元素
2、List接口:存放的元素是有序并且允许有重复元素
注: 这2种接口中的元素:即对象引用,元素类型都为Object
这2种接口中的重复:是指两个对象用过equals判断相等
这2种接口中的有序:是指元素存入的顺序与取出的顺序相同
Set接口:(三种常见实现类)
1、HashSet类:
不保存元素的加入顺序,根据元素的哈希码进行存放的,所以取出时也可以根据哈希码快速找到
判断元素是否重复的方法:hashCode()和equals()
注:(hashCode()的方法返回值是对象存储的物理地址的一个索引)
允许添加null元素
public class HashSetTest { public static void main(String[] args) { HashSet hs = new HashSet(); hs.add("张三"); hs.add("李四"); hs.add("王五"); hs.add("赵六"); hs.add("孙琦"); Iterator it = hs.iterator(); while (it.hasNext()) { System.out.println(it.next()); } } }
结果如图:
可以看出HashSet添加的顺序与迭代显示的结果顺序不一致,也验证了HashSet不保存元素加入顺序的特征。
2、LinkedHashSet类:
根据元素的哈希码进行存放,同时用链表记录元素的加入顺序
注:通过链表来存储对象,一般插入和删除效率较高
import java.util.Set; public class LinkedHashSet { public static void main(String[] args) { Set<Student> linkHashSet = new LinkedHashSet<Student>(); Student stu1 = new Student(18,"zhw"); Student stu2 = new Student(23,"zhxd"); Student stu3 = new Student(25,"zhh"); Student stu4 = new Student(25,"zha"); Student stu5 = new Student(25,"zha"); linkHashSet.add(stu3); linkHashSet.add(stu4); linkHashSet.add(stu1); //记录HashCode嘛顺序,按照顺序查找出来 linkHashSet.add(stu2); linkHashSet.add(stu5); linkHashSet.add(null); Iterator it = linkHashSet.iterator(); while (it.hasNext()) { System.out.println(it.next()); } } }
3、TreeSet类:
使用红黑树结构对加入的元素进行排序存放
注: 1、放入TreeSet类中的元素必须是可“排序”的。
2、对加入的元素,若要实现compareTo()方法,必须实现comparable接口
如果对添加的对象没有实现comparable接口会引发异常:java.lang.ClassCastException
comparable接口强行对实现它的每个类的对象进行整体排序。
实现comparable接口的对象可以用作有序映射表中的键或有序集合中的元素,无序指定比较器
public class TreeSetTest { public static void main(String[] args) { Set ts = new TreeSet(); Student stu1 = new Student(18, "zhw"); Student stu2 = new Student(23, "zhxd"); Student stu3 = new Student(25, "zhh"); Student stu4 = new Student(25, "zha"); ts.add(stu3); ts.add(stu4); ts.add(stu1); ts.add(stu2); ts.add(null); Iterator it = ts.iterator(); while (it.hasNext()) { System.out.println(it.next()); } } }
结果如图:
上图出现的结果是因为没有在Student类中实现接口Comparable
如果实现了Comparable接口:
package com.collection.demo; public class Student implements Comparable { private int age; private String name; public Student(int age, String name) { this.age = age; this.name = name; } // 因为需要打印Student类的相关信息,所以要重写toString()方法 public String toString() { return "Student [age=" + age + ", name=" + name + "]"; } public int hashCode() { return age * name.hashCode(); } public boolean equals(Object o) { Student s = (Student) o; return age == s.age && name.equals(s.name); } // 提供访问属性age的方法 public int getAge() { return age; } // 提供设置属性age的方法 public void setAge(int age) { this.age = age; } // 因为要实现comparable接口,所以要重写compareTo(Object o)方法 // 判断执行compareTo方法的Student对象与传入的对象按排序的条件相比 // 是大于,小于,还是等于传入的对象 public int compareTo(Object o) { Student s = (Student) o; if (s.getAge() < this.getAge()) return -1; else if (s.getAge() == this.getAge()) return 0; else return 1; } }
结果如图:
相关文章推荐
- 程序员面试、算法研究、编程艺术、红黑树、数据挖掘5大系列集锦
- [网易面试]自己总结(二)
- 程序员要学点儿理财知识,而不仅仅是代码技巧
- 黑马程序员---Java反射
- 2015年11月 面试题总结
- 黑马程序员——9.正则表达式(爬虫)
- PHP面试题之文件目录操作
- PHP经典面试题之设计模式(经常遇到)
- 程序员的10大职业谏言
- 程序员如何在十年内创造身价百倍
- 程序员必读经典书籍
- 十道海量数据处理面试题与十个方法大总结
- 找工作之面试题(1)
- 黑马程序员一一递归、IO流
- 黑马程序员——集合
- 黑马程序员一一常见的排序跟查找原理图
- 黑马程序员一一Java语言基础(五)
- 黑马程序员一一Java基础语法(四)
- 黑马程序员-hashCode()的作用
- 黑马程序员一一Java基础语法(三)